Python CV2使用字幕提取视频帧

2024-04-27 18:39:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带字幕的视频文件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

它平均至少占用源视频长度的一半(在完成时间内)


Tags: image编码read视频count时间resultcv2
1条回答
网友
1楼 · 发布于 2024-04-27 18:39:56

基本上,我认为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脚本运行它

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

相关问题 更多 >