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

说明:

  1. 相同的Filter线性链之间用逗号分隔
  2. 不同的Filter线性链之间用分号分隔
  3. 方括号[]括起来的部分是标签
  4. 上面的命令行,图片换成视频也可以正常转换,比如 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的工作流程

  1. ffmpeg读取输入源文件
  2. 将音视频包Demuxer(解封装),调用libavformat中的接口即可
  3. Decoder(解码)每一帧音视频数据,成为YVU或者PCM这样的数据,通过libavcodec中的接口即可
  4. 转换参数
  5. Encoder(编码)对应数据,依然通过libavcodec中的接口来实现
  6. 然后通过libavformat中的接口进行Muxer(封装)
  7. 输出到目标,文件或数据流

可以通过下面的命令查看默认支持格式

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个字段:

  1. 表示这个编码器是视频、音频还是字幕;
  2. 表示帧级别的多线程支持;
  3. 表示分片级别的多线程支持;
  4. 表示为试验版本;
  5. draw_horiz_band模式支持;这是一个数据结构;
  6. 直接渲染模式支持;

查看支持哪些滤镜

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 基本组成和入门示例的更多相关文章

  1. 音视频开发之H.264 入门知识

    大家如果有做过音视频相关的项目,那么肯定对 H.264 相关的概念了解的比较通透,这里我为什么还要写这样一篇文章呢?一来是为了对知识的总结,二来是为了给刚入门音视频的同学一个参考. 基础概念 H.26 ...

  2. [WCF编程]1.WCF入门示例

    一.WCF是什么? Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,整合了原有的windows通讯的 .net Remotin ...

  3. Maven入门示例(3):自动部署至外部Tomcat

    Maven入门示例(3):自动部署至外部Tomcat 博客分类:  maven 2012原创   Maven入门示例(3):自动部署至外部Tomcat 上一篇,介绍了如何创建Maven项目以及如何在内 ...

  4. 1.【转】spring MVC入门示例(hello world demo)

    1. Spring MVC介绍 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于 ...

  5. 【java开发系列】—— spring简单入门示例

    1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...

  6. Spring MVC 入门示例讲解

    在本例中,我们将使用Spring MVC框架构建一个入门级web应用程序.Spring MVC 是Spring框架最重要的的模块之一.它以强大的Spring IoC容器为基础,并充分利用容器的特性来简 ...

  7. Couchbase之个人描述及入门示例

    本文不打算抄袭官方或者引用他人对Couchbase的各种描述,仅仅是自己对它的一点理解(错误之处,敬请指出),并附上一个入门示例. ASP.NET Web项目(其他web开发平台也一样)应用规模小的时 ...

  8. Velocity魔法堂系列一:入门示例

    一.前言 Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本处理能力.而且Velocity被移植到不 ...

  9. OUYA游戏开发核心技术剖析OUYA游戏入门示例——StarterKit

    第1章  OUYA游戏入门示例——StarterKit StarterKit是一个多场景的游戏示例,也是OUYA官方推荐给入门开发者分析的第一个完整游戏示例.本章会对StarterKit做详细介绍,包 ...

随机推荐

  1. Tippy.js - 免费开源且高度可定制的气泡提示独立组件

    推荐一个非常优秀的 web 气泡提示独立UI组件. 介绍 Tippy.js 是一款用于Web的完整工具提示,弹出菜单,下拉菜单和菜单解决方案.适用于鼠标,键盘和触摸输入. 特点 超轻量的纯 javas ...

  2. SDUST数据结构 - chap4 串

    函数题: 6-1 查找子串: 裁判测试程序样例: #include <stdio.h> #define MAXS 30 char *search(char *s, char *t); vo ...

  3. Python设计模式面向对象编程

    前言   本篇文章是基于极客时间王争的<设计模式之美>做的总结和自己的理解.  说到面向对象编程,作为一个合格的Pythoner,可以说信手拈来.毕竟在Python里"万物都是对 ...

  4. 别再问我们用什么画图的了!问就是excalidraw

    每次发 https://github.com/tal-tech/go-zero 相关文章时,都会有读者问我们用什么画图的. 这图什么工具画的呀?好看! 这个手绘风格真好看,用啥工具画的呀? 可不可以介 ...

  5. Android事件分发机制四:学了事件分发有什么用?

    " 学了事件分发,影响我CV大法吗?" " 影响我陪女朋友的时间" " ..... " 前言 Android事件分发机制已经来到第四篇了,在 ...

  6. C++ 中assert断言函数的基本用法

    在我们的实际开发过程之中,常常会出现一些隐藏得很深的BUG,或者是一些概率性发生的BUG,通常这些BUG在我们调试的过程中不会出现很明显的问题,但是如果我们将其发布,在用户的各种运行环境下,这些程序可 ...

  7. 免安装的tomcat转服务

    一:确保tomcat 在点击bin\startup 文件可以正常启动访问: 二:本机安装有JDK: 三:本机环境变量配置:JAVA_HOME:C:\Java\jdk1.7.0_17; 四:本机Tomc ...

  8. Linux下pcstat安装踩坑教程

    首先安装golang 1.进入官方链接下载对应自己系统版本的Golang安装包:https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz root@ub ...

  9. JavaWeb——B/S,C/S结构,HTTP协议

    B/S: 开发基于B/S结构项目:目前主要采用三种服务器端语言:JSP,PHP,ASP.NET. 这三种语言构成三种常用应用开发组合:JSP+Oracle组合.PHP+MySQL体系.以及ASP.NE ...

  10. java 将内容写入文件 txt

    @Test //将内容写入文件 public void xieru() throws Exception{ FileWriter fileWriter=new FileWriter("d:\ ...