1.播放视频或音频
- 播放:
ffplay test.mp4
或者ffplay test.mp3
- 退出:q或者Escc
- 清空命令行:
cls
- 前进后退:
上下左右
- 跳转:
鼠标右键
- 全屏:
f
- 暂停:
t或者空格
- 切换显示模式:
w
2.查看属性
ffprobe test.mp4
3.转换格式
ffmpeg - i input.mov output.mp4
- 常见格式
视频封装格式 视频文件格式 AVI(Audio video Interleave) AVI WMV(Windows Media Video) WMV MPEG(Moving Picture Experts Group) MPG MPEG VOB DAT 3GP MP4 分M1PEG-1. MPEG-2 .MPEG-4 MKV Matroska Real Video RM RMVB QuickTime File Format MOV Flash video FLV
4.编码转码
- 编码方案(1080p):
- MP4封装:H264视频编码+AAC音频编码
- WebM封装:VP8视频编码+Vorbis音频编码(效果不好,油管采用方案)
- OGG封装:Theora视频编码+ Vorbis音频编码(开源)
- 音频编码:
ffmpeg -i in.flac -acodec [libmp3lame] -ar 44100 -ab 320k -ac 2 out.mp3
- libmp3lame []表示不输也可以,默认编码器
- ar音频采样率,默认原音频
- ab音频比特率,默认128k
- ac音道数,默认原音频
- 视频压制
ffmpeg -i sp.mov -s 1920x1080 -pix_fmt yuv420p -vcodec libx264 -preset medium -profile:v high -level:v 4.1 -crf 23 -r 30 -acodec aac -ar 44100 -ac 2 -b:a 128k out.mp4
- -s分辨率
- -pix_fmt颜色空间(YUV、NV、RGB...,参数可以ffmpeg -pix_fmt查看),网络视频一般采用这个空间
- -vcodec编码器,1ibx2B64软件编码,可支持硬件加速(gpu加速)
- -preset编码器预设,ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow、placebo,默认medium,录制视频用varyfast,压制视频用veryslow(往右时间长,压制效果好)
- -profile:v指定编码器配置,实时通信一般采用baseline,流媒体采用main,超清用high,越往右支持解析需要的要求硬件越高
- -level压缩比,从1~5.2,一般1080p用4.1
- -crf码率控制,取值:
0...18...23...28...51
。一般在18~28间,默认23,越往右压缩越狠 - 该方式画面均衡,但无法精确控制码率,对画面要求,文件大小无要求的场景
- -r 设置帧率
- -b:a === -ab,音频比特率
- 码率控制模式
- -qp,每帧严格遵守规定(画质最好,体积特别大,除非想无损压制视频,否则不会这样)
无损压缩的例子(快速编码) ffmpeg -i input -vcodec libx264 -preset ultrafast -qp 0 output.mkv 无损压缩的例子(高压缩比) ffmpeg -i input -vcodec libx264 -preset veryslow -qp 0 output.mkv
- -crf,浮动qp模式(一般用这种模式)
- -b,严格控制视频码率,设定多少输出多少
- 单遍编码:-qp,-crf默认:单遍编码,因此采用qp或者crf要搭配very slowly预设,更精准
- VBR编码:-b默认VBR编码(网络不好会造成花屏或黑屏)
- ABR编码:现在一般用ABR
- CBR编码:在ABR上加了一些指令(没人用)
5.合并、提取音视频
- 提取
- 提取单独视频:
``ffmpeg -i in.mp4 -vcodec copy -an v.mp4
- 提取音频:
ffmpeg -i in.mp4 -vcodec copy -vn a.m4a
(mp3也可以) - 一个视频多个音频:
Stream #0:2[0x81]:Audio: ac3,48000 Hz,5.1,s16,384 kb/s Stream #0:3[0x82]:Audio: ac3,48000 Hz,5.1,s16,384 kb/s Stream #0:4[Ox80]:Audio: ac3,48000 Hz,5.1,s16,448 kb/s
单独提取,额外加上-map 0:3
- 合并:
ffmpeg -i a.m4a -i v.mp4 -c copy out.mp4
- -c copy (== -codec copy 是-acodec和-vcodec的和)用于维持编码器,如果音视频格式不刚好,则需要转换
6.截取、连接音视频
- 截取
ffmpeg -i in.mp3 -ss 00:01:00 -to 00:01:10 -acodec copy out.mp3
- -ss参数可以为00:00:12、00:12或者12都表示12秒
- -to表示结束时间,也可以用-t 10,表示往后截取10秒
- -sseof以末尾为起点,-sseof后面得跟具体的负数, 且得放在-i前面,比如截取in.mp4的最后10秒, 代码可以是:
ffmpeg -sseof -10 -i in.mp4 out.mp4
- ffmpeg -ss 00:01:00 -i in.mp4 -to 00:01:10 -c copy out.mp4
- 将 -ss放在 -i前面会启用关键帧技术(加速操作,但截取出来的视频起止时间不一定准确)
- 可以用:ffmpeg -ss 00:01:00 -i in.mp4 -to 00:01:10 -c copy -copyts out.mp4
- 上述会保留时间戳,不会影响起止时间
- 连接
ffmpeg -i "concat:01.mp4|02.mp4|03.mp4" -c copy out.mp4
(这里没成功,可以将待拼接的mp4转为ts文件拼接为ts再转mp4) ffmpeg -i "concat:1.ts|2.ts" -c copy out.ts
out.ts再转mp4- 但是转ts后很糊,建议直接剪辑软件拼
- up推荐了一个剪辑软件Avidemux
7.截图、水印、动图
- 截图:截取第5s处第一帧的画面
ffmpeg -i in.mp4 -ss 5 -vframes 1 img.jpg
- 水印:
ffmpeg -i in.mp4 -i logo.png -filter_complex "overlay=20:20" out.mp4
(overlay是偏移左边和右边的像素值) - 动图
ffmpeg -i in.mp4 -ss 7.5 -to 8.5 -s 640x320 -r 15 out.gif
8.录屏和直播
- 录屏不推荐,推荐obs
- 直播推流:
ffmpeg -re -i rec.mp4 按照网站要求编码 -f flv "你的rtmp地址/你的直播码"
- -re按视频帧率推流
- -f指定格式(force format)