ffmpeg:如何添加像素化效果?

10

我需要对一些上传的视频进行模糊处理并对其进行编码。实际上,模糊处理就是使其像素化,从而出现“大块状”效果并进行模糊处理。

你有任何关于如何做到这一点的想法吗?(ffmpeg是不错的选择,但任何命令行Windows工具都可以)

谢谢。


Yarek,你能否使用部分视频而不是完整视频来完成吗? - SpoiledTechie.com
3个回答

9

FFmpeg可以支持frei0r滤镜,其中包括pixeliz0r

原始图像 pixeliz0r处理后的图像

示例:

ffmpeg -i input -vf "frei0r=filter_name=pixeliz0r:filter_params=0.02|0.02" output

两个像素化器filter_params参数如下:
  • BlockSizeX:一个“像素”的水平大小
  • BlockSizeY:一个“像素”的垂直大小
较大的值将创建较大的块。

在哪里获取具有frei0r支持的ffmpeg

  • Windows用户可以从gyan.dev获取“完整版本”。

  • Linux用户可以下载或编译:

    • johnvansickle.com下载具有frei0r支持的ffmpeg。
    • 或者通过安装提供frei0r.h(例如Ubuntu中的frei0r-plugins-dev或CentOS中的frei0r-devel)的软件包,然后将--enable-frei0r添加到您的ffmpeg配置中进行编译。请参阅FFmpeg Wiki:编译指南
  • macOS用户可以使用Homebrew。您可能需要--with-frei0r选项。

更多信息


如何仅对镜头中的某个区域进行操作(比如当你想遮住某人的脸时)? - Doug
我已经安装了FFmpeg,但是如何启用frei0r呢?请把我当作FFmpeg的新手。 - Faisal Mq
@FaisalMq 你的操作系统是什么? - llogan
好的,我明白了。我从mplayer网站提供的链接下载了已启用pixeliz0r的ffmpeg:ffmpeg - Faisal Mq
@pigeonburger 需要查看您的ffmpeg命令和完整日志。您可以使用pastebin网站并在评论中提供链接。 - llogan
显示剩余2条评论

8

如果您不想安装frei0r插件,有一种替代方法。

dimensions=$(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of "csv=p=0:s=\:" input)

ffmpeg -i input -filter_complex \
"[0:v] scale='iw/15:-1', scale='$dimensions:flags=neighbor'" output

这将缩小输入大小(在本例中为15),然后将其缩放回原始尺寸。 flags=neighbor告诉ffmpeg使用最近邻插值算法进行重采样,从而产生像素化效果。您可以通过更改数字15来更改块大小。

第一行是为了找出输入的原始尺寸并直接缩回到它,否则缩小和放大可能会导致舍入误差,稍微改变输出的大小。


1
你可以使用"csv=p=0:s=\:"来消除headsed - llogan
@llogan 谢谢,好建议。我已经编辑了,但是我会保留 head,因为输入中有视频和音频流时,您将获得一个空白行来显示音频流的尺寸。 - Tom
1
可以通过添加“-select_streams v:0”来避免空白行。 - llogan
这个解决方案的另一个优点是它可以使用高输出配置文件,而frei0r只能输出高逐行扫描。如果您想要合并视频而不重新编码,则此项非常重要,因为配置文件必须相同。 - Klesun

1

像素化过滤器就可以做到这一点:

ffmpeg -i input -vf pixelize=300 output

将300替换为您的强度(限制为1024)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接