macos - 在 OSX 上优化使用 hevc_videotoolbox 和 ffmpeg
问题描述
我正在使用 ffmpeg 4.3.1 将视频从 h264 转换为 h265,最初我很高兴地发现我可以使用我的 Mac 的 GPU 来加速带有 hevc_videotoolbox 标志的转换。
我的 Mac 硬件是带有 AMD Radeon Pro 5300 的第 10 代 Intel i5
我正在使用这个命令:
ffmpeg -i input_h264.mp4 -c:v hevc_videotoolbox -b:v 6000K -c:a copy -crf 19 -preset veryslow output_h265.mp4
转换速度从 0.75 倍提高到 4 倍,几乎提高了 500%!
但后来我注意到大文件大小和稍微模糊的结果。然后我注意到更改 crf 或预设没有任何区别,ffmpeg 似乎忽略了这些设置。唯一可行的设置是视频比特率 (-b:v)。
所以我开始用谷歌搜索,看看我怎样才能得到更好的结果。
但除了这里和那里的一些帖子外,我大部分时间都是空白的。
我在哪里可以获得有关如何使用 hevc_videotoolbox 获得更好结果的文档?如何找出哪些设置有效,哪些设置被忽略?
解决方案
列表选项
运行ffmpeg -h encoder=hevc_videotoolbox
以列出特定于 hevc_videotoolbox 的选项。
用于-b:v
控制质量。-crf
仅适用于 libx264、libx265、libvpx 和 libvpx-vp9。它将被其他编码器忽略。它也会忽略-preset
.
hevc_videotoolbox 不如 libx265,但速度很快
与大多数硬件加速编码器一样,hevc_videotoolbox 的效率不如 libx265。因此,与 libx265 相比,您可能必须为其提供更高的比特率才能匹配同等质量。这可能会破坏从 H.264 重新编码到 HEVC/H.265 的目的。
如果可以,请避免重新编码
就个人而言,我会避免重新编码以防止生成丢失,除非原件的编码效率非常低并且驱动器空间更重要。
推荐阅读
- java - 为什么编码与 Maven 中的系统默认值不同以及如何更改此设置?
- c++ - C++ - 使用用户输入的字符串数据检查结构字符串数据(无限循环)
- snowflake-cloud-data-platform - 如何从 SnowFlake 中的 JSON 字符串中解析特定数据?
- javascript - 使用“newTrigger”触发类函数
- c++ - 每个条件唤醒多个线程工作一次
- laravel - 一起使用 Laravel Sanctum SPA auth 和 Auth UI
- c# - 两个控件相互更新时如何防止stackoverflow异常
- c# - void 方法的 C# 8 开关表达式
- python - 如何在python的for循环中增加一个变量
- python - 字符串分析:按单词百分比将字符串分成 n 部分