You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OpenCV H265编码视频体积过大及codec ID正确性咨询

一、HEVC codec ID是否正确

你代码中使用的hev1和hvc1都是HEVC(H.265)的标准合法FourCC编码标识,写法没有问题:

  • hev1是通用H.265封装格式
  • hvc1是将编码参数集内嵌到样本描述中的格式,设备兼容性更好,苹果系列设备优先使用该标识

二、H.265输出文件远大于预期的原因

你遇到的体积异常问题和编码标识无关,是OpenCV VideoWriter的默认编码配置导致的:

  • OpenCV的VideoWriter初始化时如果不指定任何编码参数,默认会使用近乎无损的极高码率运行H.265编码,甚至在系统缺少x265编码器时会 fallback 到无压缩的原始帧存储。你输出的65MB刚好对应100帧常规分辨率的原始未压缩视频体积,说明编码过程完全没有启用压缩优化。
  • 此前你用H.264得到2.5MB的结果,大概率是当时的编码器默认带了压缩配置,或者你手动指定了码率/质量参数。

修复方案

代码修改

在初始化VideoWriter时添加码率、质量参数即可,示例修改如下:

import cv2
import os
import re
image_folder = 'backend/data'

video_name = 'backend/h265/output.mp4'

images = [img for img in os.listdir(image_folder) if img.endswith(".jpg")]
def natural_sort_key(s, _nsre=re.compile('([0-9]+)')):
    return [
        int(text)
        if text.isdigit() else text.lower()
        for text in _nsre.split(s)]

sorted_images = sorted(images, key=natural_sort_key)
frame = cv2.imread(os.path.join(image_folder, sorted_images[0]))
height, width, layers = frame.shape
# 优先用兼容性更好的hvc1标识
fourcc = cv2.VideoWriter_fourcc(*'hvc1')
# 指定码率,单位bps,5Mbps对应5*1024*1024,可根据实际体积需求调整
bitrate = 5 * 1024 * 1024
video = cv2.VideoWriter(video_name, fourcc, 27, (width,height), isColor=True)
# 设置质量参数,数值越小质量越高、体积越大,23是x265默认中等质量
video.set(cv2.VIDEOWRITER_PROP_QUALITY, 23)
for image in sorted_images:
    video.write(cv2.imread(os.path.join(image_folder, image)))
cv2.destroyAllWindows()
video.release()

额外注意事项

如果修改参数后体积仍然异常,可先运行print(cv2.getBuildInformation())查看FFmpeg模块是否已经开启x265支持,若未开启需要重新编译安装带x265编码器的OpenCV版本。
如果不需要通过代码编码,直接使用FFmpeg命令行处理会更稳定:
ffmpeg -framerate 27 -i %d.jpg -c:v libx265 -crf 23 output.mp4
其中CRF参数控制质量,范围0-51,数值越小质量越高体积越大,23为默认值,调整到28可在几乎无肉眼画质损失的前提下降低30%左右的体积。


内容的提问来源于stack exchange,提问作者seshasai voggu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 14:24:03