有一个 IP 网络摄像头,我前段时间编写了一个 .NET 类。它基本上是一个 Timer 实现,每五秒从相机 ping 一个快照 CGI 脚本。相机本身非常简陋。它没有任何类型的 API 可供我使用,我唯一能以编程方式(远程)执行的操作就是调用此脚本。该脚本返回 640x480 JPEG 图像。简单的。
现在我需要做的是花几天时间处理这些图像,并从中创建一个“延时”AVI 视频流,最终将嵌入到网页中。如何使用 VB.NET 做到这一点?
有一个 IP 网络摄像头,我前段时间编写了一个 .NET 类。它基本上是一个 Timer 实现,每五秒从相机 ping 一个快照 CGI 脚本。相机本身非常简陋。它没有任何类型的 API 可供我使用,我唯一能以编程方式(远程)执行的操作就是调用此脚本。该脚本返回 640x480 JPEG 图像。简单的。
现在我需要做的是花几天时间处理这些图像,并从中创建一个“延时”AVI 视频流,最终将嵌入到网页中。如何使用 VB.NET 做到这一点?
.net 不直接支持视频格式。您最好的选择是使用第 3 方工具来生成 .avi。
ffmpeg 是一种选择。您可以通过这样的命令行直接访问它:
ffmpeg -f image2 -i img%d.jpg /output/a.mpg
您需要将图像命名为 img1.jpg、img2.jpg 等。有关更多详细信息,请参阅ffmpeg 常见问题。您还应该在常见问题解答中找到有关如何输出不同视频格式的详细信息。
您可以使用Process.Start()从 vb 启动一个进程。像这样的东西:
Process.Start("ffmpeg.exe", "-f image2 -i img%d.jpg /output/a.mpg")
您还可以查看ffmpeg-sharp或Tao.FFmpeg,它们是 ffmpeg 库的 .net 包装器。我没有亲自尝试过,但看起来它可能会帮助你。
另一种选择是查看MEncoder,它具有类似的功能。您应该能够为此工具查找类似的命令行。
[相关SO问题:271003 ]
这是 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 函数支持的语法相同,但仅适用于接受普通整数的格式。