如何在gstreamer中录制音频和视频

Posted

技术标签:

【中文标题】如何在gstreamer中录制音频和视频【英文标题】:how to record audio and video in gstreamer 【发布时间】:2018-03-14 05:18:44 【问题描述】:

我是 gstreamer 的新手,我想同时录制音频和视频并将其保存为 .mp4 格式,使用网络摄像头录制视频和使用 MIC 录制音频 这是我的管道

gst-launch-1.0 -e v4l2src !队列 ! x264enc ! h264解析!队列 ! qtmux0.阿尔萨斯! '音频/x-raw,速率=44100,深度=24'!音频转换!音频重采样!呸!不一样! qtmux!文件接收器位置=test.mp4

当我执行它时,视频只录制了 10 秒,音频甚至没有录制,它给出了一些类似的消息

警告:来自元素 /GstPipeline:pipeline0/GstAlsaSrc:alsasrc0:无法足够快地录制音频 附加调试信息: gstaudiobasesrc.c(866): gst_audio_base_src_create (): /GstPipeline:pipeline0/GstAlsaSrc:alsasrc0: 丢弃了 425565 个样本。这很可能是因为下游无法跟上并且消耗样本太慢。

提前帮助我度过难关

【问题讨论】:

【参考方案1】:

尝试使用以下管道将音频和视频录制到一个文件中。

gst-launch-1.0 -e v4l2src device="/dev/video0" ! videoconvert ! queue ! x264enc tune=zerolatency ! mux. alsasrc device="hw:2" ! queue ! audioconvert ! audioresample ! voaacenc ! aacparse ! qtmux name=mux ! filesink location=test.mp4 sync=false

【讨论】:

【参考方案2】:

现在有了管道,它可以完美地录制音频和视频

这里是管道

gst-launch-1.0 -e v4l2src ! 'video/x-raw,width=960,height=720,framerate=30/1' !队列 ! x264enc 调=零延迟!多路复用器。阿尔萨斯!音频/x-raw,width=16,depth=16,rate=44100,channel=1 !队列 !音频转换!音频重采样!呸!不一样! qtmux 名称=mux !文件接收位置=test.mp4 同步=false

如果管道中仍有任何不正确的地方,请告诉我

【讨论】:

【参考方案3】:

我最终使用了那个(改编自网络的随机回复,抱歉我丢失了来源)

raspivid -t 0 --vflip --hflip -w 1920 -h 1080 -fps 30 --bitrate 14000000 --profile baseline -3d sbs --intra 30 --inline --flush --awb auto --exposure auto --sharpness 0 --contrast -15 --digitalgain 0.0 -o - | gst-launch-1.0 -ve fdsrc num-buffers=-1 ! video/x-h264,width=1920,height=1080,framerate=30/1 ! h264parse ! queue ! smux.video alsasrc device=hw:2,0 ! audio/x-raw,format=S32LE,rate=48000,channel=2 ! audioconvert ! avenc_aac ! aacparse ! queue ! smux.audio_0 splitmuxsink name=smux location=video.mp4 muxer=mpegtsmux

注意它是用于捕捉立体图像,您可以删除“-3d sds”并调整单个凸轮的宽度。您还可以安全地删除仅对调试有用的 -ve 并将您的音频设备硬件更改为您的采集卡的编号($ arecord -l 以找出您的卡的 ID)。

我更喜欢使用 qtmux,但由于 raspivid 制作的 h264 流中缺少 PTS 信息而失败。 mpegtsmux 很高兴。

截至目前,生成的 mpeg 已损坏一半,无法被所有玩家读取(quicktime 失败,而 vlc 很高兴)。使用 ffmpeg 重新编码:ffmpeg -vcodec mpeg4 -b:v 7561k -qscale:v 2 -acodec aac -ac 2 -async 1 -strict experimental ./video2.mp4 -threads 0 -i video.mp4 修复了文件。

希望这对某人有所帮助。

【讨论】:

以上是关于如何在gstreamer中录制音频和视频的主要内容,如果未能解决你的问题,请参考以下文章

Gstreamer 录制带音频的视频

如何在 gstreamer 中混合音频和视频

即使录制意外中断(例如电源断开),如何在 gstreamer 中录制可播放的视频文件?

GTK3.0中如何使用gstreamer同时播放视频和音频

使用 gstreamer 在 android 上录制音频(使用 Qt5)

如何使用 GStreamer 以编程方式创建视频(来自 RGB 和 PCM)?