Мультиплексирование нескольких отдельных видео MPEG-TS в MPTS с использованием ffmpeg
Я попытался найти решение для мультиплексирования различных входов (ts) в одну MPTS, чтобы его можно было использовать в качестве входа для модулятора DVB-T. По сути, я хочу выбрать определенные TS, предоставляемые спутниковым приемником, упаковать их в одну MPTS и отправить в модулятор. В настоящее время мне удалось сделать это с одним потоком, используя следующую команду:
~/DATVRelease/ffmpeg \
-re -i URL_SINGLE_INPUT_TS_STREAM -vcodec copy -acodec copy \
-f mpegts -mpegts_original_network_id 1 -mpegts_transport_stream_id 1 \
-mpegts_service_id 1 -mpegts_pmt_start_pid 1000 -mpegts_start_pid 1001 \
-metadata service_provider="YOUR CALL" \
-metadata service_name="N1 (ALEKSANDAR)" \
~/dvb/videots
где videots - это труба fifo, созданная командой mkfifo. Следующий код выдает результат на стороне получателя:
В ffmpeg есть функция -map, где я могу добавить несколько аудиоканалов / или видеоканалов, но они не будут на стороне приемника обнаруживаться как телевизионные каналы с различными услугами, потому что в моем понимании должна быть создана соответствующая таблица PMT (iso13818)
Единственный открытый исходный код, который я смог найти, это http://www.scara.com/~schirmer/o/mplex13818/, но мне все еще интересно, может ли ffmpeg сделать эту работу для меня?
1 ответ
Вот основная команда для создания одного файла MPEG2 TS, содержащего несколько программ.
ffmpeg -i FirstInput -i SecondInput \
-map 0:0 -map 0:1 -map 1:0 -map 1:1 \
-program title=ProgOne:st=0:st=1 -program title=ProgTwo:st=2:st=3 \
-f mpegts mpts.ts
Ниже приведены простые иллюстрации для каждого варианта.
-i FirstInput -i SecondInput
Выберите исходные файлы, которые содержат элементарные потоки, которые вы хотите мультиплексировать в выходной MPTS
-map 0:0 -map 0:1 -map 1:0 -map 1:1
Выберите отдельные элементарные потоки, которые вы хотите мультиплексировать в выходной MPTS. Потоки будут проиндексированы с нуля. Здесь мы выбираем первый и второй потоки для обоих файлов. Обычно они соответствуют видео и аудио потоку. См. Главу " Дополнительные параметры" документации FFmpeg и вики для -map.
-program title=ProgOne:st=0:st=1 -program ProgTwo:st=2:st=3
Скажите FFmpeg сгенерировать две программы на выходе MPTS. Вот title
дает имя_сервиса в SDT. st=
определяет потоки, помещенные в соответствующую программу. Смотрите главу "Основные параметры" в документации FFmpeg.
-f mpegts
Скажите FFmpeg использовать mpegts muxer на случай, если он не может быть выведен из суффикса выходного файла.
Ключевые параметры: -map и -program для мультиплексирования нескольких программ в одном выводе. Улучшение было добавлено в этот коммит в соответствии с проблемой 4734 и 4525.
Очевидно, что для настройки поведения можно добавить больше параметров, таких как тип кодека, контроль битрейта, контроль качества и т. Д.