Как извлечь субтитры из видео с помощью ffmpeg?

34

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

FFMPEG -i mytestmovie.mkv -vn -an -codec:s:0.1 srt sub.srt

Но я получил ошибку как нераспознанная опция. codec:s:0:1 Итак, вы можете сказать мне точную команду и как извлечь субтитры в виде .srtфайла в видео?

Виджей
источник
umair: ты мне скажешь в командной строке
Виджай
У меня та же проблема. Вы получили это, чтобы в конечном итоге работать?
Максим Лабель

Ответы:

51

Просто:

ffmpeg -i Movie.mkv -map 0:s:0 subs.srt
  • -i : URL / путь к входному файлу.
  • -map : назначить один или несколько входных потоков в качестве источника для выходного файла.
  • s: 0 : выберите поток субтитров.
jm3
источник
2
Это работало для меня с файлом MP4 со встроенными субтитрами.
Рубенс Мариуццо
11
Это позволит загрузить первый трек субтитров. Если их несколько, используйте 0:s:1для загрузки второго, 0:s:2для загрузки третьего и так далее.
Fabien Snauwaert
5
@ jm3 Может быть, вы знаете какой-нибудь способ автоматического извлечения всех потоков субтитров из файла с именами после идентификатора языка (например, eng, fre, dut и т. д.)?
о.
почему это так медленно при извлечении из большого контейнера MKV (~ 4 ГБ)?
user25
Чтобы извлечь больше субтитров одновременно, вы должны продублировать -mapпараметры для каждого файла. Кроме того, включать , -c copyтак что он просто извлекает файл , не пытаясь обработать его: ffmpeg -i Movie.mkv -c copy -map 0:s:0 subs.01.srt -c copy -map 0:s:1 subs.02.srt. В любом случае это займет много времени, потому что ffmpeg должен прочитать весь видеофайл, чтобы найти все части потоков субтитров.
Радек Печ
8

-codec:s:0:1это неверно. Если вы используете, -codec:s:0то ffmpeg будет использовать указанный кодек для первого потока субтитров, передаваемого на выход, если вы его используете, -codec:s:1он будет использовать его для второго потока субтитров и т. Д.

Вы также можете использовать, -codec:sчтобы выбрать все выходные потоки субтитров или -codec:2выбрать третий выходной поток, независимо от того, что это.

Вы, вероятно, запутались, потому что -mapопция ведет себя по-другому - там вы должны выбрать, с какого входа поступает выбранный поток. (таким образом, -map 0:s:0будет взят первый поток субтитров с первого входа и передан на выход). Тем не менее, -mapэто для выбора, какие потоки вы хотите взять от входов; тогда как большинство других опций, использующих отображение потоков, предназначены для использования в потоках после того, как они были выбраны (поэтому нет необходимости указывать, из какого они входного файла), так как они передаются в выходной файл.

evilsoup
источник
evilsoup: я бы использовал следующую команду E: \ FFMpeg_Latest> ffmpeg -i E: \ Routine \ рутина.mkv -vn -an -map 0: s: 0 srt E: \ Routine \ sub.srt, похоже, ошибка i Не удалось найти подходящий выходной формат для 'srt', можете ли вы сказать мне команду для извлечения субтитров в видео ...
vijay
2
Попробуйте: ffmpeg -i E:\Routine\routine.mkv -map 0:s:0 E:\Routine\sub.srt(ffmpeg должен обнаружить, что вы хотите srt субтитры из имени выходного файла)
evilsoup
Я использовал: ffmpeg -i film.mp4 -vn -an -codec:s srt film.srtэто должно скопировать все субтитры в файл srt.
Стюарт
@Stuart не извлекает все субтитры
user25
1
@evilsoup -codec:sравно, -codec:s:0поэтому он не выделяет все субтитры ... он извлечет первую текстовую дорожку
user25