第16章-采集

采集

采集包括录屏、录音、使用摄像头捕获画面。

列出有哪些设备

Linux

ffmpeg -devices

-w478

列出V4L2可用的像素格式

ffmpeg -list_formats all -f v4l2 -i /dev/video0

-w1179
-w789

macOS

ffmpeg -devices

-w531

列出avfoundation可用的设备:

ffmpeg -list_devices true -f avfoundation -i ''

-w739
-w673

Windows

ffmpeg -devices

-w478

ffmpeg -list_devices true -f dshow -i ''

-w1324
-w1401

录屏

Linux

1
2
ffplay -f x11grab \
-i :0.0
1
2
3
ffmpeg -f x11grab \
-i :0.0 \
out.mp4

macOS

1
2
3
4
ffplay -f avfoundation \
-pixel_format nv12 \
-probesize 10M \
-i 'Capture screen 0'
1
2
3
4
5
ffmpeg -f avfoundation \
-pixel_format nv12 \
-probesize 10M \
-i 'Capture screen 0' \
out.mp4

不加入-probesize选项,会出现警告:not enough frames to estimate rate; consider increasing probesize

Windows

1
2
3
ffplay -f gdigrab \
-probesize 10M \
-i desktop
1
2
3
4
ffmpeg -f gdigrab \
-probesize 10M \
-i desktop \
out.mp4

采集摄像头画面 & 采集声音

Linux

1
2
3
4
5
6
ffplay -f v4l2 \
-framerate 24 \
-video_size 640x480 \
-i /dev/video0 \
-f alsa \
-i default
1
2
3
4
5
6
7
ffmpeg -f v4l2 \
-framerate 24 \
-video_size 640x480 \
-i /dev/video0 \
-f alsa \
-i default \
out.mp4

macOS

1
2
3
4
5
ffplay -f avfoundation \
-video_size 640x480 \
-framerate 30 \
-pixel_format nv12 \
-i 'FaceTime高清摄像头(内建):外置麦克风'
1
2
3
4
5
6
ffmpeg -f avfoundation \
-video_size 640x480 \
-framerate 30 \
-pixel_format nv12 \
-i 'FaceTime高清摄像头(内建):外置麦克风' \
out.mp4

Windows

1
2
3
ffplay -rtbufsize 256M \
-f dshow \
-i "video=VMware Virtual USB Video Device:audio=Microphone (High Definition Audio Device)"
1
2
3
4
ffmpeg -rtbufsize 256M \
-f dshow \
-i "video=VMware Virtual USB Video Device:audio=Microphone (High Definition Audio Device)" \
out.mp4

不加入-rtbufsize选项,可能会出现这样的警告信息:real-time buffer [XXX XXX XXX] [video input] too full or near too full (80% of size: 3041280 [rtbufsize parameter])! frame dropped!,将其设置为较大的值就可以解决

实战:采集视频,添加旋转的水印(徽标),并播放

Linux

1
2
3
4
5
6
7
8
9
10
ffmpeg -f v4l2 \
-framerate 24 \
-video_size 640x480 \
-i /dev/video0 \
-loop true \
-i linux-logo-64.png \
-filter_complex "[1:v]format=pix_fmts=rgba,rotate=PI/6*t:ow=hypot(iw\,ih):oh=ow:c=0x00000000[logo];[0:v][logo]overlay=x=(W-w)/2:y=(H-h)/2" \
-pix_fmt yuv420p \
-f sdl \
''
1
2
3
4
5
6
7
8
ffmpeg -f lavfi \
-i testsrc \
-loop true \
-i linux-logo-64.png \
-filter_complex "[1:v]format=pix_fmts=rgba,rotate=PI/6*t:ow=hypot(iw\,ih):oh=ow:c=0x00000000[logo];[0:v][logo]overlay=x=(W-w)/2:y=(H-h)/2" \
-pix_fmt yuv420p \
-f sdl \
''

macOS

-loop 选项

1
2
3
4
5
6
7
8
9
10
11
ffmpeg -f avfoundation \
-video_size 640x480 \
-framerate 30 \
-pixel_format nv12 \
-i 1 \
-loop true \
-i linux-logo-64.png \
-filter_complex "[1:v]format=pix_fmts=rgba,rotate=PI/6*t:ow=hypot(iw\,ih):oh=ow:c=0x00000000[logo];[0:v][logo]overlay=x=(W-w)/2:y=(H-h)/2" \
-pix_fmt yuv420p \
-f sdl \
''

loop 滤镜

1
2
3
4
5
6
7
8
9
ffmpeg -f avfoundation \
-video_size 640x480 \
-framerate 30 \
-pixel_format nv12 \
-i 1 \
-vf "movie=filename=linux-logo-64.png,loop=loop=-1:size=1,format=pix_fmts=rgba,rotate=a=PI/6*t:ow=hypot(iw\,ih):oh=ow:c=0x00000000[logo],[in][logo]overlay=x=(W-w)/2:y=(H-h)/2" \
-pix_fmt yuv420p \
-f sdl \
''

Windows

loop 滤镜

1
2
3
4
5
6
7
ffmpeg -rtbufsize 1024M \
-f dshow \
-i "video=VMware Virtual USB Video Device" \
-vf "movie=filename=linux-logo-64.png,loop=loop=-1:size=1,format=rgba,rotate=a=PI/6*t:ow=hypot(iw\,ih):oh=ow:c=0x00000000[logo],[in][logo]overlay" \
-pix_fmt yuv420p \
-f sdl \
' '

还记得在第03章提到的内容吗?在Windows中,输出文件名不能是空字符串,但可以是空白字符串:-f sdl后面的' '


第16章-采集
https://daniate.github.io/2021/11/20/ffmpeg-cli/第16章-采集/
作者
Daniate
发布于
2021年11月20日
许可协议