FFmpeg滤镜使用

Posted dreaming-in-gottingen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FFmpeg滤镜使用相关的知识,希望对你有一定的参考价值。

  滤镜(filter)详细介绍参考官方文档

  常用的滤镜功能,像图像加水印/字幕、去logo、图形旋转缩放等,但滤镜不仅仅包括视频部分,还包括音频处理的,像变声变调、声场控制(重低音/留声机/摇滚等效果)。

  下面介绍滤镜类中常用命令,该博文长期更新。

Key1. 去除水印

  该需求实现分为两步:step1.确认水印位置和效果;step2.位置和效果反复调整合适了,再转码。

  step1. ffplay.exe -i Tuesday00.mp4 -vf delogo=x=30:y=40:w=350:h=60:show=1,scale=640x480

     -vf指视频的滤镜处理,后面跟参数(水印区域:x/y/w/h,是否圈住区域:show,缩放处理:scale),注意各参数间用"逗号"分隔。

        如果不想缩放处理,但是视频w/h太大了,以至于超出了显示器显示区域的范围,可以控制播放窗口的大小。使用-x或-y指定播放窗口的宽或高。

  step2. ffmpeg.exe -i Tuesday00.mp4 -vf delogo=x=30:y=40:w=350:h=60:show=0,scale=640x480 -c:v libx264 -c:a copy output.mp4

        尝试了多次,确定好区域后,可以进行转码了。注意一点,show要关掉(show=0),video转码参数(-c:v libx264)可以不带,系统默认使用x264编码。

Key2. 去除某个时间段的水印

  在上面Key2.step2命令中增加时间控制信息: -ss 5 -t 10(从第5秒开始,持续10s,共10秒钟长的视频)

  注意:“-ss 5 -t 10”参数,对于ffmpeg来说,放在input_file前和后貌似没什么差别,都是转成10秒钟长度的视频文件。

  另外一点增强型需求:假如有多个时间段需要去除水印,例如,第0-15秒之间某个区域需要去除,还有20-30秒之间的另外一个区域水印去除。

  这个需求的方法还没找到,有知道的同学们麻烦告知一下。目前我使用了比较笨的方法,就是多次转码。

Key3.  多个区域去水印

  在Key1中的step1命令中再增加一个delogo参数,即命令为:ffplay.exe -i Tuesday00.mp4 -vf delogo=x=30:y=40:w=350:h=60:show=1,delogo=x=230:y=240:w=350:h=60:show=1 -y 300

  确定好位置后,再用ffmpeg转码。

Key4.  添加文字水印

  与Key1类型,先用ffplay确认位置和效果,再用ffmpeg进行滤镜+转码。

       step1. ffplay.exe -i Tuesday00.mp4 -vf "drawtext=fontfile=msyh.ttc:text=‘Hello,world‘:x=30:y=60:fontsize=120:fontcolor=yellow"

       注意,本地的字体文件(fontfile=msyh.ttc)可以不指定,找不到了用系统使用默认的。

  step2. ffmpeg.exe -i Tuesday00.mp4 -vf "drawtext=fontfile=msyh.ttc:text=‘Hello,world‘:x=30:y=60:fontsize=120:fontcolor=yellow" output.mp4

Key5. 给视频添加封面

  其实是将指定图片作为视频的前几帧(只指定为第一帧时,有的平台可能不使用首帧作为缩略图则达不到效果)。核心思想是,图片转为含若干帧的视频流,再跟主视频合并。

  step1. ffmpeg.exe -r 25 -loop 1 -i img.jpg -vcodec libx264 -s 720x1280 -frames 25 -r 25 img_25f.mp4

        其中,参数"-r 25 -loop 1"代表以25fps速度反复读取输入文件。参数"-frames 25"指只编码25帧,"-r 25"指定输出文件帧率为25fps。那么命令结果是,生成了1秒钟的视频文件(用工具分析文件,会发现:第一帧的关键帧size较大,后面的B/P帧非常小,只有10+Bytes大小)。

  step2. ffmpeg -f concat -i concat.txt -c copy output.mp4

        其中,参数"-f concat"指视频合并;参数"-i concat.txt"指定输入文件列表,如下格式:

file input1.mp4

file input2.mp4

Key6. 将视频放在黑板上

  另外一种说法是,将视频放在幕布上。

  ffmpeg -i input.mp4 -vf pad=720:1280:100:200:black output.mp4

  其中,参数"pad=720:1280:100:200"指定了幕布的宽/高以及视频(左上角)放置在该幕布中的位置,参数"black"指定了幕布的颜色。

  另外一点需注意,视频不能超出了幕布区域,否则出错。

以上是关于FFmpeg滤镜使用的主要内容,如果未能解决你的问题,请参考以下文章

如何在ffmpeg中使用滤镜技术

如何在ffmpeg中使用滤镜技术

视频特效-使用ffmpeg滤镜

视频特效-使用ffmpeg滤镜

视频特效-使用ffmpeg滤镜

FFmpeg滤镜使用指南