原文地址: 【秒懂音视频开发】07_音频录制01_命令行 - M了个J - 博客园
终于要开始进行FFmpeg实战了,一起来感受一下FFmpeg的强大吧。
1.命令简介
FFmpeg的bin目录中提供了3个命令(可执行程序),可以直接在命令行上使用。
3个命令
1.1 ffmpeg
ffmpeg的主要作用:对音视频进行编解码。
# 将MP3文件转成WAV文件 | |
ffmpeg -i xx.mp3 yy.wav |
当输入命令ffmpeg时,可以看到ffmpeg命令的使用格式是:
ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}... |
简化一下,常用格式是:
ffmpeg arg1 arg2 -i arg3 arg4 arg5 |
- arg1:全局参数
- arg2:输入文件参数
- arg3:输入文件
- arg4:输出文件参数
- arg5:输出文件
更多详细用法,可以参考官方文档:ffmpeg-all.html,或者使用以下命令查看:
# 简易版 | |
ffmpeg -h | |
# 详细版 | |
ffmpeg -h long | |
# 完整版 | |
ffmpeg -h full | |
# 或者使用 | |
# ffmpeg -help | |
# ffmpeg -help long | |
# ffmpeg -help full |
1.2 ffprobe
ffprobe的主要作用:查看音视频的参数信息。
# 可以查看MP3文件的采样率、比特率、时长等信息 | |
ffprobe xx.mp3 |
当输入命令ffprobe时,可以看到ffprobe命令的使用格式是:
ffprobe [OPTIONS] [INPUT_FILE] | |
# OPTIONS:参数 | |
# INPUT_FILE:输入文件 |
更多详细用法,可以参考官方文档:ffprobe-all.html,或者使用以下命令查看:
# 简易版 | |
ffprobe -h | |
# 详细版 | |
ffprobe -h long | |
# 完整版 | |
ffprobe -h full | |
# 或者使用 | |
# ffprobe -help | |
# ffprobe -help long | |
# ffprobe -help full |
1.3 ffplay
ffplay的主要作用:播放音视频。
# 播放MP3文件 | |
ffplay xx.mp3 |
当输入命令ffplay时,可以看到ffplay命令的使用格式是:
ffplay [options] input_file | |
# options:参数 | |
# input_file:输入文件 |
更多详细用法,可以参考官方文档:ffplay-all.html,或者使用以下命令查看:
# 简易版 | |
ffplay -h | |
# 详细版 | |
ffplay -h long | |
# 完整版 | |
ffplay -h full | |
# 或者使用 | |
# ffplay -help | |
# ffplay -help long | |
# ffplay -help full |
1.4 hide_banner
增加-hide_bannder参数可以隐藏一些冗余的描述信息,可以去实践比较以下2条命令的区别:
ffprobe xx.mp3 | |
ffprobe -hide_banner xx.mp3 | |
# ffmpeg、ffprobe、ffplay都适用 |
2. 通过命令行录音
2.1 查看可用设备
使用命令行查看当前平台的可用设备:
ffmpeg -devices |
Windows的输出结果如下所示:
- 列表中有个dshow,全名叫DirectShow,是Windows平台的多媒体系统库
- 我们可以使用dshow去操作多媒体输入设备(比如录音设备)
Devices: | |
D. = Demuxing supported | |
.E = Muxing supported | |
-- | |
E caca caca (color ASCII art) output device | |
D dshow DirectShow capture | |
D gdigrab GDI API Windows frame grabber | |
D lavfi Libavfilter virtual input device | |
D libcdio | |
E sdl,sdl2 SDL2 output device | |
D vfwcap VfW video capture |
Mac的输出结果如下所示:
- 列表中有个avfoundation,是Mac平台的多媒体系统库
- 我们可以使用avfoundation去操作多媒体输入设备(比如录音设备)
Devices: | |
D. = Demuxing supported | |
.E = Muxing supported | |
-- | |
D avfoundation AVFoundation input device | |
D lavfi Libavfilter virtual input device | |
E sdl,sdl2 SDL2 output device |
2.2 查看dshow支持的设备
# 查看dshow支持的设备 | |
ffmpeg -f dshow -list_devices true -i dummy | |
# 或者 | |
# ffmpeg -list_devices true -f dshow -i '' | |
# ffmpeg -list_devices true -f dshow -i "" |
-
-f dshow
- dshow支持的
-
-list_devices true
- 打印出所有的设备
-
-i dummy 或 -i '' 或 -i ""
- 立即退出
我的笔记本外接了一只麦克风。
外接麦克风
因此,命令的执行结果大致如下所示:
DirectShow video devices (some may be both video and audio devices) | |
"Integrated Camera" | |
DirectShow audio devices | |
"线路输入 (3- 魅声T800)" | |
"麦克风阵列 (Realtek(R) Audio)" |
-
dshow支持的视频设备
- Integrated Camera:笔记本自带的摄像头
-
dshow支持的音频设备
- 线路输入 (3- 魅声T800):外接的麦克风
- 麦克风阵列 (Realtek(R) Audio):笔记本自带的麦克风
2.3 查看avfoundation支持的设备
在Mac平台,使用的是avfoundation,而不是dshow。
ffmpeg -f avfoundation -list_devices true -i '' |
输出结果如下所示:
AVFoundation video devices: | |
[0] FaceTime高清摄像头(内建) | |
[1] Capture screen 0 | |
AVFoundation audio devices: | |
[0] MS-T800 | |
[1] Edu Audio Device | |
[2] MacBook Pro麦克风 |
列表中的MS-T800是外接的麦克风。在Mac上,FFmpeg还给每一个视频、音频设备进行了编号,比如MS-T800的编号是0、Mac自带麦克风的编号是2。
2.4 指定设备进行录音
# 使用外接的麦克风进行录音,最后生成一个wav文件 | |
ffmpeg -f dshow -i audio="麦克风阵列 (Realtek(R) Audio)" out.wav | |
# 在Mac上通过编号指定设备 | |
ffmpeg -f avfoundation -i :2 out.wav | |
# :0表示使用0号音频设备 | |
# 0:2表示使用0号视频设备和2号音频设备 |
- 可以使用快捷键Ctrl + C终止录音
- 我这边的测试结果显示,音频参数是:
- Windows:44100Hz采样率、16位深度、2声道、1411Kbps比特率
- Mac:48000Hz采样率、16位深度、2声道、1536Kbps比特率
2.5 设置dshow的参数
先通过命令查看一下dshow可以使用的参数,详情可以查看官方文档:dshow参数。
# 从ffmpeg -devices命令的结果可以看得出来:dshow属于demuxer,而不是muxer | |
ffmpeg -h demuxer=dshow |
部分输出结果如下所示:
# 采样率 | |
-sample_rate <int> set audio sample rate (from 0 to INT_MAX) | |
# 采样大小(位深度) | |
-sample_size <int> set audio sample size (from 0 to 16) | |
# 声道数 | |
-channels <int> set number of audio channels, such as 1 or 2 (from 0 to INT_MAX) | |
# 列出特定设备支持的参数 | |
-list_options <boolean> list available options for specified device (default false) |
然后再看看你的设备支持哪些参数。
ffmpeg -f dshow -list_options true -i audio="麦克风阵列 (Realtek(R) Audio)" |
输出结果如下所示:
DirectShow audio only device options (from audio devices) | |
Pin "Capture" (alternative pin name "Capture") | |
min ch=1 bits=8 rate= 11025 max ch=2 bits=16 rate= 44100 | |
# 可以看出来:采样率范围是11025~44100Hz |
接下来设置录音时的音频参数。
ffmpeg -f dshow -sample_rate 15000 -sample_size 16 -channels 1 -i audio="麦克风阵列 (Realtek(R) Audio)" out.wav |