У меня есть опыт использования ffmpeg с x264, и я хотел сделать сравнение с libvpx-vp9. Я протестировал простую одноразовую кодировку необработанного video, изменяя настройки crf и пресеты как с x264, так и с libvpx-vp9. Я новичок в libvpx, и я внимательно следил за this и this, но я мог бы указать неправильную комбинацию параметров, поскольку полученные результаты не имеют для меня большого смысла.Управление FFmpeg CRF с использованием x264 vs libvpx-vp9
Для x264 я сделал:
ffmpeg -i test_video.y4m -c:v libx264 -threads 1 -crf <crf> -preset <preset> -y output.mkv
и получили следующие результаты:
codec , settings , time , PSNR ,bitrate
libx264,['-crf', '20', '-preset', 'fast'],13.1897280216, 42.938337 ,15728
libx264,['-crf', '20', '-preset', 'medium'],16.80494689, 42.879753 ,15287
libx264,['-crf', '20', '-preset', 'slow'],25.1142120361, 42.919206 ,15400
libx264,['-crf', '30', '-preset', 'fast'],8.79047083855, 37.975141 ,4106
libx264,['-crf', '30', '-preset', 'medium'],9.936599016, 37.713778 ,3749
libx264,['-crf', '30', '-preset', 'slow'],13.0959510803, 37.569511 ,3555
Это имеет смысл для меня, учитывая значение CRF вы получаете значение PSNR и изменение предустановки может уменьшить битрейт, но увеличить время кодирования.
Для libvpx-vp9 я сделал:
ffmpeg -i test_video.y4m -c:v libvpx-vp9 -threads 1 -crf <crf> -cpu-used <effort> -y output.mkv
Прежде всего, я думал, что из учебников онлайн, что вариант -cpu-used
эквивалентно -preset
в x264. Это верно? Если да, то в чем разница с -quality
? Кроме того, поскольку диапазон варьируется от -8 до 8, я предположил, что отрицательные значения, где быстрые параметры, а положительные значения - самые медленные. Результаты, которые я получаю очень запутанные, хотя:
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
Bitrate является очень низким и PSNR кажется не зависит от crf
настройки (и очень низкой по сравнению с x264). Настройка -cpu-used
имеет очень минимальное влияние, и также кажется, что -2 и 2 - это тот же вариант. Что мне не хватает? Я ожидал, что libvpx займет больше времени для кодирования (что определенно верно), но в то же время более высокое качество транскодирования. Какие параметры я должен использовать для , имеют хорошее сравнение с x264?
Edit: Благодаря @mulvya и это doc я понял, что работать в режиме CRF с libvpx я должен добавить -b:v 0
. Я снова побежал мои тесты, и я получаю:
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:v 0
Для VP9 вам необходимо добавить '-b: v 0' при кодировании в CRF. – Mulvya
Спасибо! Я отредактирую вопрос – igon