Encoding VP9编码限制为4个线程?

Encoding VP9编码限制为4个线程?,encoding,ffmpeg,libvpx,handbrake,vp9,Encoding,Ffmpeg,Libvpx,Handbrake,Vp9,我正在考虑将来使用VP9对我的BluRays进行编码,因为它是一个开源的编解码器。但我不能得到手刹或ffmpeg使用超过50%(4)我的(8)核心。因此,编码时间比使用所有内核的x264/5差得多 在手刹中,我刚刚将编码器设置为VP9和CQ19。如果在参数字段中添加线程8、线程16或线程64,则没有区别 在命令行中测试ffmpeg(-c:v libvpx-vp9-crf 19-threads 16-tile columns 6-frame parallel 1-speed 0)也不会使用更多的c

我正在考虑将来使用VP9对我的BluRays进行编码,因为它是一个开源的编解码器。但我不能得到手刹或ffmpeg使用超过50%(4)我的(8)核心。因此,编码时间比使用所有内核的x264/5差得多

在手刹中,我刚刚将编码器设置为VP9和CQ19。如果在参数字段中添加
线程8
线程16
线程64
,则没有区别

在命令行中测试ffmpeg(
-c:v libvpx-vp9-crf 19-threads 16-tile columns 6-frame parallel 1-speed 0
)也不会使用更多的cpu线程

当前编码器不能在超过4个线程上编码,还是我做错了什么?

  • Linux Mint 18
  • 手制动器0.10.2+ds1-2build1
  • ffmpeg 2.8.10-0ubuntu0.16.04.1
  • libvpx3 1.5.0-2ubuntu1

Libvpx使用tile线程,这意味着您最多可以拥有与tile数量相同的线程。
-tile columns
选项采用log2格式(因此
-tile columns 6
表示64个tile),但也受到帧大小的限制。确切的细节是,它基本上意味着
max\u tiles=max(1,exp2(floor(log2(sb\u cols))-2))
,其中
sb\u cols=ceil(width/64.0)
。您可以编写一个小脚本来计算给定水平分辨率下的分幅数:

Width: 320 (sb_cols: 5), min tiles: 1, max tiles: 1
Width: 640 (sb_cols: 10), min tiles: 1, max tiles: 2
Width: 1280 (sb_cols: 20), min tiles: 1, max tiles: 4
Width: 1920 (sb_cols: 30), min tiles: 1, max tiles: 4
Width: 3840 (sb_cols: 60), min tiles: 1, max tiles: 8
因此,即使对于1080p(1920个水平像素),您最多也只能获得4个平铺,因此最多只能获得4个线程,即比特流限制。要获得8个平铺,您至少需要1985个像素的宽度(2048-64+1,即sb_cols=32)。要在给定分辨率下获得比最大分幅数更多的线程,需要帧级多线程,而libvpx没有实现。其他编码器,如x265/x264,确实实现了这一点

编辑 正如评论和下面的一些人已经评论的那样,libvpx的最新版本支持
-row mt 1
以启用平铺行多线程。在VP9中,这可以将磁贴的数量最多增加4倍(因为无论视频高度如何,磁贴行的最大数量都是4)。要启用此功能,请使用
-tile rows N
,其中N是以log2为单位的tile行数(因此
-tile rows 1
表示2个tile行,
-tile rows 2
表示4个tile行)。根据libvpx VP9编码器自1.7.0标记以来支持单列磁贴内的多线程,活动线程总数将等于
$tile\u rows*$tile\u columns

您只需设置
-行mt 1


i、 e
ffmpeg-i input.mp4-c:v libvpx-vp9-b:v 1000K-threads 8-speed 4-row mt 1-f webm/tmp/test

感谢您的解释,您知道任何其他方法可以使vp9以合理的性能进行编码吗?您最好的选择是对
-speed
参数使用更高的值。如果这还不够,或者质量对您的预期用例影响太大,恐怕您就走运了……显然,自从ffmpeg 3.3/libvpx 1.6.2以来,现在有了支持
-row mt=1
选项,它为1080p内容提供了更好的编码并行化和超过4个线程。穿线机的家伙们疯了@感谢您花时间发布这条很棒的信息!FBO的任何人谁没有审查他的答案中的链接,罗纳德是VP9代码作者之一(ffmpeg代码)!很高兴能如此简洁地从源代码中获取此类信息!:)谷歌关于VP9 libvpx编解码器的文档很差(这说得委婉一些)。我在其中只找到了一个关于
-row mt
参数的参考,没有提到
-tile rows