Проблема у меня заключается в том, что при использовании ffmpeg для кодирования YUV с использованием libx264 я не получаю всю информацию о кадре в выходных данных -vstats. Возникает вопрос о том, насколько надежен ffmpeg, и поэтому можно ли доверять любому обзору «теста кодеков», основанному на ffmpeg?
Я анализирую кодеки, чтобы определить, как они работают. Я использую ffmpeg и его опцию -vstats для просмотра закодированного фильма кадр за кадром. процесс, который я использую:
RAW YUV -> штрих-код каждого кадра с номером кадра -> YUV со штрих-кодом
YUV со штрих-кодом -> кодированный (например, с помощью libx264) -> MKV -> Декодированный до YUV
Я могу сравнить два выхода («Штрих-код YUV» и «Декодирование в YUV»), используя штрих-код в каждом кадре. Затем я могу точно сравнить исходный кадр с закодированным кадром, используя PSNR и т. Д.
При кодировании с использованием libx264 и libdirac, есть некоторая информация о кадре, которая отсутствует. Другие кодеки, такие как mpeg2video или даже libvpx, не имеют этой проблемы.
Я обнаружил, что для первых 40-50 кадров vstats libx264 отсутствуют. С тех пор я доказал, что недостающая информация - это последние 40-50 кадров.
Также похоже, что ffmpeg вычисляет средний битрейт на основе информации в vstats. Но поскольку отсутствуют кадры, средняя скорость передачи битов меньше, чем должна быть.
Ниже приведены ссылки на пример ошибки среднего битрейта:
http://dl.dropbox.com/u/6743276/ffmpeg_probs/ffmpeg_av_bitrate_error.png
http://dl.dropbox.com/u/6743276/ffmpeg_probs/ffmpeg_av_bitrate_error.xlsx
Ниже приведена ссылка на график PSNR & f_size:
http://dl.dropbox.com/u/6743276/ffmpeg_probs/frame_mismatch.png
Ниже приведена ссылка на параметры вывода и командной строки:
http://dl.dropbox.com/u/6743276/ffmpeg_probs/stderr.txt
Я думаю, что это тоже ошибка, любой, кто достаточно умен, чтобы разобраться с этим, может захотеть следить за этим трекером:
http://roundup.ffmpeg.org/issue2248