前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android FFmpeg?简介(十三)

Android FFmpeg?简介(十三)

原创
作者头像
PengJie
修改2021-01-14 20:07:23
1.7K0
修改2021-01-14 20:07:23
举报
文章被收录于专栏:音视频修炼路音视频修炼路

FFmpeg是什么

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。

FFmpeg 功能

FFmpeg有非常强大的功能包括:视频采集、视频格式转化、视频截图、视频添加水印、视频切片(m3u8、ts)、视频录制、视频推流、更改音视频参数(编码方式、分辨率、码率、比特率等)功能,等等..

FFmpeg 的原理

整个过程基本可以说成:解复用 => 解码 => 编码 => 复用器。

FFmpeg主要构成

  • ffmpeg——一个命令行工具,用来对视频文件转换格式,也支持对电视卡即时编码
  • ffserver——一个HTTP多媒体即时广播流服务器,支持时光平移
  • ffplay——一个简单的播放器,基于SDL与FFmpeg库
  • libavcodec——包含全部FFmpeg音频/视频编解码库
  • libavformat——包含demuxers和muxer库
  • libavutil——包含一些工具库
  • libpostproc——对于视频做前处理的库
  • libswscale——对于视频作缩放的库

FFmpeg的关键结构体,按功能分类

解协议(http, rtsp, rtmp, mms)

AVIOContext,URLProtocol,URLContext主要存储视音频使用的协议的类型以及状态。URLProtocol存储输入视音频使用的封装格式。每种协议都对应一个URLProtocol结构。

解封装(flv, avi, rmvb, mp4, …)

AVFormatContext: Format I/O context, 主要存储视音频封装格式中包含的信息;

AVInputFormat存储输入视音频使用的封装格式。每种视音频封装格式都对应一个AVInputFormat 结构。

解码(h264, mpeg2, aac, mp3, …)

AVStream存储一个视频/音频流的相关数据;

每个AVStream对应一个AVCodecContext,存储该视频/音频流使用解码方式的相关数据;

每个AVCodecContext中对应一个AVCodec,包含该视频/音频对应的解码器。每种解码器都对应一个AVCodec结构。

存数据

视频的话,每个结构一般是存一帧;音频可能有好几帧

解码前数据:AVPacket 存储压缩编码数据相关信息的结构体

解码后数据:AVFrame 位于frame.h,一般用于存储原始数据(即非压缩数据,例如对视频来说是YUV,RGB,对音频来说是PCM),此外还包含了一些相关的信息。

Mac 安装:

代码语言:javascript
复制
brew install ffmpeg

命令行语法:

代码语言:javascript
复制
ffmpeg[全局参数][输入文件参数]-i[输入文件][输出文件参数][输出文件]

FFmpeg常用参数

主要参数

-i 设定输入流

-f 设定输出格式

音频参数

-ar 设定采样率

-ac 设定声音的Channel数

-acodec 设定声音编解码器,未设定则使用与输入流相同的编解码器

-an 不处理音频

视频参数

-b 设定视频流量,默认为200Kbit/s

-r 设定帧速率,默认为25

-s 设定画面的宽与高

-aspect 设定画面的比例

-vn 不处理视频

-vcodec 设定视频编解码器,未设定则使用与输入流相同的编解码器

命令使用例子:

1.查看视频信息

代码语言:javascript
复制
ffmpeg -i input.mp4

2.分辨率转换

代码语言:javascript
复制
ffmpeg -i input.mp4 -vf scale=480:-1 output.mp4

3.帧率转换

代码语言:javascript
复制
ffmpeg -i input.mp4 -r 5 output.mp4

4.提取视频/音频

代码语言:javascript
复制
//提取视频
ffmpeg -i input.mp4 -an output.mp4
//提取音频
ffmpeg -i input.mp4 -vn output.mp3

5.可以获取当前视频所有帧包的时间和大小信息

代码语言:javascript
复制
ffprobe -show_packets input.mp4

我们还可以通过ffmpeg命令给视频添加滤镜,添加水印,添加字幕,或者对视频进行截取,压缩,推流等待操作,这里就不做一一介绍,有兴趣对读者可以深入去查看相关资料。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • FFmpeg 功能
  • FFmpeg 的原理
  • FFmpeg主要构成
  • FFmpeg的关键结构体,按功能分类
  • Mac 安装:
  • 命令行语法:
    • FFmpeg常用参数
      • 命令使用例子:
      相关产品与服务
      对象存储
      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
      http://www.vxiaotou.com