Подтвердить что ты не робот

Используйте ffmpeg для добавления текстовых субтитров

Я пытаюсь добавить текстовые субтитры в контейнер .mp4, используя ffmpeg:

ffmpeg -i input.mp4 -i input.srt -map 0.0 -map 0.1 -map 1.0 output.mp4

Когда я пытаюсь запустить эту строку, это дает мне ошибку:

Nmber карт потоков должен соответствовать количеству выходных потоков.

Если я попытаюсь изменить mp4 на mkv (хотя mp4 поддерживает текстовые субтитры), например:

ffmpeg -i input.mp4 -i input.srt -map 0.0 -map 0.1 -map 1.0 output.mkv

Он правильно отображает потоки, но дает ошибку:

Кодер (код 94210 кодека) не найден для выходного потока # 0.2

Когда я запускаю

ffmpeg -codecs

Я вижу, что кодек srt поддерживается как декодер и кодировщик, однако я не уверен, что используется для кодирования mp4 и mkv, и нужно ли его включать или компилировать отдельно.

4b9b3361

Ответ 1

ffmpeg -i infile.mp4 -i infile.srt -c copy -c:s mov_text outfile.mp4

-vf subtitles=infile.srt не будет работать с -c copy


Порядок -c copy -c:s mov_text важен. Вы сообщаете FFmpeg:

  • Видео: копировать, аудио: копировать, субтитры: копировать
  • Субтитры: mov_text

Если вы отмените их, вы сообщите FFmpeg:

  • Субтитры: mov_text
  • Видео: копировать, аудио: копировать, субтитры: копировать

В качестве альтернативы вы можете просто использовать -c:v copy -c:a copy -c:s mov_text в любом порядок.

Ответ 2

Используйте библиотеку libass (убедитесь, что в вашей установке ffmpeg есть библиотека в конфигурации --enable-libass).

Сначала преобразуйте субтитры в формат .ass:

ffmpeg -i subtitles.srt subtitles.ass

Затем добавьте их, используя видеофильтр:

ffmpeg -i mymovie.mp4 -vf ass=subtitles.ass mysubtitledmovie.mp4

Ответ 3

Вы пытаетесь использовать субтитры mux в качестве потока субтитров. Это простой, но различный синтаксис используется для MP4 (или M4V) и MKV. В обоих случаях вы должны указать видео и аудио кодек или просто скопировать поток, если хотите просто добавить субтитры.

MP4:

ffmpeg -i input.mp4 -f srt -i input.srt \
-map 0:0 -map 0:1 -map 1:0 -c:v copy -c:a copy \
-c:s mov_text output.mp4

MKV:

ffmpeg -i input.mp4 -f srt -i input.srt \
-map 0:0 -map 0:1 -map 1:0 -c:v copy -c:a copy \
-c:s srt  output.mkv

Ответ 4

Контейнер MKV поддерживает видео и аудио кодеки Практически все, а также поддерживает субтитры и меню DVD. Таким образом, вы можете просто скопировать кодеки из входного видео в выходное видео с контейнером MKV с субтитрами. Сначала вы должны конвертировать SRT в формат субтитров ASS

ffmpeg -i input.srt input.ass

и вставлять ASS субтитры к видео

ffmpeg -i input.mp4 -i input.ass -c:v copy -c:a copy -c:s copy -map 0:0 -map 0:1 -map 1:0 -y out.mkv

Также работал с файлом VMW.

ffmpeg -i input.wmv -i input.ass -c:v copy -c:a copy -c:s copy -map 0:0 -map 0:1 -map 1:0 -y out.mkv

см. вики-страницу Сравнение форматов контейнеров

Ответ 5

ffmpeg поддерживает кодировщик субтитров mov_text, который является единственным, поддерживаемым в контейнере MP4, и воспроизводится iTunes, Quicktime, iOS и т.д.

Ваша строка будет читать:

ffmpeg -i input.mp4 -i input.srt -map 0:0 -map 0:1 -map 1:0 -c:s mov_text output.mp4

Ответ 6

Я попытался использовать MP4Box для этой задачи, но не смог обработать M4V, с которым я имел дело. Я успел внедрить SRT как мягкие субтитры с ffmpeg со следующей командной строкой:

ffmpeg -i input.m4v -i input.srt -vcodec copy -acodec copy -scodec copy -map 0:0 -map 0:1 -map 1:0 -y output.mkv

Как и я, мне пришлось использовать выходной файл MKV - мне не удалось создать файл M4V.

Ответ 7

Я предоставлю простой и общий ответ, который работает с любым количеством аудио и srt субтитров и учитывает метаданные, которые могут включать контейнер mkv. Таким образом, он даже добавит изображения, которые matroska может включать в качестве вложений (но не других типов AFAIK), и преобразует их в дорожки; Вы не сможете смотреть, но они будут там (вы можете демультиплексировать их). Ах, и если у mkv есть главы, то и mp4 тоже.

ffmpeg -i <mkv-input> -c copy -map 0 -c:s mov_text <mp4-output>

Как вы можете видеть, это все о -map 0, который говорит FFmpeg добавить все дорожки, включая метаданные, главы, вложения и т.д. Если существует нераспознанная "дорожка" (mkv позволяет прикрепить файл любого типа).), это закончится с ошибкой.

Вы можете создать простой пакет mkv2mp4.bat, если вы обычно делаете это, чтобы создать mp4 с тем же именем, что и mkv. Было бы лучше с контролем ошибок, другим именем выхода и т.д., Но вы поняли.

@ffmpeg -i %1 -c copy -map 0 -c:s mov_text "%~n1.mp4"

Теперь вы можете просто запустить

mkv2mp4 "Video with subtitles etc.mkv"

И это создаст "Видео с субтитрами и т.д. Mmp4" с максимальным количеством информации.

Ответ 8

Простой пример:

videoSource=test.mp4
videoEncoded=test2.mp4
videoSubtitle=test.srt
videoFontSize=24
ffmpeg -i "$videoSource" -vf subtitles="$videoSubtitle":force_style='Fontsize="$videoFontSize"' "$videoEncoded"

Замените только переменные linux

Ответ 9

Вот почему mkv - такой хороший контейнер, особенно сейчас, когда он созрел:

mkvmerge -o output.mkv video.mp4 subtitle.srt