1.视频和音频单独抓取
如果指定输入格式和设备,则ffmpeg可以直接捕获视频和音频。
Linux下捕获摄像头的数据保存成视频文件:
# ffmpeg -f video4linux2 -s 1280x720 -i /dev/video0 test.mp4
参数介绍:
-s 指定摄像头输出的图像尺寸
-i 摄像头的设备节点
test.mp4 是保存的视频文件名称
-f video4linux2是指定框架
2. Linux下捕获声卡的数据保存成音频文件:
- (1)# ffmpeg -f alsa -ac 2 -ar 44100 -i default out.wav
- 参数介绍:
- -i 指定声卡设备名称。这里default表示选择默认声卡。
- out.wav 捕获的音频数据保存的文件名称
- -f 是指定音频驱动类型。alsa是linux下音频驱动框架。oss是另外一种音频框架。
- -ar <freq> 设置音频采样率,以HZ为单位
- -ac <channels> 设置音频通道数(单声道、双声道)
- (2)# ffmpeg -f alsa -ac 1 -ar 44100 -i default -t 30 out.wav
- 参数介绍:
- -t 30 表示录制30秒就自动停止
-
- (3)# ffmpeg -f alsa -ac 1 -ar 16000 -i hw:0 -t 10 out.wav
- 参数介绍:
- 这里的hw:0 也表示选择默认的声卡设备录音。
列出当前主机上的声卡设备:
- [root@wbyq linux-share-dir]# arecord -l (列出声卡设备数量)
- **** List of CAPTURE Hardware Devices ****
- card 0: AudioPCI [Ensoniq AudioPCI], device 0: ES1371/1 [ES1371 DAC2/ADC]
- Subdevices: 1/1
- Subdevice #0: subdevice #0
- card 1: U0x46d0x825 [USB Device 0x46d:0x825], device 0: USB Audio [USB Audio]
- Subdevices: 0/1
- Subdevice #0: subdevice #0
-
- [root@wbyq linux-share-dir]# arecord -L (列出声卡设备详细信息)
- default
- Default
- front:CARD=AudioPCI,DEV=0
- Ensoniq AudioPCI, ES1371 DAC2/ADC
- Front speakers
- surround40:CARD=AudioPCI,DEV=0
- Ensoniq AudioPCI, ES1371 DAC2/ADC
- 4.0 Surround output to Front and Rear speakers
- iec958:CARD=AudioPCI,DEV=0
- Ensoniq AudioPCI, ES1371 DAC2/ADC
- IEC958 (S/PDIF) Digital Audio Output
- front:CARD=U0x46d0x825,DEV=0
- USB Device 0x46d:0x825, USB Audio
- Front speakers
- surround40:CARD=U0x46d0x825,DEV=0
- USB Device 0x46d:0x825, USB Audio
- 4.0 Surround output to Front and Rear speakers
- surround41:CARD=U0x46d0x825,DEV=0
- USB Device 0x46d:0x825, USB Audio
- 4.1 Surround output to Front, Rear and Subwoofer speakers
- surround50:CARD=U0x46d0x825,DEV=0
- USB Device 0x46d:0x825, USB Audio
- 5.0 Surround output to Front, Center and Rear speakers
- surround51:CARD=U0x46d0x825,DEV=0
- USB Device 0x46d:0x825, USB Audio
- 5.1 Surround output to Front, Center, Rear and Subwoofer speakers
- surround71:CARD=U0x46d0x825,DEV=0
- USB Device 0x46d:0x825, USB Audio
- 7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
- iec958:CARD=U0x46d0x825,DEV=0
- USB Device 0x46d:0x825, USB Audio
- IEC958 (S/PDIF) Digital Audio Output
使用arecord -L命令列出了声卡名字之后,就可以选择指定声卡录制声音,其中front:xxx 就是声卡的名字。
选择指定的声卡录制声音示例:
- (1). 选择USB摄像头的音频设备录音
- # ffmpeg -f alsa -ac 1 -ar 44100 -i front:CARD=U0x46d0x825,DEV=0 -t 10 out.wav
-
- (2). 选择电脑自带的声卡录音
- # ffmpeg -f alsa -ac 1 -ar 44100 -i front:CARD=AudioPCI,DEV=0 -t 10 out.wav
FFMPEG录制音频的其他参数:
- # ffmpeg --help
- 音频选项:
- -aframes number 设置要输出的音频帧数
- -aq quality 设置音频质量(特定于编解码器)
- -ar rate 设置音频采样率(以Hz为单位)
- -ac channel 设置音频通道数
- -an 禁用音频
- -acodec codec 强制音频编解码器复制到流
- -vol volume 更改音频音量(256=正常)
- -af filter_graph 设置音频过滤器
录制带声音的视频
命令示例:
- #ffmpeg -f alsa -ac 1 -ar 44100 -i front:CARD=U0x46d0x825,DEV=0 -f video4linux2 -i /dev/video0 out.mpg
-
- #ffmpeg -f alsa -ac 1 -ar 16000 -i front:CARD=U0x46d0x825,DEV=0 -f video4linux2 -i /dev/video0 out.mp4
录制MP4格式的视频时,音频采样率设置16000效果比较好一些。
采用MP4格式录制视频的详细信息(视频H264、音频AAC):
- Output #0, mp4, to 'out.mp4':
- Metadata:
- encoder : Lavf57.25.100
- Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv422p, 640x480, q=-1--1, 30 fps, 15360 tbn, 30 tbc
- Metadata:
- encoder : Lavc57.24.102 libx264
- Side data:
- unknown side data type 10 (24 bytes)
- Stream #0:1: Audio: aac (LC) ([64][0][0][0] / 0x0040), 16000 Hz, mono, fltp, 69 kb/s
- Metadata:
- encoder : Lavc57.24.102 aac
- Stream mapping:
- Stream #1:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
- Stream #0:0 -> #0:1 (pcm_s16le (native) -> aac (native))
采用MPG格式录制视频的详细信息(视频mpeg1video、音频mp2):
- Output #0, mpeg, to 'out.mpg':
- Metadata:
- encoder : Lavf57.25.100
- Stream #0:0: Video: mpeg1video, yuv420p, 640x480, q=2-31, 200 kb/s, 30 fps, 90k tbn, 30 tbc
- Metadata:
- encoder : Lavc57.24.102 mpeg1video
- Side data:
- unknown side data type 10 (24 bytes)
- Stream #0:1: Audio: mp2, 48000 Hz, mono, s16, 384 kb/s
- Metadata:
- encoder : Lavc57.24.102 mp2
- Stream mapping:
- Stream #1:0 -> #0:0 (rawvideo (native) -> mpeg1video (native))
- Stream #0:0 -> #0:1 (pcm_s16le (native) -> mp2 (native)