首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python CV2提取带有字幕的视频帧

Python CV2提取带有字幕的视频帧
EN

Stack Overflow用户
提问于 2020-05-13 21:33:24
回答 1查看 1.3K关注 0票数 0

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

目前,我使用以下代码来提取:

代码语言:javascript
复制
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在单独的轨道上提取带有subs的帧?

仅供参考:我使用这个FFMPEG命令来合并.mp4.srt

代码语言:javascript
复制
ffmpeg -i ourvid.mp4 -i ourvid.srt -c:s mov_text -c:v copy -c:a copy result.mp4 -f srt

它在一秒左右就完成了

但是,如果我对其进行硬编码:

代码语言:javascript
复制
ffmpeg -i ourvid.mp4 -vf "subtitles=ourvid.srt" result.mp4

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-14 14:56:13

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

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

其中xy是提取帧的范围的开始和结束,因此我只使用,例如

代码语言:javascript
复制
os.system("ffmpeg -i ourvid.mp4 -vf select='between(n\,3901\,3901)',subtitles=ourvid.srt -q:v 2 frames%d.jpg")

从我的python脚本运行它

不是很好的方法,但这是我到目前为止发现的唯一一种

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61776043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档