【ffmpeg命令基础】过滤处理

举报
人才程序员 发表于 2024/09/14 18:44:39 2024/09/14
【摘要】 @TOC 前言FFmpeg是一款功能强大的开源音视频处理工具,广泛应用于音视频的采集、编解码、转码、流化、过滤和播放等领域。1本文将重点介绍FFmpeg命令在音视频过滤处理中的应用,帮助读者掌握如何使用FFmpeg进行高效的音视频处理。 过滤处理的介绍在ffmpeg中,滤波图(Filtergraph)是一种用来描述音频和视频滤镜链的工具。滤镜链是由一个或多个滤镜组成的,这些滤镜可以对音频或视...

@TOC


前言

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 |
|_______|      |_____________|      |_______|      |________|

上面的两个过滤的作用:

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

  2. 缩放(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.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文件中。

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

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。