我有一个带有字幕的视频文件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在单独的轨道上提取带有subs的帧?
仅供参考:我使用这个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平均至少需要源视频长度的一半(完成时间)
发布于 2020-05-14 14:56:13
从本质上讲,我认为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脚本运行它
不是很好的方法,但这是我到目前为止发现的唯一一种
https://stackoverflow.com/questions/61776043
复制相似问题