树莓派利用ffmpeg获取视频采集卡数据

视频采集卡的用法很多,但是搭配树莓派(pi4)后能不能完成相关任务。本文将一探究竟,仅将必要步骤记录。

1、简介

在linux系统下,ffmpeg通过不同的方式获取视频和音频。这样的话,需要分别获取视频采集卡的视频流和音频流,之后进行合并即可。

2、视频流

查找采集卡设备(视频设备),键入如下命令:

v4l2-ctl --list-devices
图片

通过上面的设备信息,经过测试后可以确定/dev/video0是采集卡音频流设备。

可以使用下面的命令测试视频流(只有图像,无声音):

ffplay -f v4l2 -framerate 20 -video_size 1280x720 -i /dev/video0 

3、音频流

查找采集卡设备(音频设备),键入如下命令:

arecord -L
图片
图片

通过上面的信息,经过几次测试后确定采集卡音频流设备为plughw:CARD=MS2109,DEV=0

可以使用下面的命令测试音频流设备(只有音频,没有视频):

ffplay -f alsa -ac 2 -i plughw:CARD=MS2109,DEV=0

4、数据压缩

获得视频流和音频流后,需要进行数据压缩。参考命令如下:

ffmpeg 
        -c:v libx264 -b:v 1600k -preset ultrafast 
        -x264opts keyint=50 -g 25 -pix_fmt yuv420p 
        -c:a aac -b:a 128k 

上述命令中的参数请自行查找资料。

5、生成文件

经过步骤1、2和3后,可以输出文件out.mp4,并保存在本地。

参考命令如下:

ffmpeg 
        -f v4l2 -framerate 20 -video_size 1280x720 -i /dev/video0 
        -f alsa -ac 2 -i plughw:CARD=MS2109,DEV=0 
        -c:v libx264 -b:v 1600k -preset ultrafast 
        -x264opts keyint=50 -g 25 -pix_fmt yuv420p 
        -c:a aac -b:a 128k 
        out.mp4

6局域网推流

ffmpeg可以把视频推流到局域网,参考命令如下:

ffmpeg 
        -f v4l2 -framerate 20 -video_size 1920x1080 -i /dev/video0 
        -f alsa -ac 2 -i plughw:CARD=MS2109,DEV=0 
        -c:v libx264 -b:v 1600k -preset ultrafast 
        -x264opts keyint=50 -g 25 -pix_fmt yuv420p 
        -c:a aac -b:a 128k 
        -f rtp_mpegts rtp://192.168.3.4:5001?ttl=2

局域网中的设备可以使用VLC打开url,并键入下面一行内容后即可观看视频卡采集的声像:

rtp://192.168.3.4:5001

参考资料:

 How to capture with acquisition card on Linux  

https://trac.ffmpeg.org/wiki/Capture/V4L2_ALSA

作者:Fista 来源:公众号——明越日记

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论