我想模糊视频的 3 个区域。这是代码:
$ ffmpeg -i ACCT.mp4 -an \
-filter_complex \
"[0:v]crop=850:100:140:175,boxblur=10[blur1]; \
[0:v]crop=125:285:815:395,boxblur=10[blur2]; \
[0:v]crop=80:30:730:640,boxblur=10[blur3]; \
[0:v][blur1]overlay=140:175:enable='between(t,0,26)'[ovr1]; \
[ovr1][blur2]overlay=815:395:enable='between(t,0,2)'[ovr2]; \
[ovr2][blur3]overlay=730:640:enable='between(t,7,29)'" \
blurredVideo.mp4
不幸的是,ffmpeg 报告以下错误:
[Parsed_boxblur_5 @ 0x7fcfbb805b40] Invalid chroma_param radius value 10, must be >= 0 and <= 7
[Parsed_boxblur_5 @ 0x7fcfbb805b40] Failed to evaluate filter params: -22.
[Parsed_boxblur_5 @ 0x7fcfbb805b40] Failed to configure input pad on Parsed_boxblur_5
Error reinitializing filters!
Failed to inject frame into filter network: Invalid argument
Error while processing the decoded data for stream #0:0
Conversion failed!
该代码基于另一个帖子的有效答案。
问题
boxblur 有大小限制。有关所有详细信息,请参阅boxblur 过滤器文档。
解决方案
使用不同的模糊滤镜
用作 avgblur、dblur、gblur、sab、smartblur、unsharp、yaepblur。请参阅FFmpeg 过滤器。
或者在裁剪前使用 boxblur
这将比您的原始命令慢。
或者添加格式过滤器
另见
视频通常具有描述像素的三个分量:一个亮度分量和两个色度分量。在最常见的方案 (yuv420) 中,色度值仅设置为沿宽度和高度的一半像素,因此色度平面
W/2 x H/2
与亮度平面相比是四分之一大小 ( )。在 boxblur 过滤器中,当没有明确指定时,用于模糊色度平面的半径默认为亮度平面的半径。过滤器将在每个像素周围绘制一个计算半径的圆来计算其输出值,并且整个圆需要在视频帧内,因此平面的模糊半径需要最多为较小边的一半。
在
[0:v]crop=80:30:730:640,boxblur=10[blur3]
中,裁剪后的视频高度为 30,因此色度平面高度为 15,色度半径必须为 7 或更小。您可以使用表达式保持在这样的技术范围内,
[0:v]crop=80:30:730:640,boxblur=10:cr=min(10\,min(cw\,ch)/2)[blur3]