如何将带有ffmpeg的video转换为DNxHD / DNxHR格式?

我正在按照一个关于如何使用cinelerra-cv的教程,在一开始就说,使用cinelerra的第一步是将任何video剪辑转换为dnxhd格式。 刚才说,没有解释如何做到这一点。

经过一些研究,我遇到了ffmpeg,但我不知道如何使用它关于dnxhd,我收集了关于ffmpeg的一点知识,我的猜测如何做到这一点:

ffmpeg -i  -vcodec dnxhd  

然而,这不起作用,我用ffmpeg转换成dnxhd时看到的例子我不明白,他们似乎每次都有一些不同的标签而没有解释为什么要使用它们。

这是一个挑剔的编码器,所以你必须选择适当的参数,包括:

  • 帧率
  • 像素格式/颜色空间
  • 宽x高/分辨率/帧尺寸
  • 比特率

有关可接受的值,请参阅下面的有效DNxHD参数


DNxHD的例子

此示例将缩放为1280×720,选择帧速率为30000/1001(又名“29.97”),像素格式为YUV 4:2:2平面。

 ffmpeg -i input -c:v dnxhd -vf "scale=1280:720,fps=30000/1001,format=yuv422p" -b:v 110M -c:a pcm_s16le output.mov 
  • 如果您的输入文件已经符合某些可接受的参数,那么您不必手动声明它们。

  • DNxHD的输出格式容器通常是MXF或MOV。


DNxHR的例子

DNxHR适用于大于1080p的分辨率,如2K,4K和8K。

如果需要DNxHR,请添加配置文件输出选项,例如-profile dnxhr_hq

可接受的值是: dnxhddnxhr_444dnxhr_hqxdnxhr_hqdnxhr_sqdnxhr_lb

  • DNxHR LB – 低带宽(8位4:2:2)离线质量
  • DNxHR SQ – 标准质量(8位4:2:2)(适用于交付格式)
  • DNxHR总部 – 高品质(8位4:2:2)
  • DNxHR HQX – 高品质(12位4:2:2)(UHD / 4K广播质量传送)
  • DNxHR 444 – 精加工质量(12位4:4:4)(电影质量交付)

以上列表改编自DNxHR编解码器 。


有效的DNxHD参数

如果提供的值不正确, ffmpeg将失败,但它可以提供接受的列表。

您可以使用以下“dummy”命令显示列表:

 ffmpeg -f lavfi -i testsrc2 -c:v dnxhd -f null - 

有关帧速率的重要说明

  • 从此命令生成的列表中缺少帧速率。 ffmpeg将盲目地接受该编码器的任何帧速率,据报道Avid软件会接受它(未经证实),但DNxHD比特率应该仅与特定帧速率匹配。 为了获得最大兼容性,我建议仅使用适当的比特率/帧速率组合。 因此,使用上面的命令获取ffmpeg接受的正确比特率和像素格式,并使用Avid DNxHD分辨率列表或DNxHD白皮书 (第9页)交叉引用以获得正确的帧速率。

  • 上面链接中列出的帧速率使用不准确的舍入近似值。 适当的值列在下面; 缩写名称在左侧,正确值在右侧。

    • 29.97 = 30000/1001(或使用别名ntsc
    • 59.94 = 60000/1001
    • 23.967 = 24000/1001(或使用别名ntsc-film

更多的选择

有关其他编码器特定选项,请参阅:

 ffmpeg -h encoder=dnxhd 

错误

 ff_frame_thread_encoder_init failed Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height Conversion failed! 

这意味着您的帧速率,宽度,高度,像素格式和/或比特率不正确。 有关可接受的值,请参阅上面的有效DNxHD参数

pixel format is incompatible with DNxHD profile

使用格式filter选择适当的像素格式。 请参阅上面的DNxHD示例。