一 ffmpeg 命令
ffmpeg arg1 arg2 -i arg3 arg4 arg5
ffmpeg 全局参数 输入文件参数 -i 输入文件 输出文件参数 输出文件
arg1:全局参数
arg2:输入文件参数
arg3:输入文件
arg4:输出文件参数
arg5:输出文件
二 ffprobe 命令
ffprobe [OPTIONS] [INPUT_FILE]
# OPTIONS:参数
# INPUT_FILE:输入文件
三 ffplay 命令
ffplay [options] input_file
# options:参数
# input_file:输入文件
四 hide_banner
增加*-hide_bannder*参数可以隐藏一些冗余的描述信息,可以去实践比较以下2条命令的区别:
ffprobe xx.mp3
ffprobe -hide_banner xx.mp3
# ffmpeg、ffprobe、ffplay都适用
五 通过命令行录音
在 windows, linux,mac 上 的 多媒体库 是不一样的,因此我们先要看一下 当前系统的 多媒体库 是啥
5.1 查看当前系统的媒体库是啥?
ffmpeg -devices
Windows的输出结果如下所示:
-
列表中有个dshow,全名叫DirectShow,是Windows平台的多媒体系统库
-
我们可以使用dshow去操作多媒体输入设备(比如录音设备)
C:\Users\Administrator>ffmpeg -hide_banner -devices
Devices:
D. = Demuxing supported
.E = Muxing supportedE 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
linux 上是这样的
-
列表中有个alsa,是linux平台的多媒体系统库
-
我们可以使用alsa去操作多媒体输入设备(比如录音设备)
ffmpeg version 7.0 Copyright (c) 2000-2024 the FFmpeg developers
built with gcc 13 (Ubuntu 13.2.0-23ubuntu4)
configuration: --prefix=/home/hunandede/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/home/hunandede/ffmpeg_build/include --extra-ldflags=-L/home/hunandede/ffmpeg_build/lib --extra-libs='-lpthread -lm' --bindir=/home/hunandede/bin --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-pic --enable-shared --enable-nonfree
libavutil 59. 8.100 / 59. 8.100
libavcodec 61. 3.100 / 61. 3.100
libavformat 61. 1.100 / 61. 1.100
libavdevice 61. 1.100 / 61. 1.100
libavfilter 10. 1.100 / 10. 1.100
libswscale 8. 1.100 / 8. 1.100
libswresample 5. 1.100 / 5. 1.100
libpostproc 58. 1.100 / 58. 1.100
Devices:
D. = Demuxing supported
.E = Muxing supportedDE alsa ALSA audio output
DE fbdev Linux framebuffer
D kmsgrab KMS screen capture
D lavfi Libavfilter virtual input device
DE oss OSS (Open Sound System) playback
E sdl,sdl2 SDL2 output device
DE sndio sndio audio playback
DE video4linux2,v4l2 Video4Linux2 output device
D x11grab X11 screen capture, using XCB
E xv XV (XVideo) output device
Mac的输出结果如下所示:
-
列表中有个avfoundation,是Mac平台的多媒体系统库
-
我们可以使用avfoundation去操作多媒体输入设备(比如录音设备)
Devices:
D. = Demuxing supported
.E = Muxing supportedD avfoundation AVFoundation input device
D lavfi Libavfilter virtual input device
E sdl,sdl2 SDL2 output device
5.2 查看dshow支持的设备
以下用 windows 为例说明
# 查看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 ""
立即退出
结果如下:
C:\Users\Administrator>ffmpeg -f dshow -list_devices true -i dummy
ffmpeg version 6.0-full_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-shared --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libvpl --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
libavutil 58. 2.100 / 58. 2.100
libavcodec 60. 3.100 / 60. 3.100
libavformat 60. 3.100 / 60. 3.100
libavdevice 60. 1.100 / 60. 1.100
libavfilter 9. 3.100 / 9. 3.100
libswscale 7. 1.100 / 7. 1.100
libswresample 4. 10.100 / 4. 10.100
libpostproc 57. 1.100 / 57. 1.100
[dshow @ 00000254dd9b6440] "USB Camera" (video)
[dshow @ 00000254dd9b6440] Alternative name "@device_pnp_\\?\usb#vid_0c45&pid_6366&mi_00#7&2138754&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"
[dshow @ 00000254dd9b6440] "screen-capture-recorder" (video)
[dshow @ 00000254dd9b6440] Alternative name "@device_sw_{860BB310-5D01-11D0-BD3B-00A0C911CE86}\{4EA69364-2C8A-4AE6-A561-56E4B5044439}"
[dshow @ 00000254dd9b6440] "OBS Virtual Camera" (none)
[dshow @ 00000254dd9b6440] Alternative name "@device_sw_{860BB310-5D01-11D0-BD3B-00A0C911CE86}\{A3FCE0F5-3493-419F-958A-ABA1250EC20B}"
[dshow @ 00000254dd9b6440] "Microphone (High Definition Audio Device)" (audio)
[dshow @ 00000254dd9b6440] Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{65B0B6E6-1296-49C4-B8A3-262F69F315CB}"
[dshow @ 00000254dd9b6440] "virtual-audio-capturer" (audio)
[dshow @ 00000254dd9b6440] Alternative name "@device_sw_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\{8E146464-DB61-4309-AFA1-3578E927E935}"
[dshow @ 00000254dd9b6440] "Microphone (High Definition Audio Device)" (audio)
[dshow @ 00000254dd9b6440] Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{7E4D72E6-A93F-4B62-AD15-A64D1D38AA46}"
dummy: Immediate exit requested
说明:
dshow支持的视频设备
"USB Camera":笔记本自带的摄像头
dshow支持的音频设备
Microphone (High Definition Audio Device):外接的麦克风
Microphone (High Definition Audio Device):我们的耳机
注意看,实际上着两个 音频设备是 不一样的
指定设备进行录音
# 使用外接的麦克风进行录音,最后生成一个wav文件
ffmpeg -f dshow -i audio="Microphone (High Definition Audio Device)" 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比特率
设置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="Microphone (High Definition Audio Device)"
[dshow @ 00000229f1dd6480] DirectShow audio only device options (from audio devices)
[dshow @ 00000229f1dd6480] Pin "Capture" (alternative pin name "Capture")
[dshow @ 00000229f1dd6480] ch= 2, bits=16, rate= 44100
Last message repeated 1 times
[dshow @ 00000229f1dd6480] ch= 1, bits=16, rate= 44100
[dshow @ 00000229f1dd6480] ch= 2, bits=16, rate= 32000
[dshow @ 00000229f1dd6480] ch= 1, bits=16, rate= 32000
[dshow @ 00000229f1dd6480] ch= 2, bits=16, rate= 22050
[dshow @ 00000229f1dd6480] ch= 1, bits=16, rate= 22050
[dshow @ 00000229f1dd6480] ch= 2, bits=16, rate= 11025
[dshow @ 00000229f1dd6480] ch= 1, bits=16, rate= 11025
[dshow @ 00000229f1dd6480] ch= 2, bits=16, rate= 8000
[dshow @ 00000229f1dd6480] ch= 1, bits=16, rate= 8000
[dshow @ 00000229f1dd6480] ch= 2, bits= 8, rate= 44100
[dshow @ 00000229f1dd6480] ch= 1, bits= 8, rate= 44100
[dshow @ 00000229f1dd6480] ch= 2, bits= 8, rate= 22050
[dshow @ 00000229f1dd6480] ch= 1, bits= 8, rate= 22050
[dshow @ 00000229f1dd6480] ch= 2, bits= 8, rate= 11025
[dshow @ 00000229f1dd6480] ch= 1, bits= 8, rate= 11025
[dshow @ 00000229f1dd6480] ch= 2, bits= 8, rate= 8000
[dshow @ 00000229f1dd6480] ch= 1, bits= 8, rate= 8000
[dshow @ 00000229f1dd6480] ch= 2, bits=16, rate= 48000
[dshow @ 00000229f1dd6480] ch= 1, bits=16, rate= 48000
[dshow @ 00000229f1dd6480] ch= 2, bits=16, rate= 96000
[dshow @ 00000229f1dd6480] ch= 1, bits=16, rate= 96000
接下来设置录音时的音频参数。
ffmpeg -f dshow -sample_rate 44100-sample_size 16 -channels 1 -i audio="Microphone (High Definition Audio Device)" out.wav