2010-07-03 128 views
7

我目前使用ffmpeg将各种格式的视频转换为flv文件。一个请求也出现了,那就是将文件中的隐藏字幕信息也发送出去。有没有人有任何这方面的经验,或知道它甚至可以做到。我没有看到任何选择,但我想我会问。ffmpeg可以提取隐藏字幕数据

回答

1

如果标题是作为一个单独的数据流,然后提取它们的(相对)直截了当:

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

如果它“烧”上的视频文件,那么你很可能出于运气,但我认为字幕比字幕更常见。

2

为了得到公正的字幕,而不是任何元的垃圾,我发现

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

最适合我。

+0

谢谢Heshy。我会看到关于尝试一下。这个项目现在已经开始了,但是当它回来的时候我会记下这个。 – spinon 2012-08-08 23:13:45

1

隐藏式字幕不是单独的流,也不会被刻录到图片中,它们在图片中的扫描线中交错显示 - 这是一种奇怪的美国思想,在其他地方并未真正使用。虽然你可以购买带有这种字幕的DVD,但通常美国以外的人不能看到字幕,甚至可能不知道文件中有一些字幕。

CCExtractor可以通过查看TS元数据提取VOB的这样的信息:http://ccextractor.sourceforge.net/

+0

似乎对于ATSC流标题是“包含但分开”,不是图像,所以可以提取,见Anshul的答案。现在,如果ffmpeg可以“适当地覆盖它们”并将它们烧入,不确定,但至少可以提取... – rogerdpack 2016-01-13 18:48:36

6

闭路字幕是2格式
1)ATSC美国标准(的支持是有在的ffmpeg)
2)ISDB日本标准(支持尚未有在的ffmpeg)

你可以使用下面的命令

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

这件事最近已经开发出来,所以请查看你的 ffmpeg版本。

+0

感谢您开发此修补程序! – tmm1 2015-12-09 05:21:22

10

如果像我这样的人结束了这个线程,这里有一个关于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版本,并在需要时进行升级。