Проблемы с ffmpeg vstats, Отсутствующие кадры и вводящая в заблуждение информация!

Проблема, с которой я сталкиваюсь, заключается в том, что при использовании 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


person ross    schedule 27.09.2010    source источник


Ответы (1)


Я только что обнаружил кое-что, от чего очень сильно краснею!! очень обидно, но ничего :)

Другой пользователь ffmpeg указал, что ffprobe должен выводить больше информации о кадрах, что он и сделал. вот ссылка на его полезный совет:

http://forums.creativecow.net/thread/291/71

Используя это, я нашел следующее:

Фактический средний битрейт (данные ffprobe): 8355,2776056338
Фактический средний битрейт (данные ffmpeg vsstats): 8406,23275471698
Ffmpeg -vstats avg_br: 7816,3
Воспроизведено выше: 7816,32168421053
Стандартный вывод ошибок Ffmpeg: 'bitrate=' 8365,8

Ниже ссылка на мои разработки:

http://dl.dropbox.com/u/6743276/ffmpeg_probs/ffprobe_vs_ffmpeg-vstats.xlsx

Что я обнаружил, так это то, что я должен был использовать информацию о средней скорости передачи данных из стандартного вывода ошибок ffmpeg, она выглядит самой надежной!

person ross    schedule 29.09.2010