2

我正在使用 IP 摄像头,并且我从摄像头获得了 Jpeg 帧和音频数据 (PCM)。

现在,我想根据上述数据创建 .avi 或 .mp4 格式的视频文件(音频和视频)。

我搜索了一下,我知道 ffmpeg 库可以做到。但我不知道如何使用 ffmpeg 来做到这一点。

你能建议我一些示例代码或 ffmpeg 的功能吗?

4

1 回答 1

1

如果您的目标是编写一个 c++ 应用程序来为您执行此操作,请忽略此答案,我将其留在这里以供将来参考。如果没有,您可以在 bash 中执行以下操作:

首先,确保您的图像格式良好,易于 ffmpeg 处理。您可以将图像复制到其他目录:

mkdir tmp
x=1; for i in *jpg; do counter=$(printf %03d $x); cp "$i" tmp/img"$counter".jpg; x=$(($x+1)); done

将音频数据复制到 tmp 目录并对视频进行编码。假设您的相机每十秒拍一张照片:

cd tmp
ffmpeg -i audio.wav -f image2 -i img%03d.jpg -vcodec msmpeg4v2 -r 0.1 -intra out.avi

其中-r 0.1表示帧速率为 0.1,即每 10 秒一帧。

这里可能出现的问题是:

  • 除非您提前仔细计算所需的帧速率,否则您的音频/视频可能会稍微不同步。您应该能够使用 ffmpeg 和一些grep魔法来获得音频(或视频)的长度。即使这样,同步也可能是较长剪辑的问题。
  • 如果您有超过 999 个图像,%03d格式将不够,请确保将3索引更改为所需的长度
  • 视频将从较长的流中继承其长度,您可以使用-t开关限制它:

    -t duration-Restrict the transcoded/captured video sequence to the duration specified in seconds. "hh:mm:ss[.xxx]" syntax is also supported.

于 2012-03-25T22:08:01.890 回答