RSS订阅专注X86/ARM架构技术
博客交流QQ群693563350 赞助本站
你现在的位置:网站首页 / 影音娱乐 / 正文内容

使用ffmpeg录制电脑屏幕和摄像头并进行直播

21410 影音娱乐 | 2020年02月09日

在Windows下用DirectShow滤镜

首先需要安装一个软件,screen capture recorder

编译好的下载地址是:

http://sourceforge.net/projects/screencapturer/files/

博士安装的版本:https://nchc.dl.sourceforge.net/project/screencapturer/Setup%20Screen%20Capturer%20Recorder%20v0.12.10.exe

安装完DirectShow滤镜后使用下面命令查看声卡、麦克风、显卡名称

ffmpeg -list_devices true -f dshow -i dummy

系统输出大致如下:

[dshow @ 000000000054fc40] DirectShow video devices (some may be both video and
audio devices)
[dshow @ 000000000054fc40]  "screen-capture-recorder"
[dshow @ 000000000054fc40] DirectShow audio devices
[dshow @ 000000000054fc40]  "麦克风 (Realtek High Definition Au"
[dshow @ 000000000054fc40]     Alternative name "@device_cm_{33D9A762-90C8-11D0-
BD43-00A0C911CE86}\麦克风 (Realtek High Definition Au"
[dshow @ 000000000054fc40]  "virtual-audio-capturer"

ffmpeg已经可以捕获到DirectShow视频和音频设备了

"screen-capture-recorder"是桌面捕获设备,如果电脑上连有摄像头也会列出来

"virtual-audio-capturer"是声卡音频捕获设备


录制声卡声音

ffmpeg -f dshow -i audio="virtual-audio-capturer" -acodec mp3 D:\live\1.mp3

如果要录制麦克风只要将引号内的内容替换成麦克风对应的名称就可以了。

如果要录制320kbps的可以参考下面录制参数

ffmpeg -f dshow -i audio="virtual-audio-capturer" -acodec mp3 -ar 44100 -ab 320k -ac 2 D:\live\1.mp3

-acodec 输入编码器,不输入也可以,ffmpeg会自动根据后缀名选择编码器

-ar rate 指定采样频率,不指定采样频率会根据输入音视频的采样频率

-ab audio byte rates 指定比特率,如果不输入默认是128K,这点就有点坑了。128K作为视频的音轨比较合适,但是这个音质作为单纯的音频来说还是基本上是最低音质,平时我们在手机里听听的水平。

-ac audio channel 指定声道数


使用gdi全屏录制电脑屏幕

ffmpeg -f gdigrab -framerate 30 -offset_x 0 -offset_y 0 -i desktop -vcodec libx264 -f mp4 D:\live\out5.mp4

同时捕获桌面和声卡声音并录制成mp4文件

ffmpeg -f gdigrab -framerate 30 -offset_x 0 -offset_y 0 -i desktop -vcodec h264 -f dshow -i audio="virtual-audio-capturer" -acodec mp3 -f mp4 D:\live\5.mp4

使用dshow同时捕获桌面和声卡声音并录制成mp4文件

ffmpeg -f dshow -i video="screen-capture-recorder" -framerate 30 -vcodec h264 -f dshow -i audio="virtual-audio-capturer" -acodec mp3 -preset:v ultrafast -tune:v zerolatency -f mp4 D:\live\11.mp4

使用dshow可能会出现[dshow @ 00000241b451b280] real-time buffer [screen-capture-recorder] [video input] too full or near too full (378% of size: 3041280 [rtbufsize parameter])! frame dropped!的问题,暂时没办法解决!

说明:

- gdigrab:表明我们是通过gdi抓屏的方式;

- -framerate 30:表示我录制的帧率为30;

- -offset_x :左上偏移量X;

- -offset_y :左上偏移量Y;

- -video_size:需要录制的宽度和高度,这是我是整个屏幕 -video_size 1600x900;

- -i:输入路径和名称以及格式mpg;

-desktop:告诉ffmpeg我们录的是屏幕,而不是一个窗口(可以录制一个窗口,不过得用窗口的ID)。


电脑屏幕推流直播

ffmpeg -f gdigrab -framerate 30 -offset_x 0 -offset_y 0 -i desktop -vcodec libx264 -f hls -hls_time 2.0 -hls_list_size 5 -hls_wrap 5 C:\Users\Administrator\Documents\caddy\www\test1\index.m3u8


摄像头应用

拿到摄像头名称后替换掉下面的“USB2.0 PC CAMERA”这个名称即可推流或者录制成文件

使用下面命令采集摄像头视频后推流

ffmpeg -f dshow -i video="USB2.0 PC CAMERA" -vcodec libx264 -acodec copy -preset:v ultrafast -tune:v zerolatency -f hls -hls_time 2.0 -hls_list_size 5 -hls_wrap 5 C:\Users\Administrator\Documents\caddy\www\test1\index.m3u8


推送本地视频文件以及轮播

推送本地视频

ffmpeg -re -i 1.mp4 -vcodec libx264 -acodec aac -f hls -hls_time 2.0 -hls_list_size 5 -hls_wrap 5 C:\Users\Administrator\Documents\caddy\www\test1\index.m3u8

视频轮播

ffmpeg -threads 16 -re -f concat -i "list.txt" -r 30 -s 854x480 -b:a 320k -ar 44100 -crf 28 -f hls -hls_time 4 -hls_list_size 4 -hls_wrap 8 C:\Users\Administrator\Documents\caddy\www\test1\index.m3u8

视频轮播魔改版代码

ffmpeg -threads 8 -max_interleave_delta 0 -re -f concat -i  "list.txt" -c:v libx264 -crf 25 -r 30 -s 1280x720 -b:a 320k -ar 44100 -f hls -hls_time 2 -hls_list_size 12 -hls_wrap 50 C:\Users\Administrator\Documents\caddy\www\test1\index.m3u8

视频轮播列表文件list.txt编写格式

file '1.mp4'
file '2.mp4'
...


上一篇:使用ffmpeg下载m3u8视频

下一篇:消耗VPS流量工具

猜你喜欢

Title - Artist
0:00

    分享:

    支付宝

    微信