探索 FFmpeg Basics 音视频技术(8): 模糊、锐化与其他降噪技术

这个系列文章我们来介绍一位海外工程师如何探索 FFmpeg Basics 音视频技术,对于想要开始学习音视频技术的朋友,这些文章是份不错的入门资料,这是第 8 篇:FFmpeg   模糊、锐化与其他降噪技术。

—— 来自公众号“关键帧Keyframe”的分享

可使用降噪滤波器和选项来增强包含各种噪声的视频输入。降噪是视频编码前预处理的一部分。

1、模糊视频效果

模糊效果能够增强图像(视频帧)中的某些类型的噪声,其中每个输出像素值是根据相邻像素值计算得出的。例如,模糊效果可以改善从印刷的半色调图片扫描的图像。为了模糊输入视频,我们可以使用下表中描述的均值模糊滤波器:

描述使用均值模糊算法在输入上创建一个模糊效果
语法boxblur=luma_r:luma_p[:chroma_r:chroma_p[:alpha_r:alpha_p]]
滤镜期望 2、4 或 6 个参数,其中 r = 半径,p = 权重、程度、功率
\\\********参数
alpha_r– 用于模糊相关输入平面(以像素为单位)的盒子的半径
– 值是下面描述的变量的表达式
– 默认值来源于 luma_radius 和 luma_power
alpha_p– alpha 功率,确定过滤器被应用到相关平面的次数
– 默认值来源于 luma_radius 和 luma_power
chroma_r– 用于模糊相关输入平面(以像素为单位)的 box 的色度半径
– 值是下面描述的变量的表达式
– 默认值来源于 luma_radius 和 luma_power
chroma_p– 色度功率,确定过滤器被应用到相关平面的次数
– 默认值来源于 luma_radius 和 luma_power
luma_r– 用于模糊相关输入平面(以像素为单位)的 box 的半径
– 值是下面描述的变量的表达式
luma_p– luma 功率,确定过滤器被应用到相关平面的次数
\\\*********用于 alpha、色度和 luma 半径表达式的变量
w,h输入宽度和像素高度
cw, ch输入色度图像的像素宽度和高度
hsub水平色度子样本值,对于 yuv422p 像素格式为 2
vsub垂直色度子样本值,对于 yuv422p 像素格式为 1
半径是一个非负数,不能超过 luma 和 alpha 平面的 min(w,h)/2 的值以及 chroma 平面的 min(cw,ch)/2 的值

例如,在输入视频中,当 luma 半径值为 1.5、luma 功率值为 1 时,我们可以使用以下命令:

ffmpeg -i input.mpg -vf boxblur=1.5:1 output.mp4

另一个具有模糊效果的 FFmpeg 滤波器是下表中描述的 smartblur 滤波器:

描述模糊输入而不影响轮廓
语法smartblur=luma_r:luma_s:luma_t[:chroma_r:chroma_s:chroma_t]
方括号中的参数是可选的,其中 r = 半径,s = 强度,t = 阈值
\\\*********参数描述
chroma_r色度(颜色)半径,从 0.1 到 5.0 的浮点数,指定用于模糊图像的高斯滤波器的方差(如果更大,处理速度会更慢)
chroma_s色度强度,从 -1.0 到 1.0 的浮点数,配置模糊效果;从 0.0 到 1.0 的值将模糊图像,从 -1.0 到 0.0 的值将增强图像
chroma_t色度阈值,从 -30 到 30 的整数,用作确定是否应该模糊像素的系数;0 的值将过滤整个图像,0 到 30 的值将过滤平坦区域,-30 到 0 的值将过滤边缘
luma_r亮度(亮度)半径,从 0.1 到 5.0 的浮点数,指定用于模糊图像的高斯滤波器的方差(如果更大,处理速度会更慢)
luma_s亮度强度,从 -1.0 到 1.0 的浮点数,配置模糊效果;从 0.0 到 1.0 的值将模糊图像,从 -1.0 到 0.0 的值将增强图像
luma_t亮度阈值,从 -30 到 30 的整数,用作确定是否应该模糊像素的系数;0 的值将过滤整个图像,0 到 30 的值将过滤平坦区域,-30 到 0 的值将过滤边缘
如果未设置色度参数,则使用 luma 参数进行色度处理

例如,为了改善半色调图像,我们可以将亮度半径设置为最大值 5,亮度强度设置为 0.8,亮度阈值设置为 0,从而模糊整个图像:

ffmpeg -i halftone.jpg -vf smartblur=5:0.8:0 blurred_halftone.png
探索 FFmpeg Basics 音视频技术(8): 模糊、锐化与其他降噪技术

2、锐化视频

为了锐化或模糊视频帧,我们可以使用下表中描述的不清晰滤波器。

描述根据指定参数增加或模糊输入视频
语法l_msize_x:l_msize_y:l_amount:c_msize_x:c_msize_y:c_amount
所有参数都是可选的;如果未设置,则默认值为 5:5:1.0:5:5:0.0
\\\*********参数描述
l_msize_x,luma_msize_x亮度矩阵的水平尺寸,3 到 13 之间的整数,默认值为 5
l_msize_y,luma_msize_y亮度矩阵的垂直尺寸,3 到 13 之间的整数,默认值为 5
l_amount,luma_amount亮度效果强度,-2.0 到 5.0 之间的浮点数;负值创建模糊效果,默认值为 1.0
c_msize_x,chroma_msize_x色度矩阵的水平尺寸,3 到 13 之间的整数,默认值为 5
c_msize_y,chroma_msize_y色度矩阵的垂直尺寸,3 到 13 之间的整数,默认值为 5
c_amount,chroma_amount色度效果强度,-2.0 到 5.0 之间的浮点数;负值创建模糊效果,默认值为 0.0

锐化滤波器可以用作普通的不锐利掩模和高斯模糊。例如,要使用默认值锐化输入,我们可以使用以下命令。

ffmpeg -i input -vf unsharp output.mp4

输出将使用尺寸为 5×5 的亮度矩阵和亮度效果强度为 1.0 的锐化。例如,要产生高斯模糊效果,我们可以使用负值表示亮度和/或色度值。

ffmpeg -i input -vf unsharp=6:6:-2 output.mp4

下面的复杂图像说明了不锐利滤波器的使用价值:

  • 图像 1:美国国家航空航天局(NASA)在 2012 年 6 月 5 日记录了金星凌日的情况,这段视频可以从 NASA 的网站上下载。
  • 图像 2:-vf unsharp(无参数,默认值被使用)使黑点更明显,没有可见的伪影。
  • 图像 3:-vf unsharp=6:6:3(相对较强的锐化效果)使黑点更明显,但可见轻微的扭曲。
  • 图像 4:-vf unsharp=6:6:-2(相对较强的模糊效果)-2 的亮度量参数模糊了结果,在金星周围形成了一个虚拟的环。
探索 FFmpeg Basics 音视频技术(8): 模糊、锐化与其他降噪技术

3、使用 denoise3d 进行降噪

视频滤波器 denoise3d 减少噪声,它是 mp 滤波器的一部分(来自 MPlayer 项目)。

描述生成更高质量的平滑视频帧,并尝试提高可压缩性。
语法mp=denoise3d[=luma_spatial[:chroma_spatial[:luma_tmp[:chroma_tmp]]]]
(所有参数都是可选的)
\\\*********参数描述
luma_spatial空间亮度强度,非负浮点数,默认为 4.0
chroma_spatial空间色度强度,非负浮点数,默认为 3.0
luma_tmp时间亮度强度,非负浮点数,默认为 6.0
chroma_tmp时间色度强度,非负浮点数,默认为 luma_tmp * chroma_spatial / luma_spatial

例如,要使用 denoise3d 滤波器的默认值来增强输入,我们可以使用以下命令:

ffmpeg -i input.mpg -vf mp=denoise3d output.webm

这张图片展示了使用 denoise3d 滤波器默认值增强的 NASA 阿波罗计划存档视频。

探索 FFmpeg Basics 音视频技术(8): 模糊、锐化与其他降噪技术

4、使用 hqdn3d 进行降噪

denoise3d 滤波器的高级版本是 hqdn3d 滤波器,它已经在 libavfilter 库中,是 FFmpeg 的本地滤波器。滤波器的名称是高质量降噪三维滤波器的缩写,如下面的表格所示:

描述生成高质量的平滑视频帧,并尝试提高压缩率,是 denoise3d 滤波器的增强版本
语法hqdn3d=[luma_spatial[:chroma_spatial[:luma_tmp[:chroma_tmp]]]]
\\\*********参数描述
luma_spatial空间亮度强度,非负浮点数,默认为 4.0
chroma_spatial空间色度强度,非负浮点数,默认为 3.0 * luma_spatial / 4.0
luma_tmp时间亮度强度,非负浮点数,默认为 6.0 * luma_spatial / 4.0
chroma_tmp时间色度强度,非负浮点数,默认为 luma_tmp * chroma_spatial / luma_spatial

例如,要使用默认的 hqdn3d 值来减少视频输入中的噪声,我们可以使用以下命令:

ffmpeg -i input.avi -vf hqdn3d output.mp4

下面的图像说明了 hqdn3d 滤波器的各种值的用法。

探索 FFmpeg Basics 音视频技术(8): 模糊、锐化与其他降噪技术

5、使用 nr 选项进行降噪

另一种减少视频输入噪声的方法是使用 -nr(降噪)选项。其值是一个从 0 到 100000 的整数,其中 0 是默认值。1-600 的范围对公用内容有用。如果视频包含强烈的噪声,请尝试使用更高的值。由于此选项比 denoise3d 和 hqdn3d 滤波器使用的计算机资源少得多,因此当速度很重要时,它是降噪的首选方法。例如,在较旧的计算机上,我们可以使用以下命令来改善观看稍微噪声的视频:

ffplay -i input.avi -nr 500

音视频方向学习、求职,欢迎加入我们的星球

丰富的音视频知识、面试题、技术方案干货分享,还可以进行面试辅导

探索 FFmpeg Basics 音视频技术(8): 模糊、锐化与其他降噪技术

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论