FFMpeg笔记(六) 滤镜命名规则及使用libavfilter对视频尺寸进行裁切
在ffmpeg框架中,滤镜(filter)功能通过libavfilter库实现。 一个filter可以同时有多个输入和输出。以图为例:

图中的一系列操作共使用了四个filter,分别是
splite:将输入的流进行分裂复制,分两路输出。
crop:根据给定的参数,对视频进行裁剪
vflip:根据给定参数,对视频进行翻转等操作
overlay:将一路输入覆盖到另一路之上,合并输出为一路视频
整个过程的命令为下图:
ffmpeg -i input.mp4 -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" output.mp4
最终实现的效果是,视频的上半部分水平翻转,下半部分被覆盖,输出一个水平对称的视频。
命令行分析:splite有两路输出,分别被标签标记为[main]和[tmp],在命令中,可以用这种形式来标记输入输出,在后面命令中,对被标记的输出进行引用。其中一路输出[tmp]作为输入传递给crop。crop的参数格式为w:h:x:y,其中w、h为输出视频的宽和高,x、y标记输入视频中的某点,将该点作为基准点,向右下进行裁剪得到输出视频。示例中crop的参数为iw:ih/2:0:0,iw、ih分别为输入流视频的宽和高,因此该参数表明,以原视频左上角为基准点,宽度不变,裁剪原视频的上半部分。从crop得到的输出被传递给vflip,vflip对输入做水平翻转处理,得到输出[flip]。然后将splite的另一路输出[main]和[flip]一起传递给overlay,其中第一个输入[main]为主流,第二个输入[flip]是副流,overlay根据参数指定的规则将副流覆盖于主流之上。该命令中overlay的参数为0:H/2,即[flip]左上角对齐[mian]的坐标为(0,H/2)的点进行覆盖,H为[main]的高。
以上为ffmpeg滤镜的基本使用方式。其中有一些命令的格式需要注意:
1、命令中同一个滤镜链中的滤镜之间通过逗号分隔开,如上例中[crop]和[vflip]处于同一个滤镜链,而知以逗号分隔开。
2、不同的滤镜链之间以分号隔开,如上例中[crop]和[vflip]组成的滤镜链与[split]、[overlay]之间。
3、滤镜链的输入输出通过方括号标记命名,若示例中[split]滤镜产生了两路输出,分别被标记为[main]和[tmp]
4、有的滤镜可以指定参数列表,通过在滤镜名后面接一个等号,然后等号后指定需要的参数即可,不同的参数之间需要使用冒号隔开。如示例中[crop]的参数iw:ih/2:0:0。
如果仅仅需要尺寸裁切,那么可以单独使用crop命令:
ffmpeg -i testInput.mp4 "crop=cropWidth:cropHeight:cropX:cropY" testOutput.mp4
其中cropWidth, cropHeight为视频裁切后的长宽,cropX, cropY为视频裁切的左上角。
Tips:
1. 工程中如果需要对视频进行尺寸裁切,那么需要先将源视频解码,解码后的AVFrame作为avfilter的输入,crop字符串作为filter_description,具体实现可以参考FFmpeg源码中的FFmpeg\doc\examples\filtering_video.c文件;
2. 写代码时遇到问题,调试不出来时,可以搭建一下FFmpeg的调试环境,用命令行启动,调试到FFmpeg内部查看变量的值与自己写的代码有何区别。Mac下搭建调试环境:https://www.jianshu.com/p/226c19aa6e42。
部分内容转载自:https://blog.csdn.net/joee33/article/details/51946712
FFMpeg笔记(六) 滤镜命名规则及使用libavfilter对视频尺寸进行裁切的更多相关文章
- FFMpeg笔记(五) 录制小视频时几个问题解决
1. YUV数据在使用avfilter scale时在特定的分辨率下UV分量不对 由于是小视频,那么分辨率不需要太高,但是有的视频源是1080p,甚至有的是4K的,所以对视频源进行scale非常有必要 ...
- 每天进步一点点------Allegro PCB命名规则
PCB命名规则-allegro 一.焊盘命名规则 1. 贴片矩形焊盘 命名规则:SMD+长(L)+宽(W)(mil) 举例:SMD90X60 2. 贴片圆焊盘 命名规则:SMDC+焊盘直径(D) ...
- [ExtJS5学习笔记]第六节 Extjs的类系统Class System命名规则及定义和调试
本文地址: http://blog.csdn.net/sushengmiyan/article/details/38479079 本文作者:sushengmiyan ----------------- ...
- thinkphp学习笔记1—目录结构和命名规则
原文:thinkphp学习笔记1-目录结构和命名规则 最近开始学习thinkphp,在下不才,很多的问题看不明白所以想拿出来,恕我大胆发在首页上,希望看到的人能为我答疑解惑,这样大家有个互动,学起来快 ...
- css笔记1: html页面的CSS、DIV命名规则
原地址:http://www.cnblogs.com/rising-fay/archive/2013/02/25/2932592.html CSS命名规则 头:header 内容:content/co ...
- Java学习笔记(基本数据类型和变量命名规则)
java基本数据类型 变量 1.变量就是可变的量. 2.常量就是不可变的量. 3.字面量:Java的变量和常量中存放的具体的数据成为字面量. 变量 命名规则: (1)首字母是英文字母.$或下划线,由字 ...
- CSS学习笔记(7)--html页面的CSS、DIV命名规则
html页面的CSS.DIV命名规则 CSS命名规则 头:header 内容:content/containe 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整 ...
- Java基础笔记(四)——命名规则、数据类型
标识符即Java程序中需要自定义的名称,如变量名.方法名.类名.包名.工程名等. 标识符的命名规则: 1.可由字母.数字.下划线(_)和美元符($)组成,不能以数字开头. 2.严格区分大小写. 3.不 ...
- linux初级学习笔记二:linux操作系统及常用命令,文件的创建与删除和命名规则,命令行展开以及linux中部分目录的作用!(视频序号:02_3)
本节学习的命令:tree,mkdir,rmdir,touch,stat,rm 本节学习的技能:Linux中主要的目录作用以及特殊的目录文件: 文件的命名规则,命令行展开: 文件的创建与删除: Linu ...
随机推荐
- git 学习汇总
生成gitignore 文件: https://gitignore.io/ git 版本回退 git reset --hard HEAD^ 上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然 ...
- Lombok快速上手(安装、使用与注解参数)
目录 Lombok插件安装与使用说明 常见参数 lombok的依赖于安装 依赖管理 IDEA插件的安装 @Data小例子 扩展@ToString 构造器注解扩展 @Log及其他日志注解 资料链接 Lo ...
- 【Ansible 文档】【译文】入门教程
http://docs.ansible.com/ansible/latest/intro_getting_started.html Foreword 前言 到这里,你应该已经安装了Ansible,是时 ...
- 如何弹出QQ临时对话框实现不添加好友在线交谈效果
如何不添加好友弹出QQ临时对话框实现在线交谈效果,这样的一个需求,我们真的是太需要了,实现起来也很简单,一行代码即可搞定,需要的朋友可以参考下 其实这个很简单,在img我们加入一个a标签,然后 < ...
- Windows10 + eclipse + JDK1.8 + Apache Maven 3.6.0 + dl4j深度学习环境配置
Windows10 + eclipse + JDK1.8 + Apache Maven 3.6.0 + dl4j深度学习环境配置 JDK下载安装请自行,并设置好环境变量1 查看Java版本C:\Use ...
- Java中的枚举使用详解
转载至:http://www.cnblogs.com/linjiqin/archive/2011/02/11/1951632.html package com.ljq.test; /** * 枚举用法 ...
- Android 将系统的back键模拟成为home键的功能
@Override public void onBackPressed() { Intent intent = new Intent(Intent.ACTION_MAIN); intent.setFl ...
- P1821 [USACO07FEB]银牛派对Silver Cow Party
题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the b ...
- jqgrid 使用自带的行编辑
上篇jqgrid 单击行启用行编辑,切换行保存原编辑行 本篇,说说使用jqgrid自带的行编辑 1)设置需要编辑的列 editable: true colModel: [ { label: '字段编 ...
- php实现远程网络文件下载到服务器指定目录(方法二)
<?php // maximum execution time in seconds set_time_limit (24 * 60 * 60); //if (!isset($_POST['su ...