【ffmpeg命令基础】过滤处理

文章目录


前言

FFmpeg是一款功能强大的开源音视频处理工具,广泛应用于音视频的采集、编解码、转码、流化、过滤和播放等领域。1本文将重点介绍FFmpeg命令在音视频过滤处理中的应用,帮助读者掌握如何使用FFmpeg进行高效的音视频处理。


过滤处理的介绍

ffmpeg中,滤波图(Filtergraph)是一种用来描述音频和视频滤镜链的工具。滤镜链是由一个或多个滤镜组成的,这些滤镜可以对音频或视频流进行各种处理,比如调整亮度、对比度、色彩,或者添加特效等。

那么,什么叫做过滤呢?过滤就是对音频或视频流进行处理的过程。你可以把它想象成一个过滤器,原始的音频或视频数据像水一样流过这个过滤器,过滤器会根据我们的需求去掉一些不需要的部分,或者增加一些我们需要的效果。比如,我们可以通过过滤器来去除视频中的噪声,或者增加一些特效,如模糊、旋转等。

举个例子,如果你想要把一段彩色的视频转换成黑白,你就可以使用一个叫做"colorchannelmixer"的滤镜,它会把视频的颜色信息去掉,只留下黑白信息,从而达到我们的目的。

两种过滤类型

简单滤波图

简单滤波图是什么

简单滤波图(Simple Filtergraph)是指在FFmpeg中用于处理音视频流的一种滤波器链。它有以下几个特点:

  • 单输入单输出:简单滤波图只有一个输入流和一个输出流,且输入输出类型相同。
  • 线性处理:滤波器按顺序处理数据,每个滤波器依次处理输入流并将结果传递给下一个滤波器。
  • 配置简单 :使用-filter选项(视频用-vf,音频用-af)来配置。例如,给视频添加一个简单滤波器可以这样写:ffmpeg -i input.mp4 -vf "filter_name" output.mp4

简单滤波图适用于需要对单个流进行简单处理的情况,比如调整视频帧率、裁剪视频、调整音量等。

简单滤波示例

简单滤波大概是这样的,他是当向的,可以从deinterlace ->scale 看出

bash 复制代码
 _______        _____________        _______        ________
|       |      |             |      |       |      |        |
| input | ---> | deinterlace | ---> | scale | ---> | output |
|_______|      |_____________|      |_______|      |________|

上面的两个过滤的作用:

  1. 去隔行扫描(Deinterlace):这是第一个滤镜。隔行扫描是一种旧的视频信号技术,它会在不同的时间扫描视频的奇数行和偶数行,这样可以减少带宽。但是在现代的设备上播放隔行扫描的视频,可能会出现画面闪烁的问题。去隔行扫描的滤镜就是用来解决这个问题的,它会将隔行扫描的视频转换为逐行扫描的视频。

  2. 缩放(Scale):这是第二个滤镜。缩放滤镜可以改变视频的分辨率。比如,你可以将高清的1080p视频缩放为720p,以减少文件大小和播放所需的计算资源。

bash 复制代码
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选项来配置复杂滤波图。

他的滤波图如下:

bash 复制代码
 _________
|         |
| input 0 |\                    __________
|_________| \                  |          |
             \   _________    /| output 0 |
              \ |         |  / |__________|
 _________     \| complex | /
|         |     |         |/
| input 1 |---->| filter  |\
|_________|     |         | \   __________
               /| graph   |  \ |          |
              / |         |   \| output 1 |
 _________   /  |_________|    |__________|
|         | /
| input 2 |/
|_________|

示例

下面是一个复杂滤波图的命令示例,它将两个视频文件合并成一个:

bash 复制代码
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.mp4input2.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.mp4input2.mp4两个文件的视频流合并成一个,然后输出到output.mp4文件中。

这样是没有声音的,我们需要选择它的声音流合并:

bash 复制代码
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的强大功能和灵活性使其成为音视频处理的首选工具,希望本文能为读者提供实用的指导和参考

相关推荐
LNTON羚通10 分钟前
明烟明火检测算法、烟火检测、森林防火检测
大数据·网络·人工智能·算法·音视频
玫瑰花店2 小时前
OpengGL教程(三)---使用VAO和VBO方式绘制三角形
c++·ubuntu·计算机视觉·cmake·opengl
Rin__________2 小时前
Python计算机视觉 第8章-图像内容分类
python·计算机视觉·分类
夜清寒风5 小时前
opencv学习:calcHist 函数绘制图像直方图及代码实现
人工智能·opencv·学习·算法·计算机视觉
闲人编程5 小时前
Python实现优化的分水岭算法
python·算法·计算机视觉·优化·分水岭
富士达幸运星5 小时前
opencv图像透视处理
人工智能·opencv·计算机视觉
Invulnerabl_DL8 小时前
研一小白读论文记录,计算机视觉,Transformer
人工智能·计算机视觉·transformer
PlumCarefree8 小时前
基于鸿蒙API10的RTSP播放器(三:底部视频滑轨进度显示)
音视频
利哥AI实例探险8 小时前
【图像识别】摄像头捕捉运动到静止视频帧(免费源码分享)
音视频