如何将帧写入视频文件?

unix video ffmpeg video-streaming avi

2410 观看

3回复

1058 作者的声誉

我目前正在编写一个应用程序,它从相机读取帧,修改它们,并将它们保存到视频文件中。我正计划用ffmpeg来做。关于ffmpeg的文档很少。我找不到办法。有谁知道怎么做?

我需要在unix上,在C或C ++中完成它。有没有可以提供一些指示?

谢谢。

编辑:

对不起,我写得不清楚。我想要一些开发人员API将帧写入视频文件。我打开相机流,我得到每一帧,然后我将它们保存到视频文件中,这些API在ffmpeg的公共api中可用。所以使用命令行工具实际上并没有帮助我。我在ffmpeg src文件夹下看到了output_example.c。我可以直接复制代码的某些部分而不做任何更改。我仍然在寻找一种更简单的方法。

此外,我想将我的应用程序移植到iPhone,据我所知,只有ffmpeg已经移植到iPhone上。GStreamer基于glib,它是所有GNU的东西。我不确定我是否可以在iPhone上使用它。所以ffmpeg仍然是现在最好的选择。

任何评论表示赞赏。

作者: Mike Chen 的来源 发布者: 2009 年 8 月 19 日

回应 (3)


0

36883 作者的声誉

如果除了ffmpeg之外的其他解决方案对您来说可行,您可能需要查看GStreamer。我认为这对你的案子来说可能是正确的,并且那里有相当多的文件。

作者: balpha 发布者: 19.08.2009 11:11

4

6894 作者的声誉

决定

这可能有助于您入门 - 文档可用,但更新的功能往往记录在ffmpeg的手册页中。

帧需要按顺序编号。

ffmpeg -f image2 -framerate 25 -i frame_%d.jpg -c:v libx264 -crf 22 video.mp4
  • -f 定义格式
  • -framerate 定义帧速率
  • -i定义输入文件/ s ... %d指定编号文件..添加0以指定填充,例如,%05d对于零填充的五位数字。
  • -vcodec 选择视频编解码器
  • -crf 指定速率控制方法,用于定义x264流的编码方式
  • video.mp4 是输出文件

有关详细信息,请参阅幻灯片指南

作者: codeinthehole 发布者: 19.08.2009 11:40

0

1066 作者的声誉

您可以在不使用库的情况下执行所需操作,因为在unix中您可以将RGBA数据传输到程序中,因此您可以执行以下操作:

在你的程序中:

char myimage[640*480*4];
// read data into myimage
fputs(myimage,1,640*480*4,stdout);

在运行程序的脚本中:

./myprogram | \
mencoder /dev/stdin -demuxer rawvideo -rawvideo w=640:h=480:fps=30:format=rgba \
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=9000000 \
-oac copy -o output.avi

我相信你也可以用这种方式使用ffmpeg,或x264。您也可以从程序中启动编码器,并写入管道(如果您使用的是库,则整个过程非常简单)。

虽然不是你想要的,也不适合iPhone开发,但它确实具有Unix会自动使用第二个处理器进行编码的优势。

作者: Gordon Williams 发布者: 22.03.2012 08:22
32x32