如何使用 openCV 将视频导出为 .mp4?
How to export video as .mp4 using openCV?
我正在尝试使用 openCV 将视频导出为 .mp4。我尝试了几种编解码器,但目前我没有成功。
这是一个从帧构建视频的函数:
def create_movie(self, out_directory, fps, total_frames):
img1 = cv2.imread("temp/scr0.png")
height, width, layers = img1.shape
codec = cv2.cv.CV_FOURCC('X','V','I','D')
video = cv2.VideoWriter(out_directory, codec, fps, (width, height))
for i in range(total_frames):
img_name = "temp/scr" + str(i) + ".png"
img = cv2.imread(img_name)
video.write(img)
video.release()
cv2.destroyAllWindows()
我通常会收到下一条错误消息,使用不同的编解码器:
Tag XVID/0x44495658 incompatible with output codec id '13'
是否可以这样做以及如何做到?
有一个非直接的解决方案。您导出为 .avi,然后使用 python 调用终端命令的调用转换为 .mp4。
from subprocess import call
dir = out_directory.strip(".avi")
command = "avconv -i %s.avi -c:v libx264 -c:a copy %s.mp4" % (dir, dir)
call(command.split())
回答这个问题可能有点晚,但如果你想用 OpenCV 编写 .MP4 文件,试试这个:
import cv2
#your previous code here
fourcc = cv2.VideoWriter_fourcc(*'a[=10=][=10=][=10=]')
out = cv2.VideoWriter('out.mp4', fourcc, fps, res)
#the character '[=10=]' is the Null-Terminator or simply 0x00 in the ASCII-Table
#tag: *'a[=10=][=10=][=10=]' corresponds to 0x00000061
#your following code here
我正在尝试使用 openCV 将视频导出为 .mp4。我尝试了几种编解码器,但目前我没有成功。
这是一个从帧构建视频的函数:
def create_movie(self, out_directory, fps, total_frames):
img1 = cv2.imread("temp/scr0.png")
height, width, layers = img1.shape
codec = cv2.cv.CV_FOURCC('X','V','I','D')
video = cv2.VideoWriter(out_directory, codec, fps, (width, height))
for i in range(total_frames):
img_name = "temp/scr" + str(i) + ".png"
img = cv2.imread(img_name)
video.write(img)
video.release()
cv2.destroyAllWindows()
我通常会收到下一条错误消息,使用不同的编解码器:
Tag XVID/0x44495658 incompatible with output codec id '13'
是否可以这样做以及如何做到?
有一个非直接的解决方案。您导出为 .avi,然后使用 python 调用终端命令的调用转换为 .mp4。
from subprocess import call
dir = out_directory.strip(".avi")
command = "avconv -i %s.avi -c:v libx264 -c:a copy %s.mp4" % (dir, dir)
call(command.split())
回答这个问题可能有点晚,但如果你想用 OpenCV 编写 .MP4 文件,试试这个:
import cv2
#your previous code here
fourcc = cv2.VideoWriter_fourcc(*'a[=10=][=10=][=10=]')
out = cv2.VideoWriter('out.mp4', fourcc, fps, res)
#the character '[=10=]' is the Null-Terminator or simply 0x00 in the ASCII-Table
#tag: *'a[=10=][=10=][=10=]' corresponds to 0x00000061
#your following code here