Если кто-то, как и я, попадает в этот поток, вот более подробное объяснение команды 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
Stream Subtitle: eia_608
имеет «index» 0:1
, так что это то, что должно отображаться.1018 *
Немногие напутствия, порядок аргументов имеет значение для ffmpeg
, -f lavfi
должно идти до -i move=...
, иначе спецификация не будет распознана.Также эта функция появилась довольно недавно, поэтому дважды проверьте версию ffmpeg
и обновите ее при необходимости.