基于Go的FFmpeg视频编码优化求助:快速低损低存储占用
视频编码优化方案(适配你的Ryzen7 5000+RTX3050 Ti硬件)
一、优先推荐:NVENC H.265(兼顾速度、体积、画质)
你的RTX3050 Ti支持NVENC H.265硬件编码,之前的问题是参数配置错误,调整后可实现快速编码+低存储占用+无可见画质损失。
静态参数取值
- 编解码器:
h265_nvenc - CRF:
28(肉眼几乎无画质损失,同画质下比libx264体积小30%-50%) - Preset:
p7(NVENC最快预设,编码速度接近实时) - 分辨率:保持原分辨率(需缩放时用
scale=-2:1080,自动适配宽高比避免拉伸) - 音频:统一用
aac编码,码率128k(平衡音质和体积)
优化后的Go代码
func encodeVideo(fileName string) *exec.Cmd { return exec.Command("C:\\ffmpeg-6.1-full_build\\bin\\ffmpeg", "-i", "./userUploadDatas/videos/"+fileName, "-c:v", "h265_nvenc", "-crf", "28", "-preset", "p7", // 不需要缩放可删除此行 "-vf", "scale=-2:1080", "-c:a", "aac", "-b:a", "128k", "./userUploadDatas/videos/"+fileName+"_encoded.mp4") }
二、备用方案:libx264 速度优化版
若必须使用CPU编码,调整参数平衡速度与压缩率:
- CRF:
23(libx264默认无损级画质) - Preset:
fast(比默认medium快30%,画质损失可忽略) - 附加参数:
-profile:v high -level 4.2(启用高级编码特性,提升压缩效率)
优化后的libx264代码
func encodeVideo(fileName string) *exec.Cmd { return exec.Command("C:\\ffmpeg-6.1-full_build\\bin\\ffmpeg", "-i", "./userUploadDatas/videos/"+fileName, "-c:v", "libx264", "-crf", "23", "-preset", "fast", "-profile:v", "high", "-level", "4.2", "-vf", "scale=-2:1080", "-c:a", "aac", "-b:a", "128k", "./userUploadDatas/videos/"+fileName+"_encoded.mp4") }
三、避坑要点
- 不要同时指定
-b:v和-crf:两者冲突,CRF是画质优先的动态码率,更适配你的需求 - NVENC之前体积翻倍是因为默认码率过高,改用CRF即可解决
- 暂时放弃AV1/VP9:你的硬件不支持AV1硬件编码,CPU编码速度极慢,性价比极低
- H.264(无论CPU还是NVENC)压缩率远不如H.265,非特殊需求不推荐
内容的提问来源于stack exchange,提问作者Diwash Mainali
相关产品推荐
相关产品推荐

