ffmpeg yuv420p 转为 yuv422p 并转回

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.yuvinput_decoded.yuv不同。我的理解是,当我们转换为时yuv422p-yuv420p我们应该复制现有的UV组件以生成更多样本来填充;然后,当转换回来时 - 我们应该简单地删除这些样本,并接收原始文件,但这不是我看到的。我在这里做错了什么吗?有可能收到原始yuv420p文件吗?

答案1

ffmpeg 似乎在从 420 上采样到 422 时执行了一些插值,而在从 422 下采样回 420 时执行了一些抗锯齿 - 至少这是类似 Matlab 库的默认行为:mathworks.com/help/vision/ref/chromaresampling.html。而且看起来这个库实际上有选项来实现简单复制/删除色度值的行为,这会导致原始 yuv420p 和“转换回来”之间没有区别,以防有人也需要这个。

相关内容