Как закодировать один входной файл в несколько потоков HLS с помощью FFmpeg, включая главный список воспроизведения

сценарий:

мне нужно закодировать один входной файл, предположим, с libx264 в несколько потоков HLS, и цель состоит в том, чтобы также создать главный список воспроизведения HLS с тем же фрагментом ffmpeg.

из документации FFmpeg на то же самое, они описывают сценарий, который принимает в нескольких входов, таких как MPEG транспортных потоков, классификации аудио и видео потоков в нем, а затем генерировать несколько потоков HLS, как указано выше, как показано здесь. См. документацию по var_stream_mapна той же странице.

на подобный вопрос задавался и раньше, но случай пользователя описывает сценарий, задокументированный FFmpeg.

любые зацепки, спасибо.

контроль:

Я сделал некоторый прогресс в запросе выше.

можно установить один и тот же вход более одного раза, что позволяет как для переназначения входов и перекодировать на лету то можно после этого muxed в HLS как показано ниже с h264_nvenc кодировщик:

ffmpeg -loglevel debug -threads 4 -i /home/lin/Desktop/src/sowdtow.webm 
-i /home/lin/Desktop/src/sowdtow.webm 
-map '0:v' -c:v h264_nvenc -s 1920x1080 -preset llhq -rc:v vbr_hq -pix_fmt yuv420p -profile:v main -level 4.1 -b:v 3500k -maxrate:v 4250k -bufsize:v 8400k -map '0:a' -c:a aac -ab 128k 
-map '1:v' -c:v h264_nvenc -s 1280x720 -preset llhq -rc:v vbr_hq -pix_fmt yuv420p -profile:v main -level 4.1 -b:v 2800k -maxrate:v 2996k -bufsize:v 4200k -map '1:a' -c:a aac -ab 128k 
-f hls -var_stream_map "v:0,a:0 v:1,a:1" -hls_segment_filename 'vs%v/file_%03d.ts' -hls_time 5 -master_pl_name 'mainmanifest.m3u8' /home/lin/Desktop/dest/vs%v/manifest.m3u8

однако эта команда имеет следующую аномалию: она выводит последний поток (-map 1:v-map:1:a) дважды, полностью игнорируя первый и второй потоки:

less mainmanifest.m3u8

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=3220800,RESOLUTION=1280x720,CODECS="avc1.4d4029,mp4a.40.2"
vs0/manifest.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=3220800,RESOLUTION=1280x720,CODECS="avc1.4d4029,mp4a.40.2"
vs1/manifest.m3u8

который может помочь в сужении проблемы к проблеме переназначения для HLS muxer.

все еще расследует. Это воняет синтаксической ошибкой где-то в команде выше, будет обновляться, как только у меня будет исправление для этого.

Edit:

это было вызвано ошибкой в FFmpeg:https://trac.ffmpeg.org/ticket/7073 который теперь исправлен.

21
задан 林正浩
02.03.2023 2:41 Количество просмотров материала 2683
Распечатать страницу

1 ответ

поэтому, видимо, неправильная длительность EXTINF наблюдаемых в альтернативных потоков был вызван исправлен дефект см. пэчворк здесь.

пример фрагмента, который будет производить три варианта HLS представлений, предполагая, что входящий видеопоток имеет частоту кадров 29.97 кадров в секунду, и с помощью фиксированного размера GOP, с помощью кодировщика NVENC, может быть сделано следующим образом:

ffmpeg -loglevel debug -threads 4 -vsync 1 -i '/home/lin/Desktop/src/sowdtow.webm' \
-vf yadif -g 29.97 -r 29.97 \
-b:v:0 5250k -c:v h264_nvenc -preset llhq -rc:v vbr_hq -pix_fmt yuv420p -profile:v main -level 4.1 -strict_gop 1 -rc-lookahead 32 -no-scenecut 1 -forced-idr 1 -gpu 0 \
-b:v:1 4200k -c:v h264_nvenc -preset llhq -rc:v vbr_hq -pix_fmt yuv420p -profile:v main -level 4.1 -strict_gop 1 -rc-lookahead 32 -no-scenecut 1 -forced-idr 1 -gpu 1 \
-b:v:1 3150k -c:v h264_nvenc -preset llhq -rc:v vbr_hq -pix_fmt yuv420p -profile:v main -level 4.1 -strict_gop 1 -rc-lookahead 32 -no-scenecut 1 -forced-idr 1 -gpu 2 \
-b:a:0 256k \
-b:a:0 192k \
-b:a:0 128k \
-c:a aac -ar 48000  -map 0:v -map 0:a:0 -map 0:v -map 0:a:0 -map 0:v -map 0:a:0 \
-f hls -var_stream_map "v:0,a:0  v:1,a:1 v:2,a:2" \
-master_pl_name  master.m3u8 -t 300 -hls_time 10 -hls_init_time 4 -hls_list_size 10 -master_pl_publish_rate 10 -hls_flags delete_segments+discont_start+split_by_time  \
"/home/lin/Desktop/dest/vs%v/manifest.m3u8"

пометить как решена.

0
отвечен 林正浩 2023-03-03 10:29

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх