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 音视频修改

  1. 提取音频
:: acodec :指定音频编码器,copy只拷贝,不做编码
:: vn:v代表视频,n代表no,无视频
ffmpeg -i input.mp4 -acodec copy -vn out.aac
  1. 提取无音视频
:: vcodec:指定视频编码器,copy只拷贝,不做编码
:: an:a代表音频,n代表no,无音频。
ffmpeg -i input.mp4 -vcodec copy -an out.mp4
  1. 音频视频合并
:: -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
  1. 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
  1. 提取音频为 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(文件名)
  1. 提取完整音频
ffmpeg -i input.mp4 -q:a 0 -map a output.mp3
  1. 提取指定时间段的音频
:: 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
  1. 修改分辨率
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
  1. 修改长宽比
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