2013-12-19 5 views
10

Я проверил документацию FFmpeg и на многих форумах и выяснили правильную командную строку, чтобы извлечь субтитры из .MP4 видео должно выглядеть так:Можно ли извлекать субтитры SubRip (SRT) из видео MP4 с помощью ffmpeg?

ffmpeg -i video.mp4 -vn -an -codec:s:0 srt out.srt 

Однако, я получаю следующее сообщение об ошибке, что придает мне на вопрос, является ли это осуществимо на всех:

ошибки при открытии кодера для выходного потока # 0: 0 - возможно, неправильные параметры, такие как bit_rate, скорость, ширина или высота

Используя ffmpeg -codecs, я могу подтвердить, что ffmpeg должен иметь возможность кодировать субтипы субтитров.

Использование ffmpeg -i video.mp4, я могу видеть, что есть два субтитров дорожки, встроенные в видео:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4': 
... 
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1/0x31637661), yuv420p, 720x572 [SAR 64:45 DAR 256:143], 1341 kb/s, 25 fps, 25 tbr, 90k tbn, 180k tbc 
Stream #0:1(eng): Audio: aac (mp4a/0x6134706D), 48000 Hz, stereo, fltp, 191 kb/s 
Stream #0:2(fra): Audio: aac (mp4a/0x6134706D), 48000 Hz, stereo, fltp, 191 kb/s 
Stream #0:3(eng): Subtitle: dvd_subtitle (mp4s/0x7334706D) 
Stream #0:4(und): Subtitle: mov_text (text/0x74786574) 

EDIT

Я проверил с упрощенной командной строки, показанной в комментариях, но я по-прежнему получают ту же ошибку. Ниже приведена команда a link to the detailed verbose output. Я также попытался полностью отключить метаданные и главы в результирующем результате, но это все еще вызывает ту же ошибку.

+3

Простой 'ffmpeg -i in.mp4 out.srt' работает для меня правильно. (ffmpeg 2.0.1) – pogorskiy

+0

Попробуйте 'ffmpeg ... -loglevel debug ...', чтобы узнать больше об ошибке – pogorskiy

+0

У меня есть оба предложения, но я не могу определить очевидную ошибку. Возможно, это вызвано тем, что ffmpeg пытается вывести маркеры разделов в полученный файл srt? У меня есть подробный вывод отладки. –

ответ

22

Я enventually понял, почему у меня не получилось:

Заданный командной строки было бы прекрасно, если субтитры из видео источника были закодированы в представлении на основе текста. Однако, как видно на выходе в командной строке ffmpeg -i, субтитры кодируются в формате «dvd_subtitle».

Формат dvd_subtitle хранит растровые изображения для каждого субтитров в видео. Следовательно, ffmpeg не сможет преобразовать битмапы в текст.

Для решения этой задачи необходимо обратиться к программному обеспечению на основе OCR, которое помогает пользователю идентифицировать каждый субтитр как текст из его растрового объявления.

(В исходном видео есть субтитры на основе текста, но я не знаю, откуда оно взялось и не видно большинству популярных игроков. По сути, этот подзаголовок «mov_text» кажется будь то заглушка, возможно, артефакт преобразования с оригинального DVD)

+0

Я думаю, что текстовый трек является маркером главы, но не уверен. – mcdado

4

Just FYI ((Не могу комментировать из-за репутации), но извлечение SRT из MP4 приведет к тому, что файл будет отформатирован как MOV_Text, а не регулярный СТО. Он по-прежнему будет добавлен и работать, но это, как изменение mp4 на m4v. Хотя он обычно работает, в коде все не работает. Mov_text ужасен для ручной настройки шрифта/размера и т. Д. Лучшая ставка - загрузить и протестировать SRT из Интернета!

Это будет работать, но приведет к mov_text кодированной SRT файл:

ffmpeg -i in.mp4 out.srt 
0

Try используя карту вариант ... если есть слишком много потоков во входных файлах ....

Синтаксис будет:

ffmpeg -i видео.mp4 -map 0: 4 out.srt

Поскольку существуют два потока субтитров в видео, первый на 0: 3, который является dvdsubtitle поэтому не могут быть преобразованы в SRT так мы преобразуем второй подзаголовок на 0: 4 потока который является mov_text и является мягкой копией субтитров, поэтому его можно легко преобразовать ....

Смежные вопросы