Добавьте поток, используя ffmpeg, не создавая новый файл

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

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

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

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

  • Удалить аудио из видеофайла с помощью FFmpeg
  • Как сравнить два аудиофайла без потерь?
  • Почему это не работает для цикла?
  • Видеорез с отсутствующими кадрами в FFmpeg
  • Создание стабильного видео с медленными изображениями с помощью FFmpeg
  • Преобразование MOV видеофайла, закодированного как `qtrle` в Windows с использованием FFMPEG
  • Ускорение видео в Linux
  • Как перевести опции HandbrakeCLI в опции FFmpeg?
  • One Solution collect form web for “Добавьте поток, используя ffmpeg, не создавая новый файл”

    Вы не можете редактировать файл с помощью 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 закодированными mov_text и проигрывателем QuickTime, см. Билет FFmpeg # 1845, а также # 2488 .

    Давайте будем гением компьютера.