一、录制命令
1.1、获取支持的设备
要录制屏幕,首先要知道当前笔记本支持的输入设备。
ffmpeg -devices
Devices:
D. = Demuxing supported
.E = Muxing supported
--
D avfoundation AVFoundation input device
D lavfi Libavfilter virtual input device
E sdl,sdl2 SDL2 output device
通过 ffmpeg -devices
可以知道我的 Mac 的输入设备:avfoundation
查询 avfoundation
视频和音频的索引
ffmpeg -f avfoundation -list_devices true -i ""
[AVFoundation input device @ 0x7fb5b340d6c0] AVFoundation video devices:
[AVFoundation input device @ 0x7fb5b340d6c0] [0] FaceTime HD Camera
[AVFoundation input device @ 0x7fb5b340d6c0] [1] Capture screen 0
[AVFoundation input device @ 0x7fb5b340d6c0] AVFoundation audio devices:
[AVFoundation input device @ 0x7fb5b340d6c0] [0] MacBook Pro麦克风
1.2、采集屏幕
ffmpeg -f avfoundation -i 1: -r 30 out.yuv
- -f 指定从哪里采集数据 avfoundation
- -i 1 表示从屏幕获取数据,0 表示从摄像头获取数据
- -r 表示视频的帧率
- 播放采集视频数据
ffplay out.yuv
这样播放 yuv 格式的原始视频是有问题的,因为没有指定视频的分辨率
和视频的格式
ffplay -s 3360x2100 -pix_fmt uyvy422 out.yuv
- -s 表示视频的分辨率。
如果 -s 不指定
[IMGUTILS @ 0x700001e58808] Picture size 0x0 is invalid
studyout.yuv: Invalid argument
如果不指定 -pix_fmt
就会出现花屏问题。
- -pix_fmt 表示视频的格式
1.3、采集音频
利用 Macbook 的麦克风,采集音频数据。
ffmpeg -f avfoundation -i :0 out.wav
- -f 指定从哪里采集数据 avfoundation
- -i 指定 avfoundation 的索引,在 : 前面表示视频索引,在 : 后面表示音频索引
二、分解与复用命令
2.1、将 mp4 转化为 flv
ffmpeg -i testfile.mp4 -vcodec copy -acodec copy testfile.flv
or
ffmpeg -i testfile.mp4 -codec copy testfile.flv
2.2、将 mp4 文件的中视频抽取出来
ffmpeg -i testfile.mp4 -vcodec copy -an testfile.flv
2.3、将 mp4 文件中的音频抽取出来
ffmpeg -i testfile.mp4 -vn -acodec copy testfile.flv
- -an 表示阻止文件的所有音频流
- -an 表示阻止文件的所有视频流
- -acodec 设置音频编解码器, copy 表示
- -vcodec 设置视频编解码器
- -c 表示编解码器,包括音视频编解码器
三、抽取音视频原始数据
3.1、抽取 mp4 文件的原始 yuv 视频数据
ffmpeg -i testfile.mp4 -an -codec:v rawvideo -pix_fmt yuv420p out.yuv
- -codec:v 指定视频编解码器 rawvideo 表示原始视频数据
- -codec:a 指定音频编解码器
3.2、抽取 mp4 文件的原始 pcm 音频数据
ffmpeg -i testfile.mp4 -vn -ar 44100 -ac 2 -f s16le out.pcm
- -ar 指定采样率
- -ac 指定通道数
- -f 指定数据格式 s16le 有符号,16字节,little end
播放:
ffplay -ar 44100 -ac 2 -f s16le out.pcm
四、滤镜命令
4.1、设置声音滤镜
ffmpeg -i /Users/liaowj/Documents/media/study/Complicated.mp3 -vf volume=1 -acodec copy volume.mp3
- -vf 表示视频滤镜
五、视频裁剪命令
5.1、裁剪命令
从某一个位置00:01:10位置开始裁剪一个 mp4 文件,裁剪时间 10 s。
ffmpeg -i haha.mp4 -ss 00:01:10 -t 10 out.ts
- -t 表示限制从输入文件读取数据的时长,单位为 s。
- -ss 表示拖动到某一个时间位置,格式为:12:03:45
5.2、合并视频命令
合并两个视频文件
ffmpeg -f concat -i input.txt out.mp4
- -f 指定输入或输出的file format,concat 是 format 的其中一种
concat
-i 指定数据的数据源
input.txt 指定了两个文件的路径,格式为 file absolutefilepath
file out.mp4
file out1.mp4
六、视频与图片转换命令
6.1、将一个视频每一帧图片提取出来,fps = 1
ffmpeg -i testfile.mp4 -r 1 -f image2 foo-%03d.jpeg
- -r 1s 为一帧
- -f 指定输出文件的格式为 image2
6.2、将一组图片转化为一个视频文件
ffmpeg -f image2 -i foo-%03d.jpeg out.avi