我有一个用yuv420p像素格式编码的视频,我想取代它的像素。我正在使用ffmpeg及其新的置换过滤器。滤波器分别用作X和Y轴的输入(要移位的视频和)两个位移图。我决定使用nullsrc视频源滤镜和geq滤镜直接创建置换贴图到ffmpeg,以指定三个平面的值:lum,Cb,Cr。该脚本如下:
ffmpeg INPUT.mp4 -f lavfi -i nullsrc=size=${WIDTH}x${HEIGHT}:d=0.1,geq='lum=128+30*sin(2*PI*X/400):Cb=128+30*sin(2*PI*X/400):Cr='128+30*sin(2*PI*X/400)' -f lavfi -i nullsrc=size=${WIDTH}x${HEIGHT}:d=0.1,geq='lum=128+30*sin(2*PI*X/400):Cb=128+30*sin(2*PI*X/400):Cr=128+30*sin(2*PI*X/400)' -lavfi '[0][1][2]displace' OUTPUT.mp4
我使用了ffmpeg文档中提供的示例,因为geq中使用的表达式与问题的目的无关。
在计算和计算时,我得到输入视频的像素没有正确移位,这意味着我可以清楚地看到一种鬼的携带颜色信息视频在移位但是黑白的情况下。 经过一些测试后,我注意到创建的位移贴图只有亮度平面在色度平面位移时才能正确移位,但与亮度不同,亮度是输入视频中平面不对齐的原点,如下面的提取中所示帧:
我还注意到描述位移贴图的Cb和Cr平面的视频具有亮度平面的一半分辨率。
我的问题是:如何正确设置geq定义中的Cr和Cb平面,使它们与亮度平面完全相同?
如果有人能解释为什么ffmpeg为luma和Cb提供了一个非常不同的输出,即使所提供的功能是相同的Cr飞机,也会很棒。
如果,它可以帮助,我使用ffmpeg 3.3-static build。
感谢您的时间。