![将 H.264 10 位重新编码为 High Profile 或 HEVC 10 位的最有效方法](https://linux22.com/image/1578283/%E5%B0%86%20H.264%2010%20%E4%BD%8D%E9%87%8D%E6%96%B0%E7%BC%96%E7%A0%81%E4%B8%BA%20High%20Profile%20%E6%88%96%20HEVC%2010%20%E4%BD%8D%E7%9A%84%E6%9C%80%E6%9C%89%E6%95%88%E6%96%B9%E6%B3%95.png)
由于一个奇怪的原因,我的 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。