Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video 使用x264与libvpx-vp9的FFmpeg CRF控制_Video_Encoding_Ffmpeg_X264_Libvpx - Fatal编程技术网

Video 使用x264与libvpx-vp9的FFmpeg CRF控制

Video 使用x264与libvpx-vp9的FFmpeg CRF控制,video,encoding,ffmpeg,x264,libvpx,Video,Encoding,Ffmpeg,X264,Libvpx,我有一些将ffmpeg与x264结合使用的经验,我想与libvpx-vp9进行比较。我测试了一个简单的原始单通编码,用x264和libvpx-vp9改变crf设置和预设。我是libvpx的新手,我仔细地遵循了它,但我可能仍然指定了错误的参数组合,因为我得到的结果对我来说没有多大意义 对于x264,我做到了: ffmpeg -i test_video.y4m -c:v libx264 -threads 1 -crf <crf> -preset <preset> -y out

我有一些将ffmpeg与x264结合使用的经验,我想与libvpx-vp9进行比较。我测试了一个简单的原始单通编码,用x264和libvpx-vp9改变crf设置和预设。我是libvpx的新手,我仔细地遵循了它,但我可能仍然指定了错误的参数组合,因为我得到的结果对我来说没有多大意义

对于x264,我做到了:

ffmpeg -i test_video.y4m -c:v libx264 -threads 1 -crf <crf> -preset <preset> -y output.mkv 
这对我来说很有意义,给定一个crf值,你会得到一个PSNR值,改变预设值会降低比特率,但会增加编码时间

对于libvpx-vp9,我做了:

ffmpeg -i test_video.y4m -c:v libvpx-vp9 -threads 1 -crf <crf> -cpu-used <effort> -y output.mkv 
比特率非常低,PSNR似乎不受
crf
设置的影响(与x264相比非常低)。
-cpu used
设置的影响非常小,而且似乎-2和2是相同的选项。。我错过了什么?我希望libvpx需要更多的时间来编码(这是肯定的),但同时需要更高质量的转码。我应该使用什么参数来 与x264进行公平比较

编辑:多亏了@mulvya,我认为要在crf模式下使用libvpx,我必须添加
-b:v0
。我重新运行了我的测试,我得到:

    codec     , settings                                 , time        , PSNR     ,bitrate
libvpx-vp9,['-crf', '20', '-b:v', '0', '-cpu-used', '-2'],57.6835780144,45.111158,17908
libvpx-vp9,['-crf', '20', '-b:v', '0', '-cpu-used', '0'] ,401.360313892,45.285367,17431
libvpx-vp9,['-crf', '20', '-b:v', '0', '-cpu-used', '2'] ,57.4941239357,45.111158,17908
libvpx-vp9,['-crf', '30', '-b:v', '0', '-cpu-used', '-2'],49.175855875,42.588178,11085
libvpx-vp9,['-crf', '30', '-b:v', '0', '-cpu-used', '0'] ,347.158324957,42.782194,10935
libvpx-vp9,['-crf', '30', '-b:v', '0', '-cpu-used', '2'] ,49.1892938614,42.588178,11085

PSNR和比特率通过添加
-b:v0

而显著提高
-speed
的负值意味着一个截止日期,但在接近零的速度设置下,这没有效果。对于更快的编码,请使用远离零的
-speed
值(例如4或6)。你也可以考虑使用线程。


-quality
已弃用,不应使用(根据代码注释)。

对于VP9,在编码到CRF时需要添加
-b:v 0
。谢谢!我将编辑这个问题Hi@Ronald,当你说负速度“意味着最后期限”时,你能再详细阐述一下你的意思吗?我运行了更多的测试,改变了crf和速度参数,我发现负速度设置产生的结果(在峰值信噪比和比特率方面)与正速度相等,但需要更多的时间才能完成。这意味着有一个计时器在运行,以计算每个超级块(64x64像素)编码所需的时间,如果这比截止时间长,它将中止编码并删除帧。但是,您没有设置截止日期,因此使用默认值(无限制),这意味着它从不中止对帧的编码。因此,它运行一些额外的代码(使其速度变慢),但从不使用这些代码的结果。Deadline主要用于实时通信(RTC)应用程序。明白了。非常感谢。
codec     , settings                      , time        , PSNR     ,bitrate
libvpx-vp9,['-crf', '20', '-cpu-used', '-2'],19.6644911766,32.54317,571
libvpx-vp9,['-crf', '20', '-cpu-used', '0'],176.670887947,32.69899,564
libvpx-vp9,['-crf', '20', '-cpu-used', '2'],20.0206270218,32.54317,571
libvpx-vp9,['-crf', '30', '-cpu-used', '-2'],19.7931578159,32.54317,571
libvpx-vp9,['-crf', '30', '-cpu-used', '0'],176.587754965,32.69899,564
libvpx-vp9,['-crf', '30', '-cpu-used', '2'],19.8394429684,32.54317,571
    codec     , settings                                 , time        , PSNR     ,bitrate
libvpx-vp9,['-crf', '20', '-b:v', '0', '-cpu-used', '-2'],57.6835780144,45.111158,17908
libvpx-vp9,['-crf', '20', '-b:v', '0', '-cpu-used', '0'] ,401.360313892,45.285367,17431
libvpx-vp9,['-crf', '20', '-b:v', '0', '-cpu-used', '2'] ,57.4941239357,45.111158,17908
libvpx-vp9,['-crf', '30', '-b:v', '0', '-cpu-used', '-2'],49.175855875,42.588178,11085
libvpx-vp9,['-crf', '30', '-b:v', '0', '-cpu-used', '0'] ,347.158324957,42.782194,10935
libvpx-vp9,['-crf', '30', '-b:v', '0', '-cpu-used', '2'] ,49.1892938614,42.588178,11085