可以ffmpeg提取隐藏字幕数据

spi*_*non 11 ffmpeg

我目前正在使用ffmpeg将各种格式的视频转换为flv文件.还提出了一个请求,即从文件中获取隐藏字幕信息.有没有人有这方面的经验或知道它甚至可以做到.我没有看到任何选项,但我想我会问.

Col*_*ing 18

如果像我一样的任何人最终都在这个帖子上,这里有一些关于ffmpeg命令的详细解释对我有用.

ffmpeg -f lavfi -i movie=input.ts[out+subcc]  -map 0:1  output.srt
Run Code Online (Sandbox Code Playgroud)

似乎对源mpegts格式(文件扩展名.ts)的要求很高.否则,lavfi过滤器似乎不起作用.规范out+subcc强制ffmpeg将隐藏式字幕(嵌入到帧数据中)视为单独的流.后来-map 0:1ffmpeg地图只有流并放弃一切.结果保存到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
Run Code Online (Sandbox Code Playgroud)

Stream Subtitle: eia_608有"索引" 0:1,因此应该映射.

很少有离别的笔记,对论点的事项顺序ffmpeg,-f lavfi前必须去-i move=...,否则,规范将无法识别.此功能也是最新ffmpeg版本,因此请仔细检查您的版本并根据需要进行升级.


Ans*_*hul 9

隐藏式字幕有两种格式
1)ATSC美国标准(支持在ffmpeg中)
2)ISDB日本标准(支持在ffmpeg中没有)

你可以使用以下命令

ffmpeg -f lavfi -i "movie=test.ts[out0+subcc]" -map s output.srt
Run Code Online (Sandbox Code Playgroud)

这个东西最近开发了所以请查看你的ffmpeg版本.


bla*_*lah 1

如果标题作为单独的流包含在内,则提取它们(相对)简单:

ffmpeg -i input.mov -an -vn -c:s copy -f rawvideo -map 0:s sub.txt
Run Code Online (Sandbox Code Playgroud)

如果它“烙印”在视频文件上,那么您可能不走运,但我认为这对于字幕比隐藏字幕更常见。