2

Возможно ли с помощью FFMPEG преобразовать m3u8 в MP4 и сохранить заголовки (текст)?

Глядя на поток Apple, https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/bipbop_4x3_variant.m3u8 я вижу, что в видеопотоке упоминаются скрытые титры, но не могу найти способ извлечь их.

Stream #0:0: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv, smpte1
70m/smpte170m/bt709), 400x300, Closed Captions, 29.92 fps, 29.92 tbr, 90k tbn, 1
80k tbc

Многократные попытки, которые я сделал, транскодируют в mp4, но он сбрасывает подписи.

Я использовал VLC на манифесте, и у него есть "субтитры", но после транскодирования mp4 нет.

Использовал команду:ffmpeg -i https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/bipbop_4x3_variant.m3u8 -c copy -bsf:a aac_adtstoasc out.mp4

2 ответа2

2

Мне удалось собрать достаточно информации, чтобы завершить это. Это комбинация из 3 команд.

Использование ffmpeg версии 2.8.4

Во-первых, сегменты списка воспроизведения должны быть объединены в один файл MPEG-TS:

ffmpeg -i [playlist_url].m3u8 -c copy [filename].ts

Далее нам нужно извлечь скрытые подписи из файла:

ffmpeg -f lavfi -i "movie=[filename_from_last_step].ts[out0+subcc]" [filename].srt

Примечание: я смогу заставить его работать, только если файл ts и текущий путь cmd совпадают.

Наконец, вы объединяете файл ts и srt и транскодируете в MP4:

ffmpeg -i [filename_from_first_step].ts -i [captions].srt -c:v copy -bsf:a aac_adtstoasc -c:s mov_text [out_file_name].mp4

Это даст вам MP4 со встроенными субтитрами, а также отдельный файл srt, если ваш плеер не поддерживает встроенные субтитры.

1

Если скрытые титры означают поток CEA-608 или 708, то они странным образом упакованы, т.е. встроены в видеопоток, и ffmpeg не может их копировать или кодировать.

Вы можете попробовать использовать CCextractor для их извлечения. Если это не работает в потоке. Загрузите отдельные сегменты, объедините их и попробуйте с этим.

После извлечения вы можете кодировать их, используя -c:s mov_text в MP4.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .