![使用 ffmpeg 将基于文本的字幕转换为单独的位图](https://linux22.com/image/1535609/%E4%BD%BF%E7%94%A8%20ffmpeg%20%E5%B0%86%E5%9F%BA%E4%BA%8E%E6%96%87%E6%9C%AC%E7%9A%84%E5%AD%97%E5%B9%95%E8%BD%AC%E6%8D%A2%E4%B8%BA%E5%8D%95%E7%8B%AC%E7%9A%84%E4%BD%8D%E5%9B%BE.png)
我们有一个基于文本的字幕流,我们需要将该字幕流中每个不同的字幕转换为单独的.bmp
文件,每像素 24 位。
我们怎样使用 ffmpeg 来实现这一点?
答案1
有点奇怪,但这是我能想到的最好的办法,同时考虑到这个相当模糊的任务,不清楚输出帧大小应该是多少,或者应该如何保证时间。
ffmpeg -f lavfi -i "color=color=black:d=10:s=1280x720:r=24" \
-filter:v "subtitles=sample.srt,mpdecimate,setpts=N/FRAME_RATE/TB" \
images/out-%04d.bmp
它的作用如下:
- 创建黑色背景颜色,尺寸为 1280×720px,持续时间为 10 秒,每秒 24 帧。显然,您可以更改像素大小,并且必须根据字幕流的总持续时间更改持续时间。可以降低帧速率,但这会影响渲染输出的精度。
- 使用
subtitles
过滤器(参见定义字幕样式的选项)。 - 使用以下方法丢弃重复的帧
mpdecimate
,并重置时间基准。如果您不想只输出不同的图像,则可以省略此项。 - 将剩余的每个帧按顺序输出为 BMP 图像。
现在,如果有部分没有字幕,这将输出一个空的黑框 - 这些必须稍后被删除,例如基于文件校验和。