将 H.264 10 位重新编码为 High Profile 或 HEVC 10 位的最有效方法

将 H.264 10 位重新编码为 High Profile 或 HEVC 10 位的最有效方法

由于一个奇怪的原因,我的 OLED 电视可以播放 HEVC 10 位文件,但只能播放非 10 位 H.264。

ffmpeg 的这个输出(视频流)可以用 HEVC 10-Bit 完美播放:

Stream #0:0: Video: hevc (Main 10), yuv420p10le(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 23.98 tbc (default)

但此文件无法播放:

Stream #0:0: Video: h264 (High 10), yuv420p10le(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)

这种编码似乎是在我的电视上能起作用的最大值:

Stream #0:0(jpn): Video: h264 (High), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)

我使用以下命令转换为 HEVC:

ffmpeg -i in.mkv -map 0:0 -map 0:2 -map 0:4 -vcodec hevc -preset ultrafast -x265-params lossless=1 -acodec copy -scodec copy out.mkv

这当然需要一段时间,并且需要无损开关,否则视频会变得非常像素化。我试着看了一下,hevc_nvenc但它说“没有兼容设备”(可能需要提供更多信息,我有一台 NVIDIA GeForce 980 TI)。

还尝试使用-vcodec h264-preset high收到错误消息:

打开输出流 #0:0 的编码器时出错 - 可能是 bit_rate、rate、width 或 height 等参数不正确

有没有编码专家能够帮助更快地转换为 HEVC 或转换为较低的 H.264 预设,或者帮助让 NVENC 工作(如果它能显著提高性能)……?

答案1

电视有时对于特定编解码器所支持的配置文件和级别非常挑剔。

无论如何,从 H.264 转换为 H.265 时,您不必诉诸无损编码来保持质量。请阅读H.265 编码指南有关质量和转换速度的可用选项。

虽然设置ultrafast预设肯定会提高编码的整体速度,但它会显著增加文件大小(使用恒定质量编码模式时)或降低视频质量(使用目标比特率时)。

对于 HEVC,这应该有效:

ffmpeg -i <input> -c:v libx265 -crf 28 -preset fast <output>

降低 CRF 值可提高质量。±6 的值应使比特率减半或加倍,但这取决于您编码的内容的复杂性。

我尝试查看 hevc_nvenc,但它说没有兼容的设备(可能需要向它提供更多信息,我有 980Ti)

980 TI支持NVENC(查看完整列表)。

一般来说,一旦你有兼容的设备,为了获得支持hevc_nvenc,必须在你的系统上安装 NVIDIA 库,并且你的ffmpeg编译需要支持nvenc。请参阅此 wiki 条目了解更多信息。

转换为 h264 的较低预设

这可能有帮助,但我假设你想在文件中保留 10 位颜色深度?如果你要转换,你最好转换成 HEVC – 我不建议转换成 8 位 H.264。

相关内容