FFmpeg 常用实例。
文章目录
编译后 3 文件。
ffmpeg.exe ~ 转码。
ffplay.exe ~ 播放。
ffprobe.exe ~ 详情。
ffmpeg -i 1.avi 2.mp4
常用。
ffmpeg -h
ffmpeg -codecs ~ 查看支持的编码。
ffmpeg -i in.flac -acodec libmp3lame -ar 44100 -ab 320k -ac 2 out.mp3
-acodec ~ a: audio。
-ar 44100 ~ 音频采样率。不写,默认原音频采样率。一般用 48000 44100。
-ab 320k ~ audio bitrate。音频比特率。默认 128k。
-ac 2 ~ channel 声道数。
ffmpeg -i in.webm -s 1920x1080 -pix_fmt yuv420p -vcodec libx264 -preset medium -profile:v -level:v -crf 23 -acodec aac -ar 44100 -ac 2 -b:a 128k out.mp4
-pix_fmt ~ pixel format (通过 ffmpeg -pix_fmts 查看支持的像素格式)。
-vcodec libx264 ~ h264 的软件编码器,常用。还支持硬件编码 GPU、多线程等。
-preset ~ 编码器预设,编码算法的精度。精度越高,CPU 占用越多,速度约慢。ultrafast superfast veryfast faster fast medium slow slower veryfast placebo
默认 medium。一般直播用 veryfast,体积小,换取性能。压制视频一般用 veryslow。-profile:v ~ 编码器配置,压缩比。一般实时通讯 ~ baseline,流媒体 ~ main,超清视频 ~ high。
-level:v ~ 压缩比和画质。
-crf 23 ~ 码率控制模式。constantt rate factor ~ 恒定速率因子模式,画质稳定,大小不定。0 … 18 … 23 … 28 … 51。0 ~ 无损画质。
-acodec aac ~ 音频编码器。
-b:a 128k ~ -ab 128k
- 码率控制模式。-qp / -crf / -b。
-qp
Constant Quantizer ~ 恒定量化器模式。将画质转为数字。0 … 18 … 23 … 28 … 51。0 ~ 无损画质。
无损压制例子。(快速编码)。
ffmpeg -i input -vcodec libx264 -preset ultrafst -qp 0 output.mkv
无损压制例子。(高压缩比)。
ffmpeg -i input -vcodec libx264 -preset veryslow -qp 0 output.mkv
-crf
基于 qp,根据人眼识别的不精确性,将某些不明显的画质适当调低,视觉敏感部分的画质适当调高,整体码率降低,文件体积减小。
-b
bitrate ~ 固定目标码率模式。视频码率和体积固定。有限条件下达到最高画质。
VBR ~ Variable Bit Rate 动态比特率。
eg. ffmpeg -i input -vcode libx264 -preset veryslow output
ABR ~ Average Bit Rate 平均比特率。
eg. ffmpeg -i input -vcode libx264 -preset veryslow -b:v 3000k output
CBR ~ Constant Bit Rate 恒定比特率。
eg. ffmpeg -i input -vcode libx264 -preset veryslow -b:v 3000k -minrate 4000k -maxrate 4000k -bufsize 1835k output
eg.
提取视频(静音)。
ffmpeg -i in.mp4 -vcodec copy -an a.m4a
-an ~ audio no ~ 静音。
提取音频(去除视频)。
ffmpeg -i in.mp4 -vcodec copy -vn v.mp4
-vn ~ video no ~ 去除视频。
音频视频合并。
ffmpeg -i a.m4a -i v.mp4 -c copy out.mp4
截取、连接音视频。
ffmpeg -i in.mp3 -ss 00:01:00 -to 00:01:10 -acodec copy out.mp3
ffmpeg -i in.mp3 -ss 00:01:00 -to 10 -acodec copy out.mp3
-t 截取时长。
关键帧技术 ~ -ss 前置。
ffmpeg -i in.mp4 -ss 00:01:00 -to 00:01:10 -acodec copy out.mp4
ffmpeg -ss 00:01:00 -i in.mp4 -to 00:01:10 -acodec copy out.mp4(关键帧技术,加速操作),播放器显示的起始时间和结束时间不一定准确。
ffmpeg -ss 00:01:00 -i in.mp4 -to 00:01:10 -acodec copy -copyts out.mp4 ~ 保留时间戳。
合并视频。
ffmpeg -i “concat:01.mp4|02.mp4|03.mp4” -c copy out.mp4
参数不同不建议使用,而建议使用 Avidemux 软件。
截图。
ffmpeg -i in.mp4 -ss 5 -vframes 1 img.jpg
// 截取第 5 秒的一帧画面。
加水印。
ffmpeg -i in.mp4 -i logo.png -filter_complex “overlay=20:20”
overlay ~ 左上角偏移量。
gif 动图。
ffmpeg -i in.mp4 -ss 7.5 -to 8.5 -s 640x210 -r 15 out.gif
-s 640x210 ~ 缩放大小。
-r 15 ~ 降低帧率。
录屏、直播。
ffmpeg -f gdigrab -i desktop rec.mp4
-f ~ 格式化。
gdigrab ~ Windows 默认,只能捕获视频,不能捕获视频。
推流。
ffmpeg -re -i rec.mp4 按照网站要求编码 -f flv “rtmp 地址/直播码”
-
-i
输入流。 -
-f
输出格式 -
-ss
开始时间。 -
-b
视频流量(码率),默认 200 Kbit/s, -
-r
帧速率,默认 25。 -
-s
宽与高。 -
aspect
画面比例。 -
vn
不处理视频。 -
-vcodec
视频解码器,未设定时使用与输入流相同的编解码器。 -
-ar
采样率。 -
-ac
声道数 channel。 -
acodec
声音编解码器,未设定时使用与输入流相同的编解码器。 -
-an
不处理音频。
ffmpeg。
ffmpeg的简单使用
- 将 input.avi 转换成 output.mp4:
ffmpeg -i input.avi output.mp4
- 增加一些要求。
ffmpeg -threads 4 -i input.avi -ab 32 -flags +loop -vol 200 -vf yadif input.mp4
-ab:设置比特率
-vol:音量提高到200%
- 将视频转成 m3u8 点播文件。
ffmpeg.exe -i input.avi -strict -2 -hls_time 10 -hls_list_size 0 -c:v libx264 -c:a aac -f hls input.m3u8
-hls_time 10:每个 ts 文件 10 秒左右。这个会根据具体情况,尽量维系在 10 秒一个 ts。
-hls_list_size 0:m3u8 索引里保留所有的 ts 路径。
- 将视频转成加密的 m3u8 点播文件。
ffmpeg -i input.mp4 -c copy -bsf:v h264_mp4toannexb -hls_time 10 -hls_list_size 0 -hls_key_info_file key_info input.m3u8
key_info 需要替换成自己的路径,因为需要加密,所以需要准备二个文件一个是:key.key,一个是 key_info。详细的不在这里作介绍,如果有兴趣可以实际了解详细使用方法。
- 截图。
ffmpeg -ss 00:02:06 -i input.mp4 -f image2 -y poster.jpg
-ss:截图的时间点。
- 连续截图。
ffmpeg -y -i input.mp4 -vf “fps=1/2,scale=iw/4:-1,tile=10x10” -an %d.png
fps=1/2:每 2 秒截一张图,如果是每秒截一张的话应该是 fps=1
scale:所截图片大小,上面的代码是设置宽为原始的1/4大小,高度自动,相当于iw/4:ih/4,也可以设置成固定值如120:80
tile:网格化,自动将100张图合并成一张大图
- 连续截图的另外一个方法。
ffmpeg -i my_dream.mp4 -vf fps=1/2 -q:v 2 -s 120x67 preview/%d.png
fps=1/2:每2秒截一张图,如果是每秒截一张的话应该是fps=1
-s:尺寸
这种方式截出来的是小图,需要自己再拼合。
ffmpeg -list_devices true
ffplay -f dshow -i video=“HD Camera”