FFmpeg命令行语法之-filter_complex (Android环境)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FFmpeg命令行语法之-filter_complex (Android环境)相关的知识,希望对你有一定的参考价值。

参考技术A 废话少说,先举个例子

这个例子其实在 android端使用ffmpeg给视频添加图片水印 里已经说过了。
这是一个给视频打上图片水印的命令。
然而,他打的不是一个普通的水印,而是两个。
命令看上去很简洁。然而(又是然而),正因为他这么简洁,所以一开始上来未免搞不清他实际是什么意思。

来,我们把他拆开,其实他由以下部分组成:

1、2、4部分的含义一目了然。3里头的scale和overlay也是字面的意思,不难理解。然而,-filter_complex滤镜的参数结构就不是那么好理解了,比如说那一坨[]里头的东西是什么鬼?

来,一个个解释。
[1:v]这个里头两个参数,1表示的是操作对象的编号。在本例中0就是原始视频文件input.mp4,1就是image1.png,2就是image2.png,3就是output.mp4。而另一个参数v表示操作对象里的视频信息。
[img1]是这个操作过滤器的名字。(当然名字可以随便起)
所以这头一句 [1:v]scale=100:100[img1] 的意思就是对图片imagei.png进行调节尺寸的操作,并将这个操作的结果命名为img1。后面的[2:v]和[img2]也是一个意思。
我们继续,overlay前面 [0:v][img1] 凑一起是什么意思呢。0自然就是指的原始视频,这句的意思就是将[img1]叠加到0对象的视频上。本例中就是把image1.png叠加到input.mp4上。这里需要注意的就是顺序:后一个对象叠加到前一个上,后一个对象在上层。如果写成 [img1][0:v] ,那相对本例其实就是把视频叠加到图片imge1.png上。这样的话一般来说由于视频通常是全屏,等于用视频覆盖了图片,水印完全看不到了。
好,我们又把这个操作的结果命名为[bkg],那么接下来 [bkg][img2] 的意思就很明了了。就是把image2.png再叠加上去,image2.png是在最上层的,如果位置重合的话,他会遮盖 image1.png的水印。
于是,事就这样成了。

1.水印的移动:
这里需要用到时间参数。
比如: overlay=0+t*20:0
这里在x坐标上加上了 +t*10 ,于是水印就会慢慢向右边移动。

2.特定时间显示水印:
这次不仅要用到时间参数,还要用上条件语句。

if条件语句的基本结构就是

再来看看计算表达式。
这里用到了表达式 gte(x,y) 。如果x大于等于y则表达式的值为1,反之为0。
所以 if(gte(t,2),10,NAN) 的意思就是,当时间大于等于2秒时,水印x位置为10,反之不显示水印。(或者你也可以用 lte 来判断“小于或等于”)
要了解所有表达式的话,可以去啃一下ffmpeg官方文档的 Expression Evaluation 部分。

参考:
ffmpeg 基本用法大全
ffmpeg Documentation

FFmpeg 命令行工具ffmpeg

参考技术A 注:先cd到文件所在地文件夹也是可以的,直接使用文件名

1.列出ffmpeg支持的所有格式:

2.剪切一段媒体文件,可以使音频或者视频文件:

3.将一个媒体文件切割成多个媒体文件:

4.提取一个视频文件中的音频文件:

5.提取一个视频文件中的视频文件:

6.从MP4文件中抽取视频流导出为裸H264数据:

7.使用AAC音频数据和H264视频数据生成MP4文件:

注意:使用上面生成的aac和h264文件生成新的mp4文件,视频播放速度会变快,暂时不知道怎么解决,终端的警告:

8.对音频文件的编码格式做转换:

9_1.从WAV音频文件中导出PCM裸数据:

9_2.PCM数据转WAV:

9_3.PCM数据转MP3:

10.重新编码视频文件,复制音频流,同时封装到MP4格式的文件中:

11.将一个MP4格式的视频转换成gif格式的动图:

12.将一个视频的画面部分生成图片,比如要分析一个视频里面的每一帧都是什么内容的时候:

13.使用一组图片生成一个gif:

14.使用音量效果器,改变一个音频媒体文件中的音量:

15.淡入效果器的使用:

16:淡出效果器的使用:

17:混音(将多路声音进行合并)

18:对声音进行变速但不变调效果器的使用:

19_1:为视频添加水印:

19_2:去掉视频水印:

20:视频提亮效果器的使用:

21:为视频增加对比度效果:

22:视频旋转效果器的使用:

23:视频裁剪效果器的使用:

24:将一张RGBA格式表示的数据转换成JPEG格式图片:

25:将一张YUV格式表示的数据转换成JPEG格式图片:

26:将一段视频推送到流媒体服务器上:

27:将流媒体服务器上的流dump到本地:

28:将两个音频文件以两路流到形式封装到一个文件中,比如在k歌的应用场景中,原唱伴唱实时切换的场景下,可以使用一个文件包含两路流,一路是伴奏流,一路是原唱流:

29:将输入的视频的分辨率改成960*540

以上是关于FFmpeg命令行语法之-filter_complex (Android环境)的主要内容,如果未能解决你的问题,请参考以下文章

音视频处理 ffmpeg初级开发 命令行工具-实用命令

Android NDK开发之FFmpeg视频添加水印

FFmpeg转换器分析-基础篇

FFmpeg 命令行工具ffmpeg

FFmpeg命令行使用

命令行操作音视频降噪(ffmpeg+sox)