FFmpeg基础使用

欢迎大家访问我的博客:blog.54newpower.top

1.下载安装配置过程省略

windows平台直接下载,添加环境变量即可;Linux平台根据官网说明,结合使用的发行版本自行安装;manjaro Linux自带ffmpeg,免除安装

2.编码转换-编码\音频转换

ffmpeg -i input.mov output.mp4
ffmpeg -codecs    查看编解码器

视频封装方案:
mp4封装:h264视频编码+aac音频编码    最常见,最成熟
webM封装:vp8视频编码+vorbis音频编码    谷歌的方案,YouTube使用
ogg封装:theora视频编码+vorbis音频编码 完全开源

ffmpeg -i in.flac -acodec libmp3lame -ar 44100 -ab 320k -ac 2 output.mp3

-acodec 指定音频编解码器;不指定,会根据输出文件的拓展名自动匹配
-ar 指定音频采样率;比较常见的有44100kHz和48000kHz;不输入默认使用原音频的采样率
-ab 指定音频的比特率;不输入默认128kbps
-ac 设置音频的声道数量;1单声道,2立体声默认与原音频一致

3.编码转换-视频压制

ffmpeg -i input.webm -s 1920x1080 -pix_fmt yuv420p -vcodec libx264 -preset medium -profile:v high -level:v 4.2 -crf 23 -acodec aac -ar 44100 -ac 2 -b:a 128k output.mp4

-s 视频分辨率
-pix_fmt 设置视频颜色空间;具体参数可以使用ffmpeg -pix_fmts查看
-vcodec 设置视频编解码器
-preset 编码器预设;共有10各参数可以选择(ultrafast superfast veryfast fast medium slow slower veryslow placebo);设置越快,编码越快,cpu占用就越少,但视频体积就会越大;默认medium,视频录制选择veryfast
-profile:v 视频编码器配置;(baseline extended main high high10 high 4:2:2 high 4:4:4 predictIve);实时通信采用baseline,流媒体采用main,高清视频设置为high即可
-level:v 视频编码器的限制设置,高清视频设置为4.1即可;(1-5.2)
-crf 码率控制模式;恒定速率控制;生成的文件大小不可预测;(0-51,数值越大,画质越烂);一般在18-28之间选择,18为视觉无损;
-r 设置视频帧率
-b:a 设置音频的比特率,推荐此方式

4.编码转换-码率控制

-qp 恒定量化(0-20);画质最好;视频体积巨大;不推荐使用
特殊需求:无损压缩视频

快速编码:ffmpeg -i input -vcodec libx264 -preset ultrafast -qp 0 out.mkv
高压缩比:ffmpeg -i input -vcodec libx264 -preset veryslow -qp 0 out.mkv

-crf    恒定速率因子;-crf 码率控制模式;恒定速率控制;生成的文件大小不可预测;(0-51,数值越大,画质越烂);一般在18-28之间选择,18为视觉无损;
-b 固定目标码率

vbr 动态码率:

ffmpeg -i input -vcodec libx264 -preset veryslow output

ABR 平均码率:(不适合码率变化太大的场景)

ffmpeg -i input -vcodec libx264 -preset veryslow -b:v 3000k output

cbr: 恒定码率

... -b:v 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k ...

5.音视频合并\提取

提取视频画面:

ffmpeg -i input.mp4 -vcodec copy -an out.mp4

-an 消除声音

提取音频画面:

ffmpeg -i input.mp4 -acodec copy -vn out.m4a

有多个音频的,需要指定 -map 0:3

合并:

ffmpeg -i out.m4a -i out.mp4 -c copy output.mp4

6.音视频截取\连接
音频的截取:

ffmpeg -i a.mp3 -ss 00:01:00 -to 00:01:10 -acodec copy out.mp3

-ss 开始时间
-to 结束时间
 -t 持续时间
 -sseof 截取末尾多少秒

视屏的截取:

ffmpeg -i a.mp4 -ss 00:01:00 -to 00:01:10 -c copy output.mp4
ffmpeg -ss 00:01:00 -i a.mp4  -to 00:01:10 -c copy output.mp4
ffmpeg -ss 00:01:00 -i a.mp4 -to 00:01:10 -c copy -copyts output.mp4

第二个指令:关键帧技术,但播放器显示的时间不一定准确,打三个命令添加了-copyts 保留时间戳
视频的连接:

ffmpeg  -i "concat:01.mp4|02.mp4|03.mp4" -c copy out.mp4

前提是视频属性相同
7.视频截图\水印\动图
截图:

ffmpeg -i in.mp4 -ss 5 -vframes 1 img.jpg

截图第5秒的第一帧画面
添加水印:

ffmpeg -i input.mp4 -i img.jpg -filter_complex "overlay=20:20" output.mp4

-filter_complex 滤镜
 “20:20” 距离视频左边20个像素,顶部20个像素

动图制作:

ffmpeg -i input.mp4 -ss 7.5 to 8.5 -s 640X320 -r 15 output.gif

8.直播\录屏

ffmpeg 不太好实现

推荐OBS

欢迎大家访问我的博客:blog.54newpower.top

点赞