我写了一个go代码,但是速度很慢,视频压缩率也不是那么令人印象深刻。我是 FFMPEG 的新手,我的整个项目都依赖于 FFMPEG。我尝试过不同的视频编解码器,例如 vp9、h264、h265、NVENC、AV1 等。所有这些都太慢了(也许我还不够好来优化它)。我的项目基于 Go,当前使用的编解码器是 libx264。谁能帮我优化项目的视频编码部分。
func encodeVideo(fileName, bitrate, crf, preset, resolution string) *exec.Cmd {
return exec.Command("C:\\ffmpeg-6.1-full_build\\bin\\ffmpeg",
"-i", "./userUploadDatas/videos/"+fileName,
"-c:v", "libx264",
"-b:v", bitrate,
"-crf", crf,
"-preset", preset,
"-vf", "scale="+resolution,
"./userUploadDatas/videos/"+fileName+"_encoded"+".mp4")
}
请提供每个参数的静态值。任何编解码器都可以为我工作,只要它速度快、占用空间少且不丢失空间。
我在使用不同编解码器时遇到的问题是:
我使用的硬件规格是Ryzen7 5000系列CPU,NVIDIA RTX 3050 Ti笔记本电脑GPU。
视频在保持质量的同时可以压缩多少,很大程度上取决于目标视频的压缩、编解码器、像素格式等。您可以根据视频质量指标测量比特率,以确定转码后的视频是否满足您的期望。
作为示例,您可以在 中看到关系的展示:使用 av1_nvenc 将 H.264、YUV420、8 位视频转码为 AV1 的比特率与质量。使用的脚本是:
for cq in {0..50}; do ffmpeg -y -hwaccel cuda -hwaccel_output_format cuda -i xyz.mkv -c:a copy -c:v av1_nvenc -preset p7 -tune hq -cq:v $cq -rc-lookahead 53 xyz.cq${cq}.mp4; done
-cq
,我个人对此脚本的偏好是30),否则结果是不可预测的-qmin
和 -qmax
设置为与 -cq
相同的值,但文件可能会变大,但对质量几乎没有好处