FFMPEG:更改过滤器可防止视频模糊

时间:2016-07-11 06:01:05

标签: video ffmpeg

我是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

我想知道为什么会这样?代码无法解决的问题是什么。

提前致谢。

1 个答案:

答案 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

您仍然需要确保模糊半径等于或小于裁剪区域最小尺寸的一半。