01 获取比较完整的ffmpeg发布版本
ffmpeg下载:
参考: Win10系统如何安装64位ffmpeg 从 https://github.com/BtbN/FFmpeg-Builds/releases 下载win10 版本的static 版本的 ffmpeg 发布版本。
解压后把 ffmpeg.exe
的目录 ffmpeg-n5.0-latest-win64-gpl-5.0\bin
加入 PATH
环境变量。
cmd
或者 Windows Terminal
中运行 ffmpeg -version
可以查看版本信息。
02 使用ffmpeg 采集数据
Windows 上使用ffmpeg采集数据的主要方式有 dshow、vfwcap、gdigrab。
- dshow 可以用来抓 取摄像头、采集卡、麦克风等
- vfwcap 主要用来采集摄像头类设备
- gdigrab 则是抓取 Windows 窗口程序
02.01 FFmpeg 使用 dshow 采集音视频设备
使用 dshow 枚举设备
ffmpeg -f dshow -list_devices true -i dymmy
输出结果:
[dshow @ 00000203304b2840] "Integrated Camera" (video)
[dshow @ 00000203304b2840] Alternative name "@device_pnp_\\?\usb#vid_13d3&pid_5405&mi_00#6&140c2090&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"
[dshow @ 00000203304b2840] "麦克风阵列 (英特尔® 智音技术)" (audio)
[dshow @ 00000203304b2840] Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{565DAB5F-4045-4411-AD99-8231ED0F2AC5}"
dymmy: Immediate exit requested
其中
"Integrated Camera" (video)
中的 Integrated Camera 是摄像头名称。"麦克风阵列 (英特尔® 智音技术)" (audio)
中的 麦克风阵列 (英特尔® 智音技术) 是麦克风名称。
使用 dshow 展示摄像头, 摄像头的参数为 video=“摄像头名称”
ffplay -f dshow -i video="Integrated Camera"
获得摄像头支持的分辨率
ffmpeg -list_options true -f dshow -i video="Integrated Camera"
[dshow @ 000001e6504f2880] DirectShow video device options (from video devices)
[dshow @ 000001e6504f2880] Pin "捕获" (alternative pin name "捕获")
[dshow @ 000001e6504f2880] vcodec=mjpeg min s=1280x720 fps=30 max s=1280x720 fps=30
[dshow @ 000001e6504f2880] vcodec=mjpeg min s=320x180 fps=30 max s=320x180 fps=30
[dshow @ 000001e6504f2880] vcodec=mjpeg min s=320x240 fps=30 max s=320x240 fps=30
[dshow @ 000001e6504f2880] vcodec=mjpeg min s=352x288 fps=30 max s=352x288 fps=30
[dshow @ 000001e6504f2880] vcodec=mjpeg min s=424x240 fps=30 max s=424x240 fps=30
[dshow @ 000001e6504f2880] vcodec=mjpeg min s=640x360 fps=30 max s=640x360 fps=30
[dshow @ 000001e6504f2880] vcodec=mjpeg min s=640x480 fps=30 max s=640x480 fps=30
[dshow @ 000001e6504f2880] vcodec=mjpeg min s=848x480 fps=30 max s=848x480 fps=30
[dshow @ 000001e6504f2880] vcodec=mjpeg min s=960x540 fps=30 max s=960x540 fps=30
[dshow @ 000001e6504f2880] pixel_format=yuyv422 min s=640x480 fps=30 max s=640x480 fps=30
[dshow @ 000001e6504f2880] pixel_format=yuyv422 min s=320x180 fps=30 max s=320x180 fps=30
[dshow @ 000001e6504f2880] pixel_format=yuyv422 min s=320x240 fps=30 max s=320x240 fps=30
[dshow @ 000001e6504f2880] pixel_format=yuyv422 min s=352x288 fps=30 max s=352x288 fps=30
[dshow @ 000001e6504f2880] pixel_format=yuyv422 min s=424x240 fps=30 max s=424x240 fps=30
[dshow @ 000001e6504f2880] pixel_format=yuyv422 min s=640x360 fps=30 max s=640x360 fps=30
[dshow @ 000001e6504f2880] pixel_format=yuyv422 min s=848x480 fps=20 max s=848x480 fps=20
[dshow @ 000001e6504f2880] pixel_format=yuyv422 min s=960x540 fps=15 max s=960x540 fps=15
[dshow @ 000001e6504f2880] pixel_format=yuyv422 min s=1280x720 fps=10 max s=1280x720 fps=10
[dshow @ 000001e6504f2880] pixel_format=bgr24 min s=640x480 fps=30 max s=640x480 fps=30
[dshow @ 000001e6504f2880] pixel_format=bgr24 min s=320x180 fps=30 max s=320x180 fps=30
[dshow @ 000001e6504f2880] pixel_format=bgr24 min s=320x240 fps=30 max s=320x240 fps=30
[dshow @ 000001e6504f2880] pixel_format=bgr24 min s=352x288 fps=30 max s=352x288 fps=30
[dshow @ 000001e6504f2880] pixel_format=bgr24 min s=424x240 fps=30 max s=424x240 fps=30
[dshow @ 000001e6504f2880] pixel_format=bgr24 min s=640x360 fps=30 max s=640x360 fps=30
[dshow @ 000001e6504f2880] pixel_format=bgr24 min s=848x480 fps=20 max s=848x480 fps=20
[dshow @ 000001e6504f2880] pixel_format=bgr24 min s=960x540 fps=15 max s=960x540 fps=15
[dshow @ 000001e6504f2880] pixel_format=bgr24 min s=1280x720 fps=10 max s=1280x720 fps=10
video=Integrated Camera: Immediate exit requested
指定分辨率播放摄像头 -video_size
ffplay -f dshow -video_size 640x480 -i video="Integrated Camera"
02.02 FFmpeg 使用 vfwcap 采集视频设备
vfwcap
主要支持两个参数 video_size
(采集图像的大小)、 framerate
(帧率)
使用 vfwcap 枚举支持采集的设备ffmpeg -f vfwcap -i list
[vfwcap @ 0000020541b02640] Driver 0
[vfwcap @ 0000020541b02640] Microsoft WDM Image Capture (Win32)
[vfwcap @ 0000020541b02640] Version: 10.0.19041.1
list: I/O error
:: 这里显示有一个设备,设备id(Driver 0)为0
使用 vfwcap 生成 MP4 文件
ffmpeg -f vfwcap -i 0 -r 25 -vcodec libx264 outfile.mp4
-i
: 指定待录像的摄像头索引号,-r
: 指定需要录像的帧,-vcodec
: 指定了录像视频的编码格式,
输出文件名称 outfile.mp4
02.03 FFmpeg 使用 gdigrab 采集窗口
Windows 平台, FFmpeg 支持采集基于 gdi 的屏幕采集设备,这个设备同时支持采 集显示器的某块区域.
gdigrab主要参数
参数 | 主要作用 |
draw_mouse | 是否绘制采集鼠标指针 |
show_region | 是否绘制采集的边界 |
framerate | 设置视频帧率、默认为25帧,两个标准值分别为pal、mtsc |
video_size | 设置视频分辨率 |
offset_x | 采集区域偏移x个像素 |
offset_y | 采集区域偏移y个像素 |
gdigrab 的输入主要有两种方式:
desktop title = window_title
,其中 desktop
代表采 集整个桌面,title = window_title
则是采集标题为 window_title
的窗口
使用 gdigrab 采集整个桌面
ffmpeg -f gdigrab -framerate 6 -i desktop screen.mp4
使用gdigrab采集某个窗口
ffmpeg -f gdigrab -framerate 25 -i title="*新文件 1 - Notepad++" gdi01.mp4
03 音视频修改
- 提取音频
:: acodec :指定音频编码器,copy只拷贝,不做编码
:: vn:v代表视频,n代表no,无视频
ffmpeg -i input.mp4 -acodec copy -vn out.aac
- 提取无音视频
:: vcodec:指定视频编码器,copy只拷贝,不做编码
:: an:a代表音频,n代表no,无音频。
ffmpeg -i input.mp4 -vcodec copy -an out.mp4
- 音频视频合并
:: -vcodec copy :视频只拷贝,不编解码
:: -acodec copy : 音频只拷贝,不编解码
:: new.mp4 :新生成的文件,文件的长度由两个输入文件的最长的决定
ffmpeg -i out.mp4 -i out.aac -vcodec copy -acodec copy new.mp4
ffmpeg -i 4k.mp4 -i yhdj.aac -vcodec copy -acodec copy 4kh264.mp4
- ffmpeg 将mp3文件转成aac文件
:: ab:码率
:: ar:采样率
:: ac:声道
:: ffmpeg -i xxx.mp3 -acodec aac -strict experimental -ab 128k -ar 16k -ac 2 -y xxx.aac
ffmpeg -i song.mp3 -acodec aac -strict experimental -y output.aac
ffmpeg -i qishi.mp3 -acodec aac qishi.aac
- 提取音频为 aac
ffmpeg -i xxx.mp4 (输入的带有音频的多媒体文件)
-vn (video no 过滤视频元素)
-c:a libfdk_aac (-codec,audio 编码器选择)
-ar 44100 (采样率)
-channels 2(双声道)
-profile:a acc_he_v2 (设置audio的配置文件,用后面的格式)
audio.aac(文件名)
- 提取完整音频
ffmpeg -i input.mp4 -q:a 0 -map a output.mp3
- 提取指定时间段的音频
:: ss:指定开始时间戳;
:: t:指定编码持续时间;
:: 从3分零5秒开始,跨度45秒,即到3分50秒结束;
:: 时间戳必须采用HH:MM:SS.xxx格式或以秒为单位;
:: 如果不指定t选项,则一直到末尾;
ffmpeg -i input.mp4 -ss 00:03:05 -t 00:00:45.0 -q:a 0 -map a output.mp3
ffmpeg -i yhdj.mp3 -ss 00:00:43 -q:a 0 -map a yhdj2.mp3
ffmpeg -i yhdj2.mp3 -acodec aac yhdj.aac
- 修改分辨率
ffmpeg -i hevc_ali.mp4 -vcodec libx265 -s 3840x2160 4kh265.mp4
ffmpeg -i hevc_ali.mp4 -vcodec libx265 -s 2560x1440 2kh265.mp4
ffmpeg -i hevc_ali.mp4 -s 3840x2160 4kh264.mp4
ffmpeg -i hevc_ali.mp4 -s 2560x1440 2kh264.mp4
- 修改长宽比
ffmpeg -i video_input.mp4 -aspect 4:3 video_output.mp4
04 同时录屏和声音
先安装dshow软件 Screen Capturer Recorder, 项目地址:https://sourceforge.net/projects/screencapturer/files/ 。然后查看可用设备名字:
安装 Screen Capturer Recorder 后,设备多出来,“screen-capture-recorder” (video),“virtual-audio-capturer” (audio)
ffmpeg -list_devices true -f dshow -i dummy
[dshow @ 00000225105f2840] “Integrated Camera” (video)
[dshow @ 00000225105f2840] Alternative name “@device_pnp_\?\usb#vid_13d3&pid_5405&mi_00#6&140c2090&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global”
[dshow @ 00000225105f2840] “screen-capture-recorder” (video)
[dshow @ 00000225105f2840] Alternative name “@device_sw_{860BB310-5D01-11D0-BD3B-00A0C911CE86}{4EA69364-2C8A-4AE6-A561-56E4B5044439}”
[dshow @ 00000225105f2840] “麦克风阵列 (英特尔® 智音技术)” (audio)
[dshow @ 00000225105f2840] Alternative name “@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{565DAB5F-4045-4411-AD99-8231ED0F2AC5}”
[dshow @ 00000225105f2840] “virtual-audio-capturer” (audio)
[dshow @ 00000225105f2840] Alternative name “@device_sw_{33D9A762-90C8-11D0-BD43-00A0C911CE86}{8E146464-DB61-4309-AFA1-3578E927E935}”
dummy: Immediate exit requested
录制视频(默认参数)
ffmpeg -f dshow -i video=“screen-capture-recorder” v-out.mp4
录制声音(默认参数)
ffmpeg -f dshow -i audio=“virtual-audio-capturer” a-out.aac
同时录制声音和视频(默认参数)
ffmpeg -f dshow -i video=“screen-capture-recorder”:audio=“virtual-audio-capturer” av-out.mp4
查看视频录制的可选参数
ffmpeg -f dshow -list_options true -i video=“screen-capture-recorder”
ffmpeg -f dshow -i audio=“virtual-audio-capturer” -f dshow -i audio=“麦克风阵列 (英特尔® 智音技术)” -f gdigrab -i desktop -y out.mp4