Вот сценарий:
Мне нужно закодировать один входной файл, предположить с помощью 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, которая теперь исправлена.