[视频] FFMpeg 基本组成和入门示例
FFmpeg基本组成
AVFormat
封装了大多数媒体格式:如MP4、FLV等文件格式,RTMP、RTSP、MMS、HLS等网络协议。AVCodec
支持常见编解码格式:MPEG4、AAC等。支持第三方:- H.263(AVC)->需x264编码器;
- H265(HEVC)->需x265编码器;
- MP3(mp3lame)->需libmp3lame编码器;
AVFilter
通用滤镜处理框架。可以有多个输入和多个输出。

ffmpeg -i 1.jpg -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip];[main][flip] overlay=0:H/2" 2.jpg
说明:
- 相同的Filter线性链之间用逗号分隔
- 不同的Filter线性链之间用分号分隔
- 方括号[]括起来的部分是标签
- 上面的命令行,图片换成视频也可以正常转换,比如 1.jpg 改为 1.mp4, 2.jpg 改为 2.mp4
AVDevice
AVUtil
swresample
音频转换计算模块swscale
视频图像转换计算模块
编解码工具 ffmpeg.exe
ffmpeg -i 1.mp4 2.avi
- -i 参数将1.mp4作为输入源
- mp4和avi是两种文件封装格式,但不是后缀名就可以决定的。
ffmpeg -i 1.mp4 -f avi 2.dat
- -f进行约束,指定了输出文件的容器格式,其过程和上一个命令一样,仅仅输出的文件名不同。
ffmpeg.exe的工作流程
- ffmpeg读取输入源文件
- 将音视频包Demuxer(解封装),调用libavformat中的接口即可
- Decoder(解码)每一帧音视频数据,成为YVU或者PCM这样的数据,通过libavcodec中的接口即可
- 转换参数
- Encoder(编码)对应数据,依然通过libavcodec中的接口来实现
- 然后通过libavformat中的接口进行Muxer(封装)
- 输出到目标,文件或数据流
可以通过下面的命令查看默认支持格式
ffmpeg -formats
查看支持的编解码情况
ffmpeg -codecs
ffmpeg -encoders
ffmpeg -decoders
Decoders:
V..... = Video
A..... = Audio
S..... = Subtitle
.F.... = Frame-level multithreading
..S... = Slice-level multithreading
...X.. = Codec is experimental
....B. = Supports draw_horiz_band
.....D = Supports direct rendering method 1
输出信息的第一列包含6个字段:
- 表示这个编码器是视频、音频还是字幕;
- 表示帧级别的多线程支持;
- 表示分片级别的多线程支持;
- 表示为试验版本;
- draw_horiz_band模式支持;这是一个数据结构;
- 直接渲染模式支持;
查看支持哪些滤镜
ffmpeg -filters
查看flv解封装器的参数支持
ffmpeg -h demuxer=flv
查看H.264的编码器的参数支持
ffmpeg -h encoder=h264
查看过滤器的参数支持
ffmpeg -h filter=colorkey
播放器 ffplay.exe
这个一般我们用来做测试工具
多媒体分析器 ffprobe
ffprobe -show_streams 1.mp4
附加一个小例子
ffmpeg -i 2.avi -vcodec mpeg4 -b:v 200k -r 15 -an 15.mp4
说明:
- 参数b为音频和视频的码率,可以认为是两者加起来的码率。默认200kbit/s
可以工具b:v设置视频码率,b:a设置音频码率 - 参数r为视频帧率fps
- 参数an,转码后的文件不包括音频
改变分辨率
ffmpeg -i 1.mp4 -vf scale=320:240 2.mp4
[视频] FFMpeg 基本组成和入门示例的更多相关文章
- 音视频开发之H.264 入门知识
大家如果有做过音视频相关的项目,那么肯定对 H.264 相关的概念了解的比较通透,这里我为什么还要写这样一篇文章呢?一来是为了对知识的总结,二来是为了给刚入门音视频的同学一个参考. 基础概念 H.26 ...
- [WCF编程]1.WCF入门示例
一.WCF是什么? Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,整合了原有的windows通讯的 .net Remotin ...
- Maven入门示例(3):自动部署至外部Tomcat
Maven入门示例(3):自动部署至外部Tomcat 博客分类: maven 2012原创 Maven入门示例(3):自动部署至外部Tomcat 上一篇,介绍了如何创建Maven项目以及如何在内 ...
- 1.【转】spring MVC入门示例(hello world demo)
1. Spring MVC介绍 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于 ...
- 【java开发系列】—— spring简单入门示例
1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...
- Spring MVC 入门示例讲解
在本例中,我们将使用Spring MVC框架构建一个入门级web应用程序.Spring MVC 是Spring框架最重要的的模块之一.它以强大的Spring IoC容器为基础,并充分利用容器的特性来简 ...
- Couchbase之个人描述及入门示例
本文不打算抄袭官方或者引用他人对Couchbase的各种描述,仅仅是自己对它的一点理解(错误之处,敬请指出),并附上一个入门示例. ASP.NET Web项目(其他web开发平台也一样)应用规模小的时 ...
- Velocity魔法堂系列一:入门示例
一.前言 Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本处理能力.而且Velocity被移植到不 ...
- OUYA游戏开发核心技术剖析OUYA游戏入门示例——StarterKit
第1章 OUYA游戏入门示例——StarterKit StarterKit是一个多场景的游戏示例,也是OUYA官方推荐给入门开发者分析的第一个完整游戏示例.本章会对StarterKit做详细介绍,包 ...
随机推荐
- Redis 实战 —— 01. Redis 数据结构简介
一些数据库和缓存服务器的特性和功能 P4 名称 类型 数据存储选项 查询类型 附加功能 Redis 使用内存存储(in-memory)的非关系数据库 字符串.列表.哈希表.集合.有序集合 每种数据类型 ...
- JavaScript小记
JavaScript小记 1. 简介 1. 语言描述 JavaScript 是一门跨平台.面向对象的弱类型动态脚本编程语言 JavaScript 是一门基于原型.函数先行的语言 JavaScript ...
- Flask源码流程分析(一)
Flask源码流程分析: 1.项目启动: 1.实例化Flask对象 1. 重要的加载项: * url_rule_class = Rule * url_map_class = Map * session ...
- ETCD数据迁移
ETCD数据迁移 本文阅读对象为想要将Rainbond平台rbd-etcd切换至外部etcd的相关人员. 在k8s master节点创建secret 本文中将要切换的ETCD为根据Rainbond官方 ...
- 1.Spring的基本应用
1.1概述 1.1.1 Spring是什么 Spring一个轻量级的框架,以IOC(控制反转)和AOP(面向切面编程)为内核,Spring在表现层提供了Spring MVC的框架整和功能,在业务逻辑层 ...
- Java int和integer有什么区别 (mybatis踩坑)
不要在实体类中使用int 我们都知道Integer是int的包装类,而int是基本数据类型.所以Integer类型的变量会初始化为null,int类型则会被初始化为0 . 所以在下面的动态拼接例子中: ...
- (转载)微软数据挖掘算法:Microsoft 时序算法(5)
前言 本篇文章同样是继续微软系列挖掘算法总结,前几篇主要是基于状态离散值或连续值进行推测和预测,所用的算法主要是三种:Microsoft决策树分析算法.Microsoft聚类分析算法.Microsof ...
- Mysql 不能使用逗号的情况
不存在逗号的情况: 联合查询: 1.UNION SELECT * FROM ((SELECT 1)a JOIN (SELECT 2)b JOIN (SELECT 3)c JOIN (SELECT 4) ...
- EasyExcel导出小结:动态标题、标题格式、相同值合并
1. 实列相关依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel& ...
- 码一次前后台post请求交互,以及接口的使用,json数据格式的传递
近几天,公司疯狂加班,然后补做了很多功能,很多东西虽然是自己熟悉的,但是却不会上手,动手实践能力仍需加强,对此对一些代码记录,留待学习和总结. 简单描述功能 具体实现 前台JSP.JS.后台actio ...