ffmpeg yuv420p до yuv422p и обратно

Итак, у меня есть сырое видео в формате yuv420p - input.yuvи я знаю его размер кадра. Я выполняю 2 команды:

ffmpeg -pix_fmt yuv420p -s 352x288 -i input.yuv -pix_fmt yuv422p input_yuv422p.yuv

а потом

ffmpeg -pix_fmt yuv422p -s 352x288 -i input_yuv422p.yuv -pix_fmt yuv420p input_decoded.yuv

Проблема в том, что файлы input.yuv а также input_decoded.yuv отличаются. Насколько я понимаю, когда мы обращаемся к yuv422p от yuv420p - мы должны по существу скопировать существующий U а также V компоненты для производства большего количества образцов для заполнения; затем, при обратном преобразовании - мы должны просто отбросить эти образцы и получить исходный файл обратно, но это не то, что я вижу. Я делаю что-то не так, и возможно ли получить оригинал yuv420p назад?

1 ответ

Решение

Похоже, что ffmpeg выполняет некоторую интерполяцию при повышении частоты с 420 до 422 и сглаживании при понижении с 422 до 420 - по крайней мере, это поведение по умолчанию аналогичной библиотеки Matlab: mathworks.com/help/vision/ref/chromaresampling.html. И похоже, что эта библиотека на самом деле имеет опции для достижения поведения простого копирования / отбрасывания значений цветности, что не привело бы к разнице между исходным yuv420p и "преобразованным обратно", на случай, если кому-то это тоже понадобится.

Другие вопросы по тегам