我尝试使用OpenCV、ffmpeg后端和Python3将我的网络摄像头编码为HEVC视频。与其他编解码器(如mjpg
)相比,它的效果很好。下面是我的示例脚本,它使用对应的fourcc(也尝试过hevc
、h265
、x265
等):
#!/bin/python3
import cv2
import time
import subprocess
def video(seconds, frameRate):
cap = cv2.VideoCapture(0)
if(not cap.isOpened()):
return "error"
# Define the codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*'HEVC')
name = "/tmp/" + time.strftime("%d-%m-%Y_%X")+".hevc"
out = cv2.VideoWriter(name, fourcc, frameRate, (640,480))
program_starts = time.time()
result = subprocess.Popen(["ffprobe", name], stdout = subprocess.PIPE, stderr = subprocess.STDOUT, shell=True)
nFrames=0
while(nFrames<seconds*frameRate):
ret, frame = cap.read()
if ret==True:
out.write(frame)
nFrames += 1
else:
break
cap.release()
return name
# Store a video to /tmp for 2 seconds
print(video(2,15))
返回错误:
OpenCV: FFMPEG: tag 0x43564548/'HEVC' is not found (format 'hevc / raw HEVC video')'
我的Ubuntu系统配置如下:
bash> cat /etc/issue
Ubuntu 16.04.6 LTS \n \l
bash> python3 -m pip list | grep opencv
opencv-contrib-python-nonfree 4.1.1.1
opencv-python-nonfree 4.1.1.1
bash> ffmpeg -encoders
ffmpeg version 2.8.15-0ubuntu0.16.04.1 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.10) 20160609
configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv
libavutil 54. 31.100 / 54. 31.100
libavcodec 56. 60.100 / 56. 60.100
libavformat 56. 40.101 / 56. 40.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 40.101 / 5. 40.101
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 2.101 / 1. 2.101
libpostproc 53. 3.100 / 53. 3.100
Encoders:
...
V..... libx265 libx265 H.265 / HEVC (codec hevc)
...