2009-08-19 108 views
4

我目前正在编写一个应用程序,从相机读取帧,修改它们,并将它们保存到视频文件中。我打算用ffmpeg来做。很少有关于ffmpeg的文档。我找不到方法。有没有人知道如何去做?如何将帧写入视频文件?

我需要它在unix和C或C++上完成。有没有人可以提供一些指导?

谢谢。

编辑:

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

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

任何意见表示赞赏。

回答

4

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

这些帧需要按顺序编号。

ffmpeg -f image2 -r 25 -i frame_%d.jpg -vcodec libx264 -vpre hq -crf 22 video.mp4 
  • -f定义格式
  • -r定义帧速率
  • -i定义了输入文件/秒... %d指定编号的文件..添加0的 指定填充
  • -vcodec选择视频编解码器
  • -vpre指定使用压力等叫HQ
  • -crf指定速率控制方法,用于定义X264流是如何 编码
  • video.mp4是输出文件
0

如果除ffmpeg之外的其他解决方案对您而言可行,您可能需要查看GStreamer。我认为这可能对你的情况来说是正确的,并且有很多文件。

0

你可以做你需要什么,而无需使用库,如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自动使用第二个处理器进行编码的优点。