文章目录
- 前言
- 过滤处理的介绍
- 两种过滤类型
- 简单滤波图
- 简单滤波图是什么
- 简单滤波示例
- 复杂滤波图
- 复杂滤波是什么
- 区别
- 示例
- 总结
前言
FFmpeg是一款功能强大的开源音视频处理工具,广泛应用于音视频的采集、编解码、转码、流化、过滤和播放等领域。1本文将重点介绍FFmpeg命令在音视频过滤处理中的应用,帮助读者掌握如何使用FFmpeg进行高效的音视频处理。
过滤处理的介绍
在ffmpeg
中,滤波图(Filtergraph)是一种用来描述音频和视频滤镜链的工具。滤镜链是由一个或多个滤镜组成的,这些滤镜可以对音频或视频流进行各种处理,比如调整亮度、对比度、色彩,或者添加特效等。
那么,什么叫做过滤呢?过滤就是对音频或视频流进行处理的过程。你可以把它想象成一个过滤器,原始的音频或视频数据像水一样流过这个过滤器,过滤器会根据我们的需求去掉一些不需要的部分,或者增加一些我们需要的效果。比如,我们可以通过过滤器来去除视频中的噪声,或者增加一些特效,如模糊、旋转等。
举个例子,如果你想要把一段彩色的视频转换成黑白,你就可以使用一个叫做"colorchannelmixer"的滤镜,它会把视频的颜色信息去掉,只留下黑白信息,从而达到我们的目的。
两种过滤类型
简单滤波图
简单滤波图是什么
简单滤波图(Simple Filtergraph)是指在FFmpeg中用于处理音视频流的一种滤波器链。它有以下几个特点:
- 单输入单输出:简单滤波图只有一个输入流和一个输出流,且输入输出类型相同。
- 线性处理:滤波器按顺序处理数据,每个滤波器依次处理输入流并将结果传递给下一个滤波器。
- 配置简单:使用
-filter
选项(视频用-vf
,音频用-af
)来配置。例如,给视频添加一个简单滤波器可以这样写:ffmpeg -i input.mp4 -vf "filter_name" output.mp4
。
简单滤波图适用于需要对单个流进行简单处理的情况,比如调整视频帧率、裁剪视频、调整音量等。
简单滤波示例
简单滤波大概是这样的,他是当向的,可以从deinterlace ->scale
看出
_______ _____________ _______ ________
| | | | | | | |
| input | ---> | deinterlace | ---> | scale | ---> | output |
|_______| |_____________| |_______| |________|
上面的两个过滤的作用:
-
去隔行扫描(Deinterlace):这是第一个滤镜。隔行扫描是一种旧的视频信号技术,它会在不同的时间扫描视频的奇数行和偶数行,这样可以减少带宽。但是在现代的设备上播放隔行扫描的视频,可能会出现画面闪烁的问题。去隔行扫描的滤镜就是用来解决这个问题的,它会将隔行扫描的视频转换为逐行扫描的视频。
-
缩放(Scale):这是第二个滤镜。缩放滤镜可以改变视频的分辨率。比如,你可以将高清的1080p视频缩放为720p,以减少文件大小和播放所需的计算资源。
D:\Codes\ffmpeg_Command>ffmpeg -i test2.mp4 -vf "yadif,scale=2560:1440" out3.mp4
把test2.mp4
转换成2K(test2.mp4原本为1K)
大小明显增加
复杂滤波图
复杂滤波是什么
在ffmpeg
中,复杂滤波图(Complex Filtergraph)是一种更高级的音视频处理工具,它可以处理多个输入流,并可以生成多个输出流。复杂滤波图可以进行更复杂的音视频处理任务,比如混音、转场效果、画中画效果等。
区别
与简单滤波图相比,复杂滤波图的主要区别在于:
- 多输入多输出:复杂滤波图可以处理多个输入流,并可以生成多个输出流。这使得它可以进行更复杂的音视频处理任务。
- 非线性处理:复杂滤波图可以进行非线性的处理,比如将多个视频合并成一个,或者将一个视频分割成多个。
- 配置复杂:由于复杂滤波图的功能更强大,所以配置起来也更复杂。你需要使用
-filter_complex
选项来配置复杂滤波图。
他的滤波图如下:
_________
| |
| input 0 |\ __________
|_________| \ | |\ _________ /| output 0 |\ | | / |__________|_________ \| complex | /
| | | |/
| input 1 |---->| filter |\
|_________| | | \ __________/| graph | \ | |/ | | \| output 1 |_________ / |_________| |__________|
| | /
| input 2 |/
|_________|
示例
下面是一个复杂滤波图的命令示例,它将两个视频文件合并成一个:
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v][1:v]concat=n=2:v=1:a=0[outv]" -map "[outv]" output.mp4
这个ffmpeg
命令的各个部分含义如下:
-
ffmpeg
:这是命令行工具的名称,用于调用ffmpeg
程序。 -
-i input1.mp4 -i input2.mp4
:-i
参数用于指定输入文件,这里有两个输入文件:input1.mp4
和input2.mp4
。 -
-filter_complex "[0:v][1:v]concat=n=2:v=1:a=0[outv]"
:这是复杂滤波图的配置。[0:v][1:v]
表示选择第一个输入文件的视频流和第二个输入文件的视频流。concat=n=2:v=1:a=0
表示将这两个视频流合并(concat)成一个,n=2
表示有两个输入流,v=1
表示生成一个视频流,a=0
表示不生成音频流。[outv]
是这个滤波图的输出标签,用于在后面的-map
参数中引用。 -
-map "[outv]"
:-map
参数用于指定输出流,"[outv]"
表示使用滤波图的输出作为输出流。 -
output.mp4
:这是输出文件的名称。
所以,这个命令的作用是将input1.mp4
和input2.mp4
两个文件的视频流合并成一个,然后输出到output.mp4
文件中。
这样是没有声音的,我们需要选择它的声音流合并:
ffmpeg -i test2.mp4 -i test3.mp4 -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[outvv][outa]" -map "[outvv]" -map "[outa]" out5.mp4
总结
通过本文的学习,读者应能够熟练使用FFmpeg命令进行音视频的过滤处理,包括添加滤镜、调整视频效果和音频效果等。FFmpeg的强大功能和灵活性使其成为音视频处理的首选工具,希望本文能为读者提供实用的指导和参考