1.学前知识
1.1视频码率值
码率公式: 码率(kbps)=文件大度小(KB)*8/时间(秒)
所以码率和视频文件大小成正比的,不过码率超过一定值后,人眼是看不出效果的.
接下来,我们便先来学习ffmpeg命令使用
2.ffmpeg常用命令使用
ffmpeg命令- 用于转码的应用程序, 也可以从url/现场音频/视频源抓取输入源
参考:http://ffmpeg.org/ffmpeg.html
常用参数使用
主要参数
视频参数
音频参数
示例命令如下所示:
ffmpeg –h //打开帮助
ffmpeg -i input.avi -b:v 640k output.ts //转换为ts视频文件
ffmpeg -i test.mp4 -vn music.aac //提取出音频文件
ffmpeg -i test.mp4 -vn music.aac //提取出音频文件
ffmpeg -i input.mp4 -vcodec copy -an output.mp4 //输出的视频取消掉音频流
//-i input.avi:表示输入文件为input.avi
//-b:v 640k:设置输出的视频文件码率值
// output.ts:生成的文件名称
ffmpeg -i C.mkv out1.mkv -c:s dvdsub -an out2.mkv
//-an:取消output.ts视频文件的音频流
./ffmpeg -i input.mp4 -i iQIYI_logo.png -filter_complex overlay output.mp4
//将logo贴在左上角
./ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w:H-h output.mp4
//贴在右下角
./ffmpeg -i input.mp4 -i logo.png -filter_complex overlay0:H-h output.mp4
//贴在左下角, overlay W-w:0 贴在右上角
ffmpeg -i input.mp4 -vf delogo=0:0:220:90:100:1 output.mp4
//添加过滤器,位置位于[0,0],w=220,h=90,厚度为100(厚度越大,越模糊).1:表示有一个绿色的矩形,设置为0就表示没有
ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
// -r :设置帧数为1, -q:v:设置jpeg图片质量为高质量(2),所以每隔一秒,存一张图片下来
ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
// - ss :设置开始时间,-t:设置time时间长度, -f 设定输出格式 , 所以会从input.mp4的第20s时间开始,往下10s,每隔1s就抓一帧,总共会抓10帧。
ffmpeg -i input.mkv -y -f image2 -ss 10 -r 1 -t 1 –s 350x220 a.jpg
//截取一张第10秒的352x220尺寸大小的,格式为jpg的a.jpg图片
3.ffplay常用命令使用
ffplay命令- FFplay是一个非常简单和可移植的媒体播放器,使用FFmpeg库和SDL库。它主要用作各种FFmpeg API的测试平台
参考: http://ffmpeg.org/ffplay.html
最简单的播放命令: ffplay input.avi
播放的时候,支持的快捷键有:
4.ffprobe常用命令使用
ffprobe命令- ffprobe用来查看多媒体文件的信息
常用命令如下所示:
ffprobe -show_packets input.mp4
//获取文件信息并显示文件中每个帧的包信息(包含audio和video包),如下图所示:
ffprobe -show_packets -show_data input.mp4
//获取文件信息并显示文件中每个帧的包信息以及包里的具体data信息
ffprobe -show_format input.mkv
//获取文件信息以及格式信息,如下图所示:
ffprobe -show_streams input.mkv
//获取视频文件中流的具体信息,比如音频采样率、视频尺寸、帧率等
5.视频解码步骤
首先将读取视频封装,然后通过不同的封装格式读取出视频码流(比如:h.264、mpeg4等),然后再通过视频码流解码出yuv
比如mkv视频: mkv->h.264->yuv
下章学习: 移植到QT使用