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