【发布时间】:2016-03-14 01:40:32
【问题描述】:
如何将 openCV 图像通过管道传输到 ffmpeg(将 ffmpeg 作为子进程运行)? (我正在使用 spyder/anaconda)
我正在从视频文件中读取帧并对每一帧进行一些处理。
import cv2
cap = cv2.VideoCapture(self.avi_path)
img = cap.read()
gray = cv2.cvtColor(img[1], cv2.COLOR_BGR2GRAY)
bgDiv=gray/vidMed #background division
然后,为了将处理后的帧传输到 ffmpeg,我在一个相关问题中找到了这个命令:
sys.stdout.write( bgDiv.tostring() )
接下来,我尝试将 ffmpeg 作为子进程运行:
cmd='ffmpeg.exe -f rawvideo -pix_fmt gray -s 2048x2048 -r 30 -i - -an -f avi -r 30 foo.avi'
sp.call(cmd,shell=True)
(这也来自提到的帖子) 但是,这会使我的 IPython 控制台充满神秘的象形文字,然后使其崩溃。有什么建议吗?
最后,我想输出 4 个流并让 ffmpeg 并行编码这 4 个流。
【问题讨论】:
-
您是否有理由不想使用 OpenCV VideoWriter 界面来写出您的视频?我不认为你可以一次输出 4 个流。
-
我希望这样可以更快地保存视频。我注意到我上面使用 VideoWriter 的 openCV 读写示例所花费的时间大约是相同输入视频的纯 ffmpeg 编码的两倍(当然,ffmpeg 编码不包括背景分割 - 这就是我尝试使用 openCV 的原因第一名)。我希望使用命名管道...
标签: python opencv video ffmpeg