Как использовать ffmpeg для расчета значения ssim для сжатого видео VP8/VP9?

У меня есть видео HEVC. Я преобразовал его в VP8 и VP9, ​​используя приведенные ниже команды FFmpeg:

ffmpeg -i ./hevc.mp4 -vcodec libvpx -crf 18 -b:v 0 -speed 1 ./vp8.webm

ffmpeg -i ./hevc.mp4 -vcodec libvpx-vp9 -crf 18 -b:v 0 -speed 1 ./vp9.webm

Конверсия прошла очень успешно. Но значение ssim, которое я рассчитал с помощью команд FFmpeg ниже:

ffmpeg -y -i hevc.mp4 -i vp8.webm -filter_complex "ssim" -f hevc /dev/null

ffmpeg -y -i hevc.mp4 -i vp9.webm -filter_complex "ssim" -f hevc /dev/null

Оба видео VP8 и VP9 получили значения ssim меньше 0.99. Это были плохие результаты, которых я не ожидал.

Если я конвертирую видео HEVC в x264, значения ssim будут нормальными.

Есть ли проблемы среди моих команд?


person user3032481    schedule 21.02.2016    source источник
comment
Эталонное видео должно быть вторым входом.   -  person Gyan    schedule 21.02.2016
comment
Вы имеете в виду, что я должен ввести команду следующим образом: ffmpeg -y -i vp8.webm -i hevc.mp4 -filter_complex ssim -f hevc /dev/null ? Я пробовал, было то же самое.   -  person user3032481    schedule 21.02.2016
comment
Показывают ли коды с более низкими CRF более высокие баллы?   -  person Gyan    schedule 21.02.2016
comment
ssim становятся очень маленькими с более низким CRF. Значение ssim все еще низкое (‹ 0,99). Но я нашел другой способ. VP9 может быть без потерь. Итак, я конвертирую HEVC в VP9 без потерь, затем конвертирую VP9 без потерь в VP9 (без потерь, используя crf 18) и вычисляю значение ssim между VP9 без потерь и VP9 (без потерь), значение ssim больше 0,993, то есть число, которое Я ожидаю. Но у VP8 та же проблема, даже если исходник VP9 без потерь, а не hevc. Может быть, это проблема временной метки?   -  person user3032481    schedule 21.02.2016
comment
Является ли источник постоянной частотой кадров? Одинаков ли формат пикселей для видео HEVC и WebM? Попробуйте setpts=PTS-STARTPTS для обоих.   -  person Gyan    schedule 21.02.2016
comment
Как проверить частоту кадров? Формат пикселей тот же, что и у yuv420p. Как правильно использовать setpts=PTS-STARTPTS? Моя команда ffmpeg -y -i vp8.webm -i hevc.mp4 -filter_complex "ssim; [0:v] setpts=PTS-STARTPTS;[1:v] setpts=PTS-STARTPTS" -f webm /dev/null . Я прав?   -  person user3032481    schedule 21.02.2016
comment
Оно работает! Большое спасибо, @Mulvya   -  person user3032481    schedule 21.02.2016
comment
Когда вы вычисляете SSIM постфактум (т.е. у вас есть оба видеофайла), вам не нужно -f hevc, особенно для вывода /dev/null. (Это что-то перекодирует, сжигая электричество). Просто используйте -f null.   -  person Tomasz Gandor    schedule 14.06.2017


Ответы (1)


Чтобы выполнить SSIM только для эталонного файла и файла сравнения, начиная с FFMPEG 4.0 и более поздних версий:

ffmpeg -i test.mp4 -i reference.mp4 -lavfi libvmaf="[0:v][1:v]ssim" -f null -

Требуется, чтобы фильтр VMAF был скомпилирован в FFMPEG.

Дополнительные сведения см. в разделе документации FFMPEG на SSIM: https://ffmpeg.org/ffmpeg-filters.html#ssim

person bitkid    schedule 15.06.2018