【bug】 jetson上opencv无法录制h264本地视频

在Jetson Orin NX上无法使用opencv直接录制h264/h265视频流(h264格式的视频流才能在浏览器播放)

解决:

软件编码:需要源码编译opencv

1.环境准备

bash 复制代码
pip uninstall opencv-python
sudo apt install build-essential cmake git python3-dev python3-numpy \
libavcodec-dev libavformat-dev libswscale-dev \
libgstreamer-plugins-base1.0-dev \
libgstreamer1.0-dev libgtk-3-dev \
libpng-dev libjpeg-dev libopenexr-dev libtiff-dev libwebp-dev \
libopencv-dev x264 libx264-dev libssl-dev ffmpeg

2.源码编译(大概需要1h)

bash 复制代码
python -m pip install --no-binary opencv-python opencv-python
python 复制代码
import cv2
cap = cv2.VideoCapture("/home/ssa/test_video/20250327_105503.mp4")
while True:
    ret, img= cap.read()
    if not ret:
        print("无法获取帧")
        break

    local_video_path = f"xxxxx.mp4"
    fourcc = cv2.VideoWriter_fourcc(*'avc1')
    out = cv2.VideoWriter(local_video_path, fourcc, self.fps, (img.shape[1], img.shape[0]))
    out.write(img)

avc1是唯一能够软件编码h264的opencv的编码器

硬件编码:需要硬件编码器

1.环境安装

bash 复制代码
sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt install -y libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base
sudo apt install -y gstreamer1.0-plugins-good gstreamer1.0-plugins-bad 
sudo apt install -y gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc
sudo apt install -y gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa
sudo apt install -y gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 
sudo apt install -y gstreamer1.0-pulseaudio
sudo apt install -y gtk-doc-tools
sudo apt install -y libeigen3-dev libfmt-dev v4l-utils

2.代码实现

python 复制代码
import cv2

# 视频源(摄像头或文件)
cap = cv2.VideoCapture(0)  # 0表示默认摄像头
# 或从RTSP流读取:
# cap = cv2.VideoCapture("rtsp://xxxxx")

# 获取视频参数
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

# 自定义视频文件名
video_filename = "output.mp4"  # 可修改为任意名称
# 也可以通过用户输入来动态设置文件名
# video_filename = input("请输入保存的视频文件名:") + ".mp4"

# GStreamer输出管道(使用NVENC H.264硬件编码)
output_pipeline = (
    f"appsrc ! video/x-raw, format=BGR ! "
    f"videoconvert ! video/x-raw, format=I420 ! "
    f"nvvidconv ! "
    f"nvv4l2h264enc insert-sps-pps=1 preset-level=1 bitrate=4000000 ! "
    f"h264parse ! "
    f"qtmux ! "
    f"filesink location={video_filename} sync=0"
)

# 初始化VideoWriter
out = cv2.VideoWriter(
    output_pipeline, 
    cv2.CAP_GSTREAMER, 
    0, 
    fps, 
    (width, height)
)

if not out.isOpened():
    print("Error: 无法打开输出流")
    exit()

print(f"视频将保存为: {video_filename}")

# 读取并写入视频帧
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    out.write(frame)
    cv2.imshow('Frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放资源
cap.release()
out.release()
cv2.destroyAllWindows()
print(f"视频已成功保存为: {video_filename}")    
相关推荐
VidDown3 小时前
文件没问题但网页播不了:播放器接入实战与那些“环境问题
python·网络协议·音视频·视频编解码·视频
the3clipse3 小时前
视频编码技术如何赋能游戏性能优化:从硬件隔离到AI驱动的带宽革命
游戏·性能优化·音视频·视频编码·硬件加速·ai编码·自适应编码
I Am a robert girl3 小时前
打破音频生态壁垒:用 WinAirCast 把 Windows 声音塞进 HomePod
windows·音视频·跨平台开发·音频串流·airplay 2·homepod
揽秀亭长3 小时前
视频转脚本有哪些技术路线?三种常见方案对比分析
人工智能·音视频
VidDown4 小时前
从一堆脚本到能维护的系统:视频处理管道的工程化
服务器·ffmpeg·音视频·视频编解码
轻口味4 小时前
HarmonyOS 7 新特性2:音频编创——轻音台里的降噪、环绕与格式转换
华为·音视频·harmonyos·鸿蒙·音频编创
欧特克_Glodon5 小时前
OpenCV计算机视觉开发入门与实践(基于C++):专栏内容介绍及目录
c++·人工智能·opencv·计算机视觉
技灵AI5 小时前
Seedance 长剧生产实战:用首尾帧接戏解决角色崩脸与场景漂移(含 return_last_frame 用法与提示词模板)
人工智能·prompt·aigc·音视频
sali-tec5 小时前
C# 基于OpenCv的视觉工作流-章110-YOLO 实例分割
图像处理·人工智能·opencv·算法·yolo·计算机视觉
爱写代码的小朋友7 小时前
Windows 下 MSYS2 + MinGW64 安装与使用 OpenCV 全指南(含踩坑记录)
c++·人工智能·windows·opencv