如何写帧的视频文件?(How to write frames to a video file?)

2019-07-01 12:15发布

我目前正在写,从相机读取帧的应用程序,修改它们,并将它们保存为一个视频文件。 我刨的有关ffmpeg做。 有很少是关于ffmpeg的文档。 我不能找到一种方法。 请问哪位知道怎么办呢?

我需要的是在UNIX上完成,并在C或C ++。 有哪位能提供一些指导?

谢谢。

编辑:

对不起,我没有写清楚。 我想一些开发人员API写帧的视频文件。 我打开摄像头流,我得到的每一个帧,然后我把它们保存到与FFmpeg的公共API提供这些API的视频文件。 因此,使用命令行工具实际上没有帮助我。 而且我ffmpeg的src文件夹下看到output_example.c。 这是非常伟大的,我可以直接复制代码的某些部分没有变化。 我仍然在寻找一个更简单的方法。

另外,我想我的移植应用的iPhone,据我所知,只有ffmpeg的已被移植在iPhone上的。 GStreamer是基于油腔滑调,和它的所有GNU的东西。 我不知道如果我能得到它在iPhone上运行。 所以ffmpeg的仍然是最好的选择现在。

任何意见表示赞赏。

Answer 1:

这可能会帮助您开始 - 文档是可用的,但新功能往往在FFmpeg的手册页被记录在案。

帧需要被顺序编号。

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


Answer 2:

如果其他解决方案比ffmpeg的是你是可行的,你可能想看看GStreamer的 。 我认为,这可能只是正确的事情你的情况,并有相当一些文件在那里。



Answer 3:

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



文章来源: How to write frames to a video file?