2

Я пытаюсь извлечь субтитры с диска Blu-ray, и это hdmv_pgs_subtitle . Так что я стараюсь

ffmpeg -i file.m2ts -map 0:3 -scodec copy rip3/test.sub 

и получить

Could not write header for output file #0 (incorrect codec parameters ?): 
Operation not permitted

Тогда я делаю

ffmpeg -i file.m2ts -map 0:3 -scodec copy rip3/test.sup 
ffmpeg -i file.m2ts -map 0:3 -scodec copy rip3/test.srt

и кучу других разных расширений, пока я не сделаю снимок .mkv , который работает.

Как я могу найти то, что расширения ffmpeg позволяет? Я не нашел ни одного места, которое называет .mkv расширением

ffmpeg -formats -formats упоминает matroska , но не говорит, что .mkv - это расширение. Так есть ли способ найти все поддерживаемые расширения файлов для ffmpeg?

РЕДАКТИРОВАТЬ: После прочтения ответа от slhck я нашел расширения, выполнив эту команду в исходной папке.

находить . -type f -имя "* .c" -exec egrep -H ".extensions" {} \;

Имя файла даст некоторую информацию о том, что это за формат.

1 ответ1

4

Во-первых, вы можете увидеть все форматы (контейнеры), вызвав ffmpeg -formats . То, что они не упоминают расширения, возможно, по той причине, что расширение само по себе часто бессмысленно, и вы можете переопределить формат вывода, используя опцию -f .

Вы можете увидеть, каковы общие расширения для определенного (де) мультиплексора. Например:

$ ffmpeg -v 1 -h demuxer=matroska
  Demuxer matroska,webm [Matroska / WebM]:
  Common extensions: mkv,mk3d,mka,mks

Выходные форматы и их расширения регистрируются в кодировщиках. Итак, вы найдете это для Matroska, когда посмотрите на исходный код ffmpeg:

AVOutputFormat ff_matroska_muxer = {
    .name              = "matroska",
    .long_name         = NULL_IF_CONFIG_SMALL("Matroska"),
    .mime_type         = "video/x-matroska",
    .extensions        = "mkv",
    ....

Входные форматы обычно анализируются не по их расширению, а по фактическим содержащимся данным.

Также см:


Проблема заключается в том, что только два из всех форматов ffmpeg могут поддерживать субтитры HDMV PGS:

  • MPEG-TS
  • MKV (Матроска)

Вы не можете использовать контейнер SRT, потому что это другая концепция. Субтитры SRT основаны на тексте, в то время как субтитры HDMV PGS являются фактическими растровыми изображениями.

Таким образом, это должно работать, если все, что вам нужно сделать, это сохранить где-нибудь субтитры:

ffmpeg -i input.mkv -c:s:0 copy -map 0:s:0 output.mks

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .