如何修补 ffmpeg 中的源?

如何修补 ffmpeg 中的源?

我确信之前已经讨论过这个问题,但是我不明白。


如果我想以 30fps 的速度捕获 3 个屏幕(3 个宽,1 个高)的最右侧,所有屏幕都是 1920x1080,我会这样做:

ffmpeg \
    -f x11grab -r 30 -s 1920x1080 -i :0.0+3840,0 \
    test.mkv

基于此

成功了,制作出了一段无声视频。到目前为止,一切顺利。


现在我想为其添加单声道音轨,取自 32 通道 USB 接口的第 3 通道,所以我首先这样做???:

ffmpeg \
    -f alsa -ac 32 -i plughw:CARD=XUSB,DEV=0 \
    -f x11grab -r 30 -s 1920x1080 -i :0.0+3840,0 \
    test.mkv

基于此

我想象这会给我一个包含 32 个未压缩音轨的视频文件。一旦我看到它起作用了,我就可以再添加一行命令来过滤掉我想要的音轨,然后再添加一两行来压缩音频和视频。但事实上,它仍然给了我一个沉默的视频,以及运行时终端中的一堆“ALSA buffer xruns”。

我无法将硬件重新修补到通道 1(显示裁剪的屏幕截图),因为通道 1 和 2 是用于不同、同时使用的立体声对,并且接收应用程序仅有的关心 1&2。因此广播必须到那里,我需要选择频道 3 或更高频道作为附加录制视频的单声道音轨。

在此处输入图片描述

我无法使用广播应用来录制此内容,因为广播需要与录制不同,并且该应用只能进行一次流式传输。如果尚未绑定,那么我可以将它用于本次录音(音频修补至 1&2),它会非常简单。

但是由于录制的所有组件都已存在,我想我只需在启动脚本中添加几行代码,就可以在后台将它们整合在一起。活动结束后,“哦,看!还有录音!它与广播不同,就像我们想要的那样。”

我无法想象没有人将这种特殊用途记录为一个有效的例子,尽管数字可能有所不同,但我似乎找不到它。

我的具体情况是与一些远程参与者开会,广播会向远程人员提供信息,但不将他们的信息循环回传给他们,并且录制需要包括所有人。
但我可以看到用于游戏或软件演示等的几乎相同的配置。


单独录制音频确实有效,使用 arecord:

arecord \
    --device=plughw:CARD=XUSB,DEV=0 --channels=32 --file-type=wav --format=S32_LE --rate=48000 \
    test.wav

这给了我一个 32 轨 wav 文件,根据 Audacity,所有文件都是正确的。
(这是此界面支持的唯一格式 - 它就是这样)

这让我稍微确信它可以起作用不知何故。我似乎找不到一个合适的例子,将第 3 频道或更高频道作为单声道音轨带到单独的视频源。

答案1

这是我所缺少的:
https://ffmpeg.org/ffmpeg-devices.html#jack

使用它作为音频源而不是 ALSA,它会创建一个 Jack 设备,其名称和通道数由您在命令行中指定。此处显示的示例是名为“ffmpeg_meeting”的 1 个通道(单声道)。然后另一个命令(或 UI 操作)可以连接到您想要的任何设备:

在此处输入图片描述

当然,必须安装并运行 Jack 才能使其工作。:-)

相关内容