Может ли ffmpeg извлекать данные с закрытыми заголовками

В настоящее время я использую ffmpeg для конвертирования видео в различные форматы в FLV файлы. Также появился запрос, который также должен получить информацию о закрытии заголовка файла. Есть ли у кого-нибудь опыт в этом или знаете, что это может быть сделано. Я не вижу никаких вариантов для этого, но думал, что я попрошу и посмотрю.

Ответ 1

Если кто-то, как и я, попадает в эту ветку, вот немного более подробное объяснение в команде ffmpeg, которая работала для меня.

ffmpeg -f lavfi -i movie=input.ts[out+subcc]  -map 0:1  output.srt

Похоже, что исходный источник данных имеет формат mpegts (расширение файла .ts). В противном случае фильтр lavfi не работает. Спектр out+subcc заставляет ffmpeg обрабатывать закрытые титры (которые встроены в данные кадра) как отдельный поток. Позже -map 0:1 делает ffmpeg отображает только этот поток и отбрасывает все остальное. Результат сохраняется до output.srt. В зависимости от вашего ввода отображение может отличаться. Один простой способ определить замкнутое отображение подписи - запустить команду ffprobe, например

$ ffprobe -f lavfi -i movie=input.ts[out+subcc]
ffprobe version N-79653-g4efd3ec Copyright (c) 2007-2016 the FFmpeg developers
  libavutil      55. 22.101 / 55. 22.101
  libavcodec     57. 38.100 / 57. 38.100
  libavformat    57. 34.103 / 57. 34.103
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 44.100 /  6. 44.100
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
[h264 @ 0x7fe869826200] Increasing reorder buffer to 1
Input #0, lavfi, from 'movie=input.ts[out+subcc]':
  Duration: N/A, start: 1562.233011, bitrate: N/A
    Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 90k fps, 30 tbr, 90k tbn
    Stream #0:1: Subtitle: eia_608

Поток Subtitle: eia_608 имеет "индекс" 0:1, так что это то, что должно отображаться.

Немногие примечания к разметке, порядок аргументов имеет значение для ffmpeg, -f lavfi должен идти до -i move=..., иначе спецификация не будет распознана. Также эта функция довольно недавно, поэтому дважды проверьте версию ffmpeg и при необходимости обновите.

Ответ 2

Закрытая подпись - 2 формата
1) Американский стандарт ATSC (поддержка существует в ffmpeg)
2) Японский стандарт ISDB (поддержка пока не существует в ffmpeg)

вы можете использовать следующую команду

ffmpeg -f lavfi -i "movie=test.ts[out0+subcc]" -map s output.srt

Эта вещь была недавно разработана, поэтому ознакомьтесь со своей версией FFmpeg.

Ответ 3

Для получения только субтитров, а не мета-мусора, я обнаружил, что

ffmpeg -i input.mov -an -vn -bsf:s mov2textsub -scodec copy -f rawvideo sub.txt 

работает лучше всего для меня.

Ответ 4

Если заголовок включен как отдельный поток, то извлечение их (относительно) прямо:

ffmpeg -i input.mov -an -vn -c:s copy -f rawvideo -map 0:s sub.txt

Если он "сгорел" в видеофайле, то вам, вероятно, не повезло, но я был бы более распространен для субтитров, чем закрытые титры.

Ответ 5

Закрытые титры не являются отдельными потоками, и они не сжигаются на картинке, они чередуются в линиях сканирования. В картине - это странная американская идея, которая не используется в других местах. Хотя вы можете купить DVD, который имеет такой субтитры, обычно люди за пределами США не могут видеть субтитры и могут даже не знать, есть ли в файле.

CCExtractor может извлечь эту информацию из VOB, посмотрев метаданные TS: http://ccextractor.sourceforge.net/

Ответ 6

Это зависит от того, с каким входным файлом вы работаете. В моем случае у меня были файлы Final Cut Pro MOV Master с треком Siaarist (.scc) в стиле eia-608. Хотя ffmpeg может извлекать встроенные закрытые титры из файлов транспортного потока mpeg2, он не может обрабатывать данные eia-608 на отдельной дорожке.

ccextractor должен работать, но MOV вращается вокруг продуктов Apple и иногда переходит с полным пренебрежением к третьим сторонам... поэтому вы должны нормализовать файлы MOV, прежде чем иметь с ними дело... простой ffmpeg -i my.mov -c copy -map 0 out.mov должна сделать ffmpeg -i my.mov -c copy -map 0 out.mov дело. Тогда CCExtractor, встроенный в сборку MP4Box, сможет передать ему eia-дорожку и декодировать его во что-то пригодное для использования... как vtt.

Источник: https://trac.ffmpeg.org/ticket/7694

Ответ 7

Ответ ColdLearning работает с файлами mp4 с помощью ffmpeg 4.1.4, но генерирует множество мета-тегов как часть субтитров.

Heshy не работает с файлами mp4, поскольку он не может найти потоки субтитров.

Эти файлы mp4 не отображают субтитры на VLC, и ffmpeg и mp4box не отображают субтитры как потоки, но Handbrake обнаруживает дорожку субтитров как скрытые титры (CC608).

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