Проблема, с которой я сталкиваюсь, заключается в том, что при использовании ffmpeg для кодирования YUV с использованием libx264 я не получаю всю информацию о кадре в выводе -vstats. Это поднимает вопрос о том, насколько надежен ffmpeg, и, следовательно, можно ли доверять любому обзору «теста кодеков», основанному на ffmpeg?
Я анализирую кодеки, чтобы определить, как они работают. Я использую ffmpeg и его параметр -vstats для просмотра закодированного фильма кадр за кадром. процесс, который я использую:
RAW YUV -> штриховой код каждого кадра с номером кадра -> Штриховой YUV
Штрих-кодированный YUV -> закодированный (например, с помощью libx264) -> MKV -> декодированный в YUV
Я могу сравнить два вывода («Штриховой код YUV» и «Декодированный в YUV»), используя штрих-код в каждом кадре. Затем я могу точно сравнить исходный кадр с закодированным кадром с использованием PSNR и т. д.
При кодировании с использованием libx264 и libdirac отсутствует некоторая информация о кадре. Другие кодеки, такие как mpeg2video или даже libvpx, не имеют этой проблемы.
Я обнаружил, что vstats libx264 отсутствуют для первых 40-50 кадров. С тех пор я доказал, что недостающая информация — это последние 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