我曾经为一款IP网络摄像头编写了一个.NET类。这基本上是一个计时器实现,每五秒钟向摄像头的快照CGI脚本发送一个ping请求。摄像头本身非常简陋。它没有任何可以供我使用的API,我唯一能够通过程序(远程)执行的操作就是调用此脚本。该脚本返回一个640x480的JPEG图像。很简单。
现在我需要能够将一整天的这些图像拼接成一个“时间流逝”的AVI视频流,并最终将其嵌入到网页中。我该如何使用VB.NET完成这个任务?
我曾经为一款IP网络摄像头编写了一个.NET类。这基本上是一个计时器实现,每五秒钟向摄像头的快照CGI脚本发送一个ping请求。摄像头本身非常简陋。它没有任何可以供我使用的API,我唯一能够通过程序(远程)执行的操作就是调用此脚本。该脚本返回一个640x480的JPEG图像。很简单。
现在我需要能够将一整天的这些图像拼接成一个“时间流逝”的AVI视频流,并最终将其嵌入到网页中。我该如何使用VB.NET完成这个任务?
.net不直接支持视频格式。您最好的选择是使用第三方工具生成.avi文件。
ffmpeg是其中之一。您可以通过命令行直接访问它,如下所示:
ffmpeg -f image2 -i img%d.jpg /output/a.mpg
您需要将图片命名为img1.jpg,img2.jpg等。更多详细信息请参见ffmpeg faq。您还可以在faq中找到有关如何输出不同视频格式的详细信息。
您可以使用Process.Start()从vb启动进程。类似这样:
Process.Start("ffmpeg.exe", "-f image2 -i img%d.jpg /output/a.mpg")
这是Codeproject上某个人编写的C#封装器:
http://www.codeproject.com/KB/audio-video/avifilewrapper.aspx
那个包装器应该为您提供所需的内容。
有几个命令行工具可以接收一系列图像并输出AVI文件。我建议您从应用程序中调用其中之一。
我可以提供建议的链接,但是我已经多年没有使用过了。
编辑:显然您可以使用ffmpeg来完成此操作:http://ffmpeg.org/ffmpeg-doc.html
用多张图片创建视频:
ffmpeg -f image2 -i foo-%03d.jpeg -r 12 -s WxH foo.avi
foo-%03d.jpeg语法指定使用由三个数字组成的十进制数,前导零用于表示序列号。这与C printf函数支持的语法相同,但只适用于接受普通整数的格式。