如何将我通过 Kinect SDK2 从彩色视频流中获得的 jpeg 文件转换为 C# 中的 .AVI
How to convert jpeg files that I got from color video stream by Kinect SDK2 into .AVI in C#
我使用 Kinect SDK 2,C#。
我想用 .AVI 格式保存彩色流。
我获取每一帧并将它们保存为带有序列号的 .jpeg 格式。我不确定用 .png 还是 .jpeg 更好。我需要在我的代码中将这些图像转换为 .AVI 文件。
下面是我如何保存彩色流的图像。你能给我一些建议吗?
private void Reader_ColorFrameArrived(object sender,
ColorFrameArrivedEventArgs e)
{
// ColorFrame is IDisposable
using (ColorFrame colorFrame = e.FrameReference.AcquireFrame())
{
if (colorFrame != null)
{
var bytesPerPixel = (PixelFormats.Bgr32.BitsPerPixel) / 8;
var stride = bytesPerPixel *
colorFrame.FrameDescription.Width;
if (colorRecord == 1)
{
colorFrame.CopyConvertedFrameDataToArray(colorData, format);
var fd = colorFrame.FrameDescription;
// Creating BitmapSource
bmpSource = BitmapSource.Create(fd.Width, fd.Height, 96.0, 96.0, PixelFormats.Bgr32, null, colorData, stride);
// WritableBitmap to show on UI
kinectImage.Source = bmpSource;
kinectImage.Source = colorBitmap;
// JpegBitmapEncoder to save BitmapSource to file
// imageSerial is the serial of the sequential image
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmpSource));
using (var fs = new FileStream("img" + (imageSerial++) + ".jpeg", FileMode.Create, FileAccess.Write))
{
encoder.Save(fs);
}
}
}
我在其中一篇帖子中找到了一些关于 ffmpeg 的信息,但我不明白如何在 c# 中使用它。
好的,我找到了答案。
我找到答案的例子=https://github.com/rafaftahsin/Kinect-v2-Color-Frame-Recorder
我刚把ffmpeg.exe文件放到文件夹里。
然后 运行 代码 = Process.Start("ffmpeg.exe", "-framerate 10 -i img%d.jpeg -c:v libx264 -r 30 -pix_fmt yuv420p kinect_video.mp4");
我使用 Kinect SDK 2,C#。 我想用 .AVI 格式保存彩色流。 我获取每一帧并将它们保存为带有序列号的 .jpeg 格式。我不确定用 .png 还是 .jpeg 更好。我需要在我的代码中将这些图像转换为 .AVI 文件。
下面是我如何保存彩色流的图像。你能给我一些建议吗?
private void Reader_ColorFrameArrived(object sender,
ColorFrameArrivedEventArgs e)
{
// ColorFrame is IDisposable
using (ColorFrame colorFrame = e.FrameReference.AcquireFrame())
{
if (colorFrame != null)
{
var bytesPerPixel = (PixelFormats.Bgr32.BitsPerPixel) / 8;
var stride = bytesPerPixel *
colorFrame.FrameDescription.Width;
if (colorRecord == 1)
{
colorFrame.CopyConvertedFrameDataToArray(colorData, format);
var fd = colorFrame.FrameDescription;
// Creating BitmapSource
bmpSource = BitmapSource.Create(fd.Width, fd.Height, 96.0, 96.0, PixelFormats.Bgr32, null, colorData, stride);
// WritableBitmap to show on UI
kinectImage.Source = bmpSource;
kinectImage.Source = colorBitmap;
// JpegBitmapEncoder to save BitmapSource to file
// imageSerial is the serial of the sequential image
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmpSource));
using (var fs = new FileStream("img" + (imageSerial++) + ".jpeg", FileMode.Create, FileAccess.Write))
{
encoder.Save(fs);
}
}
}
我在其中一篇帖子中找到了一些关于 ffmpeg 的信息,但我不明白如何在 c# 中使用它。
好的,我找到了答案。
我找到答案的例子=https://github.com/rafaftahsin/Kinect-v2-Color-Frame-Recorder
我刚把ffmpeg.exe文件放到文件夹里。 然后 运行 代码 = Process.Start("ffmpeg.exe", "-framerate 10 -i img%d.jpeg -c:v libx264 -r 30 -pix_fmt yuv420p kinect_video.mp4");