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滤镜实现区域视频增强 及 D3D实现视频播放区的拉大缩小
1.区域视频增强 FFmpeg滤镜功能十分强大,用滤镜可以实现视频的区域增强功能. 用eq滤镜就可以实现亮度.对比度.饱和度等的常用视频增强功能. 推荐两篇写得不错的博文: (1)ffmpeg综合应用 ...
- FFmpeg滤镜代码级分析
http://blog.chinaunix.net/uid-26000296-id-3322071.html 前一篇文章<为FFmpeg添加自定义滤镜>详细讲述了FFmpeg的滤镜添加步骤 ...
- FFmpeg滤镜使用指南
文件夹 1. FFmpeg滤镜文档 2. 演示样例 2.1 缩放 2.2 视频加速 2.3 滤镜图,链和滤镜关系 2.4 多个输入覆盖同一个2x2 网格 2.5 转义字符 2. ...
- FFMpeg 滤镜中英文对照
FFMpeg ver 20160213-git-588e2e3 滤镜中英文对照 2016.02.17 by 1CM T.. = Timeline support 支持时间轴 .S. = Slice t ...
- FFmpeg 滤镜及其效果
原文地址:https://blog.csdn.net/dangxw_/article/details/49001413 代码中使用滤镜参见上一篇博客:http://blog.csdn.net/dang ...
- FFmpeg中overlay滤镜用法-水印及画中画
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10434209.html 1. overlay技术简介 overlay技术又称视频叠加技术 ...
- FFMpeg笔记(六) 滤镜命名规则及使用libavfilter对视频尺寸进行裁切
在ffmpeg框架中,滤镜(filter)功能通过libavfilter库实现. 一个filter可以同时有多个输入和输出.以图为例: 图中的一系列操作共使用了四个filter,分别是 spli ...
- FFMPEG 最简滤镜filter使用实例(实现视频缩放,裁剪,水印等)
FFMPEG官网给出了FFMPEG 滤镜使用的实例,它是将视频中的像素点替换成字符,然后从终端输出.我在该实例的基础上稍微的做了修改,使它能够保存滤镜处理过后的文件.在上代码之前先明白几个概念: Fi ...
- FFmpeg常用命令学习笔记(八)滤镜相关命令
滤镜相关命令 FFmpeg中关于滤镜命令有很多种.比如在视频中加入/删除水印.对视频做反转等等都属于滤镜. FFmpeg滤镜处理流程 解码后的数据帧 ---过滤处理---> 过滤后的数据帧 -- ...
随机推荐
- subDomainsBrute安装(windows系统)
step1: 安装python2.7(省略) step2: 下载subDomainsBrute 地址: https://github.com/lijiejie/subDomainsBrute 下载 ...
- nginx安装步骤
1.下载地址:下载nginx压缩包wget -c https://nginx.org/download/nginx-1.10.1.tar.gz2.配置nginx安装所需的环境yum install g ...
- Spark 模型选择和调参
Spark - ML Tuning 官方文档:https://spark.apache.org/docs/2.2.0/ml-tuning.html 这一章节主要讲述如何通过使用MLlib的工具来调试模 ...
- RT-Thread小知识点收集
- C语言普通写法实现:针对多次同步失败的节能处理机制
程序不美, 不来一一整理了. 以后有时间可以把这个功能封装为一个类的对象来操作.即使不封装为类,至少也该封装为一个独立的函数吧... 关键代码摘要如下: 无线同步信号发射端,每分钟发一次,每次发射的时 ...
- JSON.stringify 的使用
一.作用:这个函数的作用主要是为了序列化对象.就是把原来是对象的类型转换成字符串类型(json格式的String类型). 二.语法:JSON.stringify(value[, replacer][, ...
- Vue 网站首页加载优化
Vue 网站首页加载优化 本篇主要讲解 Vue项目打包后 vendor.js 文件很大 如何对它进行优化 以及开启Vue的压缩 和 nginx gzip 压缩的使用, 其他就是对接口优化等 1. v ...
- springboot利用redis做缓存
首先 配置redis redis: password: 123456 host: 127.0.0.1 port: 6379 #103.249.252.109:10086 expireSeconds: ...
- ansible-playbook模板化(jinja2)
1. ansible-playbook模板化(jinja2)条件与循环 1.1) jinja使用结构图 2. 编写jinja2的循环 2.1) 编写jinja2模板 1 [root@test-1 ...
- 实验 6:OpenDaylight 实验——OpenDaylight 及 Postman 实现流表下发
一.实验目的 熟悉 Postman 的使用:熟悉如何使用 OpenDaylight 通过 Postman 下发流表. 二.实验任务 流表有软超时和硬超时的概念,分别对应流表中的 idle_timeou ...