Итак, у меня есть сырое видео в формате 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 ответ1

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .