比特率:描述每秒钟输出多少KB的参数,单位Kbps,8kbps=8Kbits/s=1KB/S,即8kbps是每秒视频占用1KB磁盘空间。同理音频文件也存在比特率。压缩同一个视频,视频编码率越大,文件体积越大,视频画质越好,马赛克越少。MP3的比特率一般为8~320Kbps。
视频大小
ntsc:408P,对应分辨率为720*480,建议码率为1800Kbps
snits:对应分辨率640*480
hd720:720P,对应分辨率为1280*720,建议码率为3500Kbps
hd1080:1080P,对应分辨率为1920*1080,建议码率为8500Kbps
可变码率(VBR):动态比特率编码,指编码器的输出码率可以根据编码器输入源信号的复杂度自适应调整,目前是达到输出质量保持不变。VBR适于存储,不适合流式传输,它能有效利用有限空间。
固定码率(CBR):指编码器输出码率固定,不适合存储,CBR对于复杂内容可能没有足够码率进行编码,从而导致质量下降,同时会在简单内容部分浪费一些码率。
帧数:每秒钟播放的图片数(fps)。高的帧率可以得到更流畅、更逼真的画面。但是帧率很大会浪费图形处理的能力,因为显示器不能以更快的速度更新,则超过刷新率的帧率就浪费掉。同一视频,统一码率情况下,帧数越多,画质越不好。因为每张画面会分担每秒有限的文件体积,如果画面越多,那么每张画面所能表现的内容越有限。一般30fps就基本流畅,50fps就有行云流水感觉,很难区分60fps与100fps区别。
分辨率:画面大小,单位是像素。和编码率的关系:越高的分辨率,需要越高的编码率。因为图像细节多,需要文件体积大。同一码率,画面越大,图像马赛克程度越明显。
采样率:每秒钟对音频信号的采样次数,采样率越高声音还原度越高,声音越自然,单位Hz。一般音频文件采样率44100Hz,即1秒钟采样44100次。低于这个值,声音会有明显损失,高于这个值,人耳难以分辨,同时会增加音频文件所占用的空间。
ffmpeg功能:实现视频采集、视频格式转化、视频截图、视频添加水印、视频切片、视频录制、视频推流、更改音视频参数等
ffmpeg语法
ffmpeg -I [输入文件] … [输出文件]
对应参数
-h:帮助信息
-i filename:输入文件
-t time:设置处理持续时间
-ss time:设置其实时间
-b:v bitrate:设置视频码率
-b:a bitrate:设置音频码率
-r fps:设置帧率
-s wxh:设置帧大小,格式wxh
-vcodec:设置视频编码器
-acodec:设置音频编码器
-ar freq:设置音频采样率
-ac num:指定音频声道数
-ab num:制定音频码率
-fromats:显示可用的格式,编解码协议
-f fmt:强迫采用格式fmt
-y:覆盖输出文件
-n:不覆盖输出文件,如果输出文件存在则退出
-b:设置比特率
-aspect num:设置画面比例
-title string:设置标题
-author string:设置作者
-copyright string:设置版权
-comment string:设置评论
音频拼接
ffmpeg -i "concat:test1.mp3|test2.mp3" -acodec copy output.mp3
注意:拼接前两个音频应该为一样的格式
查看ffmpeg支持的格式
ffmpeg -formats
将视频保存成对应的图片
ffmpeg -i test try.%d.jpg
提取视频部分
ffmpeg -i test -vcodec copy -an test.mp4
提取音频部分
ffmpeg -i test -acodec copy -vn heh.aac
ffmpeg -i test -acodec aac -vn output.aac
截取视频
ffmpeg -ss 00:00:20 -t 00:00:05 -i test -vcodec copy -acodec copy output.mp4
ffmpeg -ss 00:00:10 -i test -to 00:00:20 -c copy -copyts cut.mp4
转换视频编码格式
ffmpeg -i test -vcodec mpeg4 output.mp4
缩放视频
ffmpeg -i test -vf scale=960:540 output.mp4
将视频保存yuv
ffmpeg -i input.mp4 output.yuv
合并视频(中间转换一下)
ffmpeg -i test1-qscale:v 1 inter1.mpg
ffmpeg -i test2-qscale:v 1 inter2.mpg
cat inter1.mpg inter2.mpg > inter.mpg
ffmpeg -i inter.mpg -qscale:v 2 output.avi
调整播放速度
ffmpeg -i test1 -vf "setpts=0.25*PTS" test4.mp4(快4倍)
ffmpeg -i test1 -vf "setpts=4*PTS" test4.mp4(慢4倍)
调整视频分辨率/音频比特率/音频比特率/音频声道数等
ffmpeg -i test1 -s 640x480 -b 500k -vcodec h264 -r 29.97 -acodec aac -ab 48k -ac 2 new_out.mp4
给视频添加台标水印
ffmpeg -i test1 -i CCTV10.png -filter_complex overlay test1.mp4
在右上角添加
ffmpeg -i test1 -i CCTV10.png -filter_complex overlay=W-w output.mp4
在左下角添加
ffmpeg -i test1 -i CCTV10.png -filter_complex overlay=0:H-h output.mp4
在右下角添加
ffmpeg -i test1 -i CCTV10.png -filter_complex overlay=W-w:H-h output.mp4
设置坐标点(视频的左上角为原点)
ffmpeg -i test1 -i CCTV10.png -filter_complex overlay=100:100 output.mp4
截取视频图像
ffmpeg -i test1 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
-r:每秒取几帧
-q:存储jpeg的图像质量,一般2是高质量
从第20s~30s截取10帧图像
ffmpeg -i test1 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
把视频和图像帧合成视频
ffmpeg -i test1 -i hehe%3d.jpeg -s 1024x768 -vcodec mpeg4 hehe.avi
把视频文件导出jpg序列
ffmpeg -i test1 hehe.%d.jpg
将jpg图像转换成yuv图像
ffmpeg -I hehe001.jpeg -s 1280x720 -pix_fmt yuv420p hehe.yuv
将图像合成视频
ffmpeg -i hehe%d.jpg output.mp4
转换视频码率
ffmpeg -i test1 -b:v 2000k output.mp4
设置最大转换码率
ffmpeg -i test1 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4
设置输出视频帧数
ffmpeg -i test1 -r 24 output.avi
强制输入文件1帧,输出文件24帧
ffmpeg -r 1 -i test1 -r 24 output.avi
设置视频画面比例
ffmpeg -i test1 -aspect 4:3 output.mp4
裁剪视频
ffmpeg -i test1 -vf crop=100 output.mp4
ffmpeg -i test1 -vf crop=iw/3:ih:0:0 output.mp4
将原视频缩小一半,并裁剪画面正中的正方形区域
ffmpeg -i test1 -vf scale=iw/2:-1,crop=ih output.mp4
scale=width:height iw/ih 表示输入宽度/宽度,-1表示按输入尺寸等比自动计算
crop=width:height:x:y x:y指定裁剪的左上角位置,默认值为(in_w-out_w)/2和(in_h-out_h)/2,即输出视频为原视频的中央区域
FFmpeg提取视频关键帧
ffmpeg -i new_car.h264 -vf select='eq(pict_type\,I)' -vsync 2 -s 640*360 -f image2 core-%02d.jpeg
FFmpeg将视频提取.264码流
ffmpeg -i test.avi new_car.h264