我是FFMPEG的新手,已经有几天我正在研究它。我尝试了给出的代码
FFmpeg - Apply blur over face
我有一个208 X 208
分辨率的视频,我需要在视频上模糊一个矩形,有一些宽度/高度和顶部/左侧偏移。以下代码成功模糊了视频
ffmpeg -i test1.mov -filter_complex "[0:v]crop=10:10:1:1,boxblur=1[b0];[0:v][b0]overlay=10:10" intro-blur.mov
ffmpeg -i test1.mov -filter_complex "[0:v]crop=50:50:1:1,boxblur=1[b0];[0:v][b0]overlay=10:10" intro-blur.mov
但以下内容并非
ffmpeg -i test1.mov -filter_complex "[0:v]crop=5:5:1:1,boxblur=10[b0];[0:v][b0]overlay=10:10" intro-blur.mov
ffmpeg -i test1.mov -filter_complex "[0:v]crop=10:10:1:1,boxblur=10[b0];[0:v][b0]overlay=10:10" intro-blur.mov
ffmpeg -i test1.mov -filter_complex "[0:v]crop=20:20:1:1,boxblur=10[b0];[0:v][b0]overlay=10:10" intro-blur.mov
我想知道为什么会这样?代码无法解决的问题是什么。
提前致谢。
答案 0 :(得分:1)
boxblur的文档说明了
半径值必须是非负数,而不能是 大于亮度和表达式min(w,h)/ 2的值 alpha平面,以及色度平面的min(cw,ch)/ 2。
和
如果未指定,则chroma_radius和alpha_radius默认为 为luma_radius设置的相应值。
所以,在crop=20:20:1:1,boxblur=10
对于亮度平面条件,值10
应等于或小于min(20,20)/2
= 10
。 PASS
但是,由于您尚未指定色度半径的值,因此评估为20
。现在,大多数视频是YUV 4:2:0,即色度平面'宽度和高度是亮度平面的一半,因此在crop=20:20:1:1,boxblur=10
,
对于色度平面,值10
应等于或小于min(10,10)/2
= 5
。 FAIL!
补救措施是确保半径值满足条件,或者在模糊之前插入格式过滤器。
crop=20:20:1:1,format=yuv444p,boxblur=10
您仍然需要确保模糊半径等于或小于裁剪区域最小尺寸的一半。