Python CV2 提取带字幕的视频帧

标签 python opencv ffmpeg python-3.7 cv2

我有一个视频文件result.mp4带字幕。我想提取帧,但我希望字幕也出现在这些帧上,字幕作为单独的轨道在文件中。

目前我使用这段代码来提取:

vidcap = cv2.VideoCapture("result.mp4")
success,image = vidcap.read()
count = 0
while success:
  cv2.imwrite("frame%d.jpg" % count, image)     
  success,image = vidcap.read()
  print('Read a new frame: ', success)
  count += 1

效果很好,但正如我所说,框架上不包含字幕。只有当我将字幕硬编码到看起来不同且需要大量时间的视频中时,我才能提取带有字幕的帧。

有没有办法让opencv提取带有单独轨道上的子帧的帧?

供引用:
我使用这个 FFMPEG 命令来合并 .mp4.srt :
ffmpeg -i ourvid.mp4 -i ourvid.srt -c:s mov_text -c:v copy -c:a copy result.mp4 -f srt

大约在一秒钟内完成

但是,如果我对其进行硬编码:
ffmpeg -i ourvid.mp4 -vf "subtitles=ourvid.srt" result.mp4

平均至少需要源视频长度的一半(完成时间)

最佳答案

本质上,我认为 cv2 无法做到这一点,但 ffmpeg 可以做到这一点,使用如下命令:

ffmpeg -i ourvid.mp4 -vf select='between(n\,x\,y)',subtitles=ourvid.srt -q:v 2 frames%d.jpg

在哪里 xy是提取帧的范围的开始和结束
所以我只是使用,例如
os.system("ffmpeg -i ourvid.mp4 -vf select='between(n\,3901\,3901)',subtitles=ourvid.srt -q:v 2 frames%d.jpg")

从我的 python 脚本运行它

不是好方法,但这是迄今为止我发现的唯一一个

关于Python CV2 提取带字幕的视频帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61776043/

相关文章:

python - 在 Python 中将颜色映射到颜色条中

python - 添加比较日期的新列

c - 使用 C 或 Opencv 获取文件路径

audio - 如何通过设置 20 位深度生成 pcm 音频文件?

python - 如何使用Python找到两个具有相同名称的文件并检查它们是否相等?

python - Gensim:ValueError:无法创建意图(缓存|隐藏)|可选数组 - 必须定义尺寸但得到(0,)

c++ - Opencv 2.4.2代码详解-人脸识别

python - 使用 OpenCV 3 和 python 3 按区域对图像轮廓进行排序的最佳解决方案

ffmpeg - 使用 FFmpeg 堆叠 gif 而不会降低质量

audio - 如何使用 ffmpeg 将 .raw 音频输入转换为 .m4a?