2

У меня есть несколько видео (.mp4), которые были отмечены метаданными (описания, художественные работы, актеры и т.д.), И теперь у меня есть файлы субтитров, которые я хочу добавить в виде потока.

Я могу использовать ffmpeg и установить как видео, так и файл .srt качестве входных данных и получить новый выходной файл, но выходные данные всегда, похоже, теряют все метаданные уровня контейнера, и иногда это раздражает, всегда возвращаясь и удаляя исходные файлы.

Есть ли способ добавить файл субтитров в виде нового потока в видеофайл, не создавая новый файл? Просто изменив оригинальный видео файл?

Такие программы, как Subler, похоже, делают это, но из интереса можно ли это сделать из командной строки?

1 ответ1

4

Вы не можете редактировать файл на месте с помощью ffmpeg - он всегда должен создавать новый выходной файл. Я думаю, что это значение по умолчанию практически для любой программы, и во многих случаях выходной файл должен быть доступен для поиска и редактирования программой во время записи.*

Если реальная проблема заключается в том, что вы теряете метаданные, попробуйте:

ffmpeg -i input.mp4 -i subtitles.srt \
-c copy -c:s mov_text \
-map 0 -map 1 -map_metadata 0 output.mp4

Вам нужно, чтобы ffmpeg конвертировал SRT (SubRip) в MP4-совместимые субтитры с -c:s mov_text , в противном случае ffmpeg отказывается копировать поток.**

Опция -map_metadata должна копировать все глобальные метаданные из входного файла MP4 в выходной файл, т. Е. Все, что вы устанавливаете на уровне контейнера. Метаданные уровня битового потока должны копироваться автоматически без каких-либо дополнительных опций.

* Конечно, такие программы, как sponge из moreutils, могут "впитывать" ввод и перезаписывать файл на месте, но это работает только с мультиплексорами, которые поддерживают вывод без поиска, и поэтому не с MP4.
** Есть проблемы с субтитрами в кодировке mov_text и проигрывателем QuickTime, см. Билет FFmpeg № 1845, а также № 2488.

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