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

1777
林正浩

Вот сценарий:

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

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

Аналогичный вопрос был задан до, но дело пользователя описывает сценарий Подтверждается FFmpeg.

Любое ведет, спасибо.

Следовать за:

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

Можно установить один и тот же вход более одного раза, что позволяет как перераспределять входы, так и перекодировать на лету, которые затем могут быть преобразованы в 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.

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

Редактировать:

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

1
Примечания. Оставьте этот вопрос отмеченным как открытый, если кто-либо еще сталкивался с такой проблемой. 林正浩 6 лет назад 0

1 ответ на вопрос

0
林正浩

Таким образом, очевидно, неправильная продолжительность 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" 

Маркировка как решенная.

Похожие вопросы