我正在使用 IP 摄像头,并且我从摄像头获得了 Jpeg 帧和音频数据 (PCM)。
现在,我想根据上述数据创建 .avi 或 .mp4 格式的视频文件(音频和视频)。
我搜索了一下,我知道 ffmpeg 库可以做到。但我不知道如何使用 ffmpeg 来做到这一点。
你能建议我一些示例代码或 ffmpeg 的功能吗?
如果您的目标是编写一个 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 秒一帧。
这里可能出现的问题是:
grep
魔法来获得音频(或视频)的长度。即使这样,同步也可能是较长剪辑的问题。%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.