FFmpeg是什么
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。
FFmpeg有非常强大的功能包括:视频采集、视频格式转化、视频截图、视频添加水印、视频切片(m3u8、ts)、视频录制、视频推流、更改音视频参数(编码方式、分辨率、码率、比特率等)功能,等等..
整个过程基本可以说成:解复用 => 解码 => 编码 => 复用器。
解协议(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),此外还包含了一些相关的信息。
brew install ffmpeg
ffmpeg[全局参数][输入文件参数]-i[输入文件][输出文件参数][输出文件]
主要参数
-i 设定输入流
-f 设定输出格式
音频参数
-ar 设定采样率
-ac 设定声音的Channel数
-acodec 设定声音编解码器,未设定则使用与输入流相同的编解码器
-an 不处理音频
视频参数
-b 设定视频流量,默认为200Kbit/s
-r 设定帧速率,默认为25
-s 设定画面的宽与高
-aspect 设定画面的比例
-vn 不处理视频
-vcodec 设定视频编解码器,未设定则使用与输入流相同的编解码器
1.查看视频信息
ffmpeg -i input.mp4
2.分辨率转换
ffmpeg -i input.mp4 -vf scale=480:-1 output.mp4
3.帧率转换
ffmpeg -i input.mp4 -r 5 output.mp4
4.提取视频/音频
//提取视频
ffmpeg -i input.mp4 -an output.mp4
//提取音频
ffmpeg -i input.mp4 -vn output.mp3
5.可以获取当前视频所有帧包的时间和大小信息
ffprobe -show_packets input.mp4
我们还可以通过ffmpeg命令给视频添加滤镜,添加水印,添加字幕,或者对视频进行截取,压缩,推流等待操作,这里就不做一一介绍,有兴趣对读者可以深入去查看相关资料。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。