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 и "преобразованным обратно", на случай, если кому-то это тоже понадобится.