1 环境
系统:win10
ffmpeg:ffmpeg 4.4
2 基本用法
下载ffmpeg,在bin目录下的工具:
- ffmpeg:音频、视频编码器/解码器
- ffplay:多媒体播放器
- ffprobe:多媒体文件特征解析
打开cmd窗口,进入ffmpeg/bin目录,将测试文件放到相同目录下,使用示例
//将input.avi文件转换为码率为640kbps的output.ts文件
ffmpeg -i input.avi -b:v 640k output.ts
//播放
ffplay input.avi
-i:输入
3 处理流程
demuxer:提取文件中压缩的音视频流
decoder:将压缩的音视频流解码
encoder:压缩原始数据
muxer:将压缩的音视频数据重新封装,组成对应格式的文件
4 常用指令
4.1 查询命令
4.2 录屏
先安装 dshow 软件 Screen Capturer Recorder
(1)录音
查看设备:Windows DirectShow输入设备,用于采集windows下的视频和音频设备。
ffmpeg -list_devices true -f dshow -i dummy
录制系统声音
ffmpeg -f dshow -i audio="virtual-audio-capturer" a-out.aac
(2)录屏
录制桌面视频
ffmpeg -f dshow -i video="screen-capture-recorder" v-out.mp4
(3)录音+视频
ffmpeg -f dshow -i video=“screen-capture-recorder” -f dshow -i audio=“virtual-audio-capturer” -r 20 -vcodec libx264 -acodec libmp3lame ffmpeg01.mp4
4.3 分解与复用
将mp4转换为flv
ffmpeg -i in.mp4 -vcodec copy -acodec copy out.flv
-copy:对抽取的数据不处理
抽取音视频
ffmpeg -i in.mp4 -vcodec copy -an out.h264
ffmpeg -i in.mp4 -vn -acodec copy out.aac
-an:不处理音频
-vn:不处理视频
4.4 处理原始数据
(1)提取yuv
ffmpeg -i in.mp4 -an -c:v rawvideo -pix_fmt yuv420p yuv.yuv
-c:v:对视频进行编码
rawvideo:原始视频
-pix_fmt:像素格式
播放时要设置分辨率
ffplay -s 1920x1080 yuv.yuv
(2)提取pcm
ffmpeg -i out.mp4 -vn -ar 44100 -ac 2 -f s16le pcm.pcm
-ar:音频采样率,44100b
-ac:声道,1:单声道;2:双声道;3:立体声道
-f:格式,s16le,有符号 16 位小端
播放
ffplay -ar 44100 -ac 2 -f s16le yuv.yuv
4.5 滤镜
对视频大小进行裁剪,将视频宽、高都减去100
ffmpeg -i in.mp4 -vf crop=in_w-100:in_h-100 -c:v h264 -c:a copy crop.mp4
-vf:表示使用滤镜命令,参数是crop=in_w-100:in_h-100,裁剪输入文件宽减去100,高减去100
-c:v:使用视频编码器是h264
-c:a:音频解码器,copy表示直接复制
添加水印
ffmpeg -i in.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello':x=20:y=20" word.mp4
4.6 裁剪与合并
(1)裁剪
截取10s视频
ffmpeg -i in.mp4 -ss 00:00:00 -t 10 crops.mp4
-ss:指定开始时间
-t:指定要裁剪多长时间,单位s
(2)合并
创建input.txt文件,并输入需要合并的文件名
file '1.ts'
file '2.ts'
执行合并命令
ffmpeg -f concat -i input.txt concat.mp4
4.7 图片与视频互转
(1)视频转图片
ffmpeg -i in.mp4 -r 1 -f image2 image-%3d.jpg
-r:视频转图片帧率,1指1秒转1张图片
-f:使用格式,image2格式
image-%3d:转换的图片以image开头,后面带3个数字
(2)图片转视频
ffmpeg -i image-%3d.jpg cover.mp4
4.8 拉流和推流
拉流
ffmpeg -i http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8 -c copy pull.m3u8
推流
ffmpeg -re -i test.mp4 -c copy -f flv rtmp://server/live/streamName
-re:减慢帧率速度