gpt4 book ai didi

python - 使用 python 将 opencv 图像传输到 ffmpeg

转载 作者:太空狗 更新时间:2023-10-30 00:44:07 25 4
gpt4 key购买 nike

如何将 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 个流。

最佳答案

我曾经遇到过类似的问题。 I opened an issue on Github ,事实证明它可能是平台问题。

关于您的问题,您也可以将 OpenCV 图像通过管道传输到 FFMPEG。这是示例代码:

# This script copies the video frame by frame
import cv2
import subprocess as sp

input_file = 'input_file_name.mp4'
output_file = 'output_file_name.mp4'

cap = cv2.VideoCapture(input_file)
ret, frame = cap.read()
height, width, ch = frame.shape

ffmpeg = 'FFMPEG'
dimension = '{}x{}'.format(width, height)
f_format = 'bgr24' # remember OpenCV uses bgr format
fps = str(cap.get(cv2.CAP_PROP_FPS))

command = [ffmpeg,
'-y',
'-f', 'rawvideo',
'-vcodec','rawvideo',
'-s', dimension,
'-pix_fmt', 'bgr24',
'-r', fps,
'-i', '-',
'-an',
'-vcodec', 'mpeg4',
'-b:v', '5000k',
output_file ]

proc = sp.Popen(command, stdin=sp.PIPE, stderr=sp.PIPE)

while True:
ret, frame = cap.read()
if not ret:
break
proc.stdin.write(frame.tostring())

cap.release()
proc.stdin.close()
proc.stderr.close()
proc.wait()

关于python - 使用 python 将 opencv 图像传输到 ffmpeg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34167691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com