Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C从WMV中提取特定帧_C#_Video Processing - Fatal编程技术网

C# C从WMV中提取特定帧

C# C从WMV中提取特定帧,c#,video-processing,C#,Video Processing,几乎正是我需要的。。。除了saveFrameFromVideo采用百分比而不是帧数之外 如何使用此选项从WMV文件中提取帧X 我也试过。。。但是没有任何可下载的版本,我也无法获得构建的源代码…神奇之处在于这一行: mediaDet.WriteBitmapBits(streamLength * percentagePosition, target.Width, target.Height, outputBitmapFile); 它根据流的百分比和长度计算

几乎正是我需要的。。。除了saveFrameFromVideo采用百分比而不是帧数之外

如何使用此选项从WMV文件中提取帧X


我也试过。。。但是没有任何可下载的版本,我也无法获得构建的源代码…

神奇之处在于这一行:

mediaDet.WriteBitmapBits(streamLength * percentagePosition, 
                    target.Width, target.Height, outputBitmapFile);

它根据流的百分比和长度计算帧数。既然你已经知道了帧号,那就用它来代替吧。

魔术就在这一行:

mediaDet.WriteBitmapBits(streamLength * percentagePosition, 
                    target.Width, target.Height, outputBitmapFile);
它根据流的百分比和长度计算帧数。由于您已经知道帧号,请改用它。

您也可以尝试执行此任务,它允许您按时间偏移提取图像:

Bitmap bitmap = AsfImage.FromFile(videoFileName)
                        .AtOffset(17.34);
在内部,媒体SDK和一些自定义流操作用于获得帧精度高达100毫秒的静态帧,因此,如果您知道媒体文件的帧速率,即25,则可以计算最近帧的时间偏移:

int frameX = 400; //get 400th frame
double frameRate = 25.0;
double timeOffset = frameX / frameRate;

Bitmap bitmap = AsfImage.FromFile(videoFileName)
                        .AtOffset(timeOffset);
您也可以尝试执行此任务,它允许您按时间偏移提取图像:

Bitmap bitmap = AsfImage.FromFile(videoFileName)
                        .AtOffset(17.34);
在内部,媒体SDK和一些自定义流操作用于获得帧精度高达100毫秒的静态帧,因此,如果您知道媒体文件的帧速率,即25,则可以计算最近帧的时间偏移:

int frameX = 400; //get 400th frame
double frameRate = 25.0;
double timeOffset = frameX / frameRate;

Bitmap bitmap = AsfImage.FromFile(videoFileName)
                        .AtOffset(timeOffset);

我一直在致力于从网络摄像头视频和视频文件中提取帧-对于这两种情况,我使用了AForge库-您需要添加对AForge.video、AForge.Imaging、AForge.video.Directshow和AForge.video.FFMPEG的引用。对于实时视频,我添加了一个videoSourcePlayer\u NewFrameobject发送器ref Bitmap image来获取帧-位图图像包含位图类型中所需的帧。这基本上就是我在windows窗体中添加的videosource播放器的事件处理程序。 对于文件中的视频,我使用了: videoSource=新文件VideoSoourceFileName; 视频源。开始; videoSource.NewFrame+=新的arge.Video.NewFrameEventHandlervideoSource\u NewFrame


videoSource\u NewFrame是事件处理程序,以防出现新帧。

我一直在努力从网络摄像头视频和视频文件中提取帧-对于这两种情况,我都使用了AForge库-您需要添加对AForge.video、AForge.Imaging、AForge.video.Directshow和AForge.video.FFMPEG的引用。对于实时视频,我添加了一个videoSourcePlayer\u NewFrameobject发送器ref Bitmap image来获取帧-位图图像包含位图类型中所需的帧。这基本上就是我在windows窗体中添加的videosource播放器的事件处理程序。 对于文件中的视频,我使用了: videoSource=新文件VideoSoourceFileName; 视频源。开始; videoSource.NewFrame+=新的arge.Video.NewFrameEventHandlervideoSource\u NewFrame


videoSource\u NewFrame是事件处理程序,以防出现新帧。

这太棒了!“有没有办法让它在DRM保护的视频上工作?”@阿达姆加斯金斯:不幸的是,除非你使用的是AsfMojo目前不在的媒体基础,否则我无法从C中提取DRM保护视频的图像,这里给出了问题的概要:ASFMOJO可以解析AVI文件吗?不只是ASF文件,主要是WMV和WMA文件这太棒了!“有没有办法让它在DRM保护的视频上工作?”@阿达姆加斯金斯:不幸的是,除非你使用的是AsfMojo目前不在的媒体基础,否则我无法从C中提取DRM保护视频的图像,这里给出了问题的概要:ASFMOJO可以解析AVI文件吗?不只是ASF文件,主要是WMV和WMA文件