通过 avconv 录制并显示 Kinect 音频和视频

通过 avconv 录制并显示 Kinect 音频和视频

我正在尝试使用 avconv 从 Kinect 录制音频和视频,但似乎无法指定正确的选项。

avconv -f video4linux2 -video_size 640x480 -c:v h264 -c:a ac3 -i /dev/video1 test.mp4

结果是:

avconv: /build/buildd/libav-extra-0.8.3ubuntu0.12.04.1/libav/libavutil/mathematics.c:79: av_rescale_rnd: Assertion `c > 0' failed.
Aborted (core dumped)

Cheese 非常乐意录制 Kinect 的音频和视频,所以这不是设置问题。为了增加乐趣,我还需要同时显示视频。

答案1

正确的 avconv 用法是:

avconv [global options] [input options] -i input [output options] output

你把所有选项都放在输入之前,所以 avconv 会将它们全部视为输入选项。这样会更好:

avconv -f video4linux2 -i /dev/video1 -s 640x480 -c:v libx264 -c:a ac3 test.mp4

默认设置可能并不适合您;对于 libx264,您可能需要设置 -crf 值(介于 0 和 51 之间,23 是默认值,18-28 是合理的使用范围,越低=质量越好,但文件越大)和 -preset(我通常使用 veryfast)。有关更多信息,请参阅这里。通常我建议对音频使用 VBR 编码,但我不太了解 AC3 编码,因此您可能需要使用固定比特率(-b:a 192k 可能对立体声来说是可以的)。

此外,调整视频大小可能没有必要,仅-s 640x480当您需要将较大的输入缩小到该尺寸时才使用。

至于边录制边查看,我能想到两种解决方案。第一种是使用您喜欢的视频播放器软件打开您正在创建的文件。这意味着观看会稍微延迟。

第二种解决方案是将 avconv 的第二个输出发送到 stdout,然后使用 I/O 重定向将信息输入到视频播放器。这样会更快,但需要大约两倍的处理能力,因为目前 avconv 只能通过第二次编码来实现这一点(这可能会在未来发生变化)。

avconv -f video4linux2 -i /dev/video1 -s 640x480 -c:v libx264 -c:a ac3 test.mp4 \
-s 640x480 -c:v libx264 -c:a ac3 -f mp4 - | vlc -

我使用 VLC 作为示例,但我知道的所有 Linux 视频播放器都可以做到这一点。由于 avconv 通常根据文件扩展名确定要使用的容器格式,但-(stdout) 没有,因此您必须使用 声明容器格式-f mp4

答案2

我无法使上述方法发挥作用,但我能够使流媒体发挥作用。

streamer -q -c /dev/video0 -f rgb24 -r 3 -t 00:30:00 -o ~/outfile.avi

我也在玩 Kinect。音频还没能用上。

相关内容