2016-10-18 2 views
1

У меня есть опыт использования 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

+0

Для VP9 вам необходимо добавить '-b: v 0' при кодировании в CRF. – Mulvya

+0

Спасибо! Я отредактирую вопрос – igon

ответ

3

Отрицательных значений -speed подразумевает срок, но при близком к нулю настройки скорости, что не имеет никакого эффекта , Для более быстрого кодирования используйте значения -speed дальше от нуля (например, 4 или 6). Вы также можете рассмотреть возможность использования потоков.

-quality устарел и не должен использоваться (в соответствии с комментариями кода).

+0

Привет @Ronald, не могли бы вы подробнее рассказать о том, что вы имеете в виду, когда говорите, что отрицательная скорость «подразумевает крайний срок»? Я провел больше тестов, изменяя параметры crf и скорости, и я вижу, что настройки с отрицательной скоростью дают равные результаты (с точки зрения PSNR и битрейта) до положительной скорости, но для завершения требуется больше времени. – igon

+0

Это означает, что таймер работает, чтобы вычислить, сколько времени потребуется для кодирования каждого суперблока (64x64 пикселя), и если это займет больше времени, это приведет к прекращению кодирования и прекращению работы фрейма. Однако вы не установили крайний срок, поэтому используется значение по умолчанию (неограниченное), что означает, что он никогда не прерывает кодирование фрейма.Таким образом, он запускает некоторый дополнительный код (делает его медленнее), но никогда не использует результаты из этого. Крайний срок полезен для приложений реального времени (RTC). –

+0

Получил. Спасибо! – igon

Смежные вопросы