我正在考虑在将来使用VP9来编码我的BluRays,因为它是一个开源的编解码器。但我不能得到手制动器或使用超过50% (4)我的(8)核心。因此,编码时间比使用所有核的X 264/5差得多。
在手闸,我只是设置编码器为VP9和CQ19。如果在参数字段中添加threads 8、threads 16或threads 64,则没有区别。
在命令行(-c:v libvpx-vp9 -crf 19 -threads 16 -tile-columns 6 -frame-parallel 1 -speed 0)中测试ffmpeg也不再使用任何cpu线程。
是当前的编码器不能在4个以上的线程上编码,还是我做错了什么?
发布于 2016-12-29 17:30:00
Libvpx使用平铺线程,这意味着您最多可以拥有与瓷砖数量一样多的线程。-tile-columns选项采用log2格式(所以-tile-columns 6意味着64块),但也受到框架大小的限制。确切的细节是这里,它基本上意味着max_tiles = max(1, exp2(floor(log2(sb_cols)) - 2)),其中的sb_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因此,即使对于1080 p (1920水平像素),您只能得到4个tiles max,所以4个线程最大值,即一个比特流限制。要获得8块瓷砖,至少需要一个1985年像素的宽度(2048-64+1,这将给出sb_cols=32)。得到比最大线程更多的线程。给定分辨率的块数,需要帧级多线程,而libvpx没有实现。其他编码器,如x 265/X 264,确实实现了这一点。
编辑
正如一些评论和下面的人已经评论过的那样,libvpx的最新版本支持-row-mt 1来启用平铺行多线程。这可以在VP9中增加最多4倍的瓷砖数量(因为瓷砖的最大行数是4,而不管视频的高度如何)。为此,使用-tile-rows N,其中N是log2单元中的平铺行数(因此-tile-rows 1表示2平铺行,-tile-rows 2表示4平铺行)。然后,活动线程的总数将等于$tile_rows * $tile_columns。
发布于 2019-04-30 20:50:19
根据webmproject.org,libvpx VP9编码器支持自1.7.0标记以来的单列平铺内的多线程。
您所要做的就是设置-row-mt 1
即ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 1000K -threads 8 -speed 4 -row-mt 1 -f webm /tmp/test
https://stackoverflow.com/questions/41372045
复制相似问题