在 FFmpeg 编码中为 HEVC 设置位深度?

Dan*_*adi 5 ffmpeg video-conversion hevc

FFmpeg 现在支持x265 的 10 位和 12 位编码,但我找不到合适的命令行选项以这些位深度对它们进行编码。

有人可以指定这些选项吗?

and*_*.46 7

如果您有适当配置的 FFmpeg 和 x265 现代版本(Zesty Zapus 17.04 下的存储库 FFmpeg 属于此类),您应该会发现使用 8、10 和 12 位进行编码相当简单。

我为下面的每个说明了一个示例命令行:

1. 8 位 HEVC 编码与 FFmpeg...

检查您安装的 x265 版本的8 位编码能力,如下所示:

andrew@illium~$ x265 -V
x265 [info]: HEVC encoder version 2.4
x265 [info]: build info [Linux][GCC 7.1.0][64 bit] 8bit+10bit+12bit
x265 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX XOP FMA4 FMA3 LZCNT BMI1
andrew@illium~$ 
Run Code Online (Sandbox Code Playgroud)

在这里,您将看到我自己的副本具有 8|10|12 位编码功能。针对此版本的 x265 编译的 FFmpeg 安装可以使用以下命令生成体面的 8 位编码:

ffmpeg -i input.mp4 \
       -c:v libx265 -preset medium -crf 28 -pix_fmt yuv420p \
       -c:a aac -b:a 128k \
       output_8bit.mp4
Run Code Online (Sandbox Code Playgroud)

您当然可以改变这些设置中的任何一个以满足您的特定需求......

2. 使用 FFmpeg 的 10 位 HEVC 编码...

检查您安装的 x265 版本的10 位编码能力,如下所示:

andrew@illium~$ x265 -V -D10
x265 [info]: HEVC encoder version 2.4
x265 [info]: build info [Linux][GCC 7.1.0][64 bit] 10bit
x265 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX XOP FMA4 FMA3 LZCNT BMI1
andrew@illium~$ 
Run Code Online (Sandbox Code Playgroud)

在这里,您将看到我自己的副本具有 10 位编码功能。针对此版本的 x265 编译的 FFmpeg 安装可以使用以下命令生成不错的 10 位编码:

ffmpeg -i input.mp4 \
       -c:v libx265 -preset medium -crf 28 -pix_fmt yuv420p10le \
       -c:a aac -b:a 128k \
       output_10bit.mp4
Run Code Online (Sandbox Code Playgroud)

这应该能让你度过难关...

3. 使用 FFmpeg 的 12 位 HEVC 编码...

检查您安装的 x265 版本的12 位编码能力,如下所示:

andrew@illium~$ x265 -V -D12
x265 [info]: HEVC encoder version 2.4
x265 [info]: build info [Linux][GCC 7.1.0][64 bit] 12bit
x265 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX XOP FMA4 FMA3 LZCNT BMI1
andrew@illium~$ 
Run Code Online (Sandbox Code Playgroud)

在这里,您将看到我自己的副本具有 12 位编码功能。针对此版本的 x265 编译的 FFmpeg 安装可以使用以下命令生成不错的 12 位编码:

ffmpeg -i input.mp4 \
       -c:v libx265 -preset medium -crf 28 -pix_fmt yuv420p12le  \
       -c:a aac -b:a 128k \
       output_12bit.mp4
Run Code Online (Sandbox Code Playgroud)

再次对一些辅助参数进行实验应该可以为您提供准确的结果......

笔记:

  1. 如果您不确定的 FFmpeg 和 libx265 副本-pix_fmt支持哪些像素格式(对于重要的FFmpeg 设置),以下命令将显示详细信息:

     ffmpeg -h encoder=libx265 2>/dev/null | grep pixel 
    
    Run Code Online (Sandbox Code Playgroud)
  2. FFmpeg 和 H.265 编码指南:关于使用 FFmpeg 进行 HEVC 编码的基本信息,尽管没有关于 8|10|12 位编码的信息...

  3. Zesty Zapus (17.04) 有一个稍旧但配置齐全的 x265:

      andrew@ilium:~$ x265 -V
      x265 [info]: HEVC encoder version 2.3
      x265 [info]: build info [Linux][GCC 6.3.0][64 bit] 8bit+10bit+12bit
      x265 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX LZCNT
      andrew@ilium:~$ 
    
    Run Code Online (Sandbox Code Playgroud)

    因此可以编码到所有 3 种可能的位深度......