Используйте 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, и нужно ли его включать или компилировать отдельно.
Ответы
Ответ 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