我有一个视频文件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
在哪里
x
和 y
是提取帧的范围的开始和结束所以我只是使用,例如
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/