01.下载,配置
https://ffmpeg.zeranoe.com/builds/ 用的系统是Ubuntu18.04,所以直接apt-get就可以了
sudo apt-get install ffmpeg
Windows 10 :下载稳定版解压、重命名、添加到系统环境变量Path中
02.简介,上手(FFmpeg FFprobe FFplay)
(1)查看ffmpeg的帮助说明,提供的指令
ffmpeg -h
(2)播放媒体的指令
ffplay video.mp4
ffplay music.mp3
(3)常用快捷键
按键"Q"或"Esc":退出媒体播放
键盘方向键:媒体播放的前进后退
点击鼠标右键:拖动到该播放位置
按键"F":全屏
按键"P"或空格键:暂停
按键"W":切换显示模式
(4)查看媒体参数信息
ffprobe video.mp4
(5)Windows按住Alt建和鼠标右键,可以进入当前目录下powershell。或者直接在地址栏出入cmd回车。
cls命令用于清屏
03.转换格式(文件格式,封装格式)
(1)文件名可以是中英文,但不能含有有空格,空格代表阶段。非要含空格,务必使用引号
(2)转换格式
ffmpeg -i video.mp4 video_avi.avi
第三个参数为输入文件的名称,第四个参数为输出文件的名称
04.改变编码 上(编码,音频转码)
(1)查看FFmpeg支持的编码格式
ffmpeg -codecs
查看已经按照的编码器
ffmpeg -encoders
(2)网站常用编码
MP4封装:H264视频编码+ACC音频编码 (时代潮流)
WebM封装:VP8视频编码+Vorbis音频编码 (谷歌、youtube,效果一般)
OGG封装:Theora视频编码+Vorbis音频编码 (开源)
(3)无损编码格式.flac转换编码
ffmpeg -i music_flac.flac -acodec libmp3lame -ar 44100 -ab 320k -ac 2 music_flac_mp3.mp3
说明:
acodec:audio Coder Decoder 音频编码解码器
libmp3lame:mp3解码器
ar:audio rate:音频采样率
44100:设置音频的采样率44100hz。若不输入,默认用原音频的采样率
ab:audio bit rate 音频比特率
320k:设置音频的比特率。若不输入,默认128K
ac: aduio channels 音频声道
2:声道数。若不输入,默认采用源音频的声道数,1为单声道,2为双声道立体声
概括:设置格式的基本套路-先是指名属性,然后跟着新的属性值
查看结果属性
ffprobe music_flac_mp3.mp3
05.改变编码 中(视频压制)
(1)视频转码
ffmpeg -i video.mp4 -s 1920x1080 -pix_fmt yuv420p -vcodec libx264 -preset medium -profile:v high -level:v 4.1 -crf 23 -acodec aac -ar 44100 -ac 2 -b:a 128k video_avi.avi
说明:
-s 1920x1080:缩放视频新尺寸(size)
-pix_fmt yuv420p:pixel format,用来设置视频颜色空间。参数查询:ffmpeg -pix_fmts
-vcodec libx264:video Coder Decoder,视频编码解码器
-preset medium: 编码器预设。十个可选参数:ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow,placebo
预设快veryfast的话生成的文件大,预设慢veryslow生成的文件小,但cpu占用率和编码时间会更高更长
-profile:v high :编码器配置,与压缩比有关。实时通讯-baseline,流媒体-main,超清视频-high (手机和电脑目前都支持)
-level:v 4.1 :对编码器设置的具体规范和限制,权衡压缩比和画质。1080p == 4.1
-crf 23 :设置码率控制模式。constant rate factor-恒定速率因子模式。范围051,默认23。数值越小,画质越高,0为无损画质。一般在1828做出选择。
-r 30 :设置视频帧率
-acodec aac :audio Coder Decoder-音频编码解码器
-b:a 128k :音频比特率.大多数网站限制音频比特率128k,192k
其他参考上一个教程
06.改变编码 下(码率控制模式)
ffmpeg支持的码率控制模式:-qp -crf -b
(1)
-qp :constant quantizer,恒定量化器模式,不推荐该模式因为产出体积大但是无损。
无损压缩的例子(快速编码)
ffmpeg -i input -vcodec libx264 -preset ultrafast -qp 0 output.mkv
无损压缩的例子(高压缩比)
ffmpeg -i input -vcodec libx264 -preset veryslow -qp 0 output.mkv
(2)
-crf :constant rate factor,恒定速率因子模式
基于人眼的特点节省算力去算需要算力的地方,一般用这个
(3)
-b :bitrate,固定目标码率模式。一般不建议使用,除非是制作文件的体积要求极小
3种模式默认单遍编码
(1)VBR(Variable Bit Rate/动态比特率) 例子 简单的地方少给码率,复杂的地方多给码率
如果VBR码率变化过大,用户设备老旧且网络状况差的话容易产生花屏或黑屏。
ffmpeg -i input -vcodec libx264 -preset veryslow output
(2)ABR(Average Bit Rate/平均比特率) 例子
ffmpeg -i input -vcodec libx264 -preset veryslow -b:v 3000k output
(3)CBR(Constant Bit Rate/恒定比特率) 例子 没人用的玩意??
ffmpeg -b:v 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k …
07.合并,提取音视频
(1)单独提取视频(不含音频流)
ffmpeg -i video.mp4 -vcodec copy -an video_silent.mp4
-vcodec copy 保持原编码格式
-an 用来静音,静音只是表象,实际上音频流被剔除了
-vn 剔除视频流
(2)单独提取音频(不含视频流)
ffmpeg -i video.mp4 -vn -acodec copy video_novideo.m4a
具备多个音频流的,如
Stream #0:2[0x81]:Audio:ac3,48000Hz,5.1,s16,384kb/s
Stream #0:3[0x82]:Audio:ac3,48000Hz,5.1,s16,384kb/s
Stream #0:4[0x80]:Audio:ac3,48000Hz,5.1,s16,448kb/s
针对性的单一的提取,例如提取第2条,用指令: -map 0:3
(3)合并同格式的音视频
ffmpeg -i video_novideo.m4a -i video_silent.mp4 -c copy video_merge.mp4
08.截取,连接音视频
(1)截取
ffmpeg -i music.mp3 -ss 00:00:30 -to 00:02:00 -acodec copy music_cutout.mp3
截取60秒
ffmpeg -i music.mp3 -ss 00:00:30 -t 60 -acodec copy music_cutout60s.mp3
时:分:秒 == 分:秒 == 秒
-t 设置截取时长
-sseof : 从媒体末尾开始截取
ffmpeg -i in.mp4 -ss 00:01:00 -to 00:01:10 -c copy out.mp4
ffmpeg -ss 00:01:00 -i in.mp4 -to 00:01:10 -c copy out.mp4
ffmpeg -ss 00:01:00 -i in.mp4 -to 00:01:10 -c copy -copyts out.mp4
把-ss放到-i之前,启用了关键帧技术,加速操作。但截取的时间段不一定准确。可用最后一条指令,保留时间戳,保证时间准确。
(2)连接音视频
ffmpeg -i “concat:01.mp4|02.mp4|03.mp4” -c copy out.mp4
不同格式(宽高、码率)的音视频可以连接在一起(但是操作起来很麻烦),但不推荐不同格式连接在一起。建议使用Avidemux软件连接(开源免费的图形化操作软件)
09.截图,水印,动图
(1)截图.
截取第7秒第1帧的画面
ffmpeg -i video.mp4 -ss 7 -vframes 1 video_image.jpg
(2)水印
ffmpeg -i video.mp4 -i qt.png -filter_complex “overlay=20:80” video_watermark.mp4
第五个为水印图片,-filter_complex表示使用滤镜,overlay是水印位置,20代表x,80代表y
(3)截取动图
ffmpeg -i video.mp4 -ss 7.5 -to 8.5 -s 640x320 -r 15 video_gif.gif
640x320 表示输出gif的宽高大小
10.录屏,直播
(1)录屏
windows: ffmpeg -f gdigrab -i desktop rec.mp4
ubuntu: sudo ffmpeg -f fbdev -framerate 10 -i /dev/fb0 rec.mp4
gdigrab :ffmpeg中的一个组件。
只能捕获视频.若要录屏,录音,获取摄像头,麦克风,换组件,用OBS Studio软件
(2)直播
ffmpeg -re i rec.mp4 按照网站要求编码 -f flv “你的rtmp地址/你的直播码”
提取srt字幕
ffmpeg -i input.mkv -vn -an -codec:s:0 srt subtitle.srt