3
A
回答
2
是的,這是可能的。你需要使用DirectShow.NET。我發現this有用。
編輯:
確定它看起來像,因爲我用它的庫已經改變了......詛咒開源:)
我剛翻譯成下面的代碼和測試,它爲我工作正常(注意,假定存在一個在C WMV:\ AAA稱爲C4.wmv和輸出將轉至c:\ AAA \ out.bmp)
IGraphBuilder graphbuilder = (IGraphBuilder)new FilterGraph();
ISampleGrabber samplegrabber = (ISampleGrabber) new SampleGrabber();
graphbuilder.AddFilter((IBaseFilter)samplegrabber, "samplegrabber");
AMMediaType mt = new AMMediaType();
mt.majorType = MediaType.Video;
mt.subType = MediaSubType.RGB24;
mt.formatType = FormatType.VideoInfo;
samplegrabber.SetMediaType(mt);
int hr = graphbuilder.RenderFile("C:\\aaa\\c4.wmv", null);
IMediaEventEx mediaEvt = (IMediaEventEx)graphbuilder;
IMediaSeeking mediaSeek = (IMediaSeeking)graphbuilder;
IMediaControl mediaCtrl = (IMediaControl)graphbuilder;
IBasicAudio basicAudio = (IBasicAudio)graphbuilder;
IVideoWindow videoWin = (IVideoWindow)graphbuilder;
basicAudio.put_Volume(-10000);
videoWin.put_AutoShow(OABool.False);
samplegrabber.SetOneShot(true);
samplegrabber.SetBufferSamples(true);
long d = 0;
mediaSeek.GetDuration(out d);
long numSecs = d/10000000;
long secondstocapture = (long)(numSecs * 0.10f);
DsLong rtStart, rtStop;
rtStart = new DsLong(secondstocapture * 10000000);
rtStop = rtStart;
mediaSeek.SetPositions(rtStart, AMSeekingSeekingFlags.AbsolutePositioning, rtStop, AMSeekingSeekingFlags.AbsolutePositioning);
mediaCtrl.Run();
EventCode evcode;
mediaEvt.WaitForCompletion(-1, out evcode);
VideoInfoHeader videoheader = new VideoInfoHeader();
AMMediaType grab = new AMMediaType();
samplegrabber.GetConnectedMediaType(grab);
videoheader =
(VideoInfoHeader)Marshal.PtrToStructure(grab.formatPtr,
typeof(VideoInfoHeader));
int width = videoheader.SrcRect.right;
int height = videoheader.SrcRect.bottom;
Bitmap b = new Bitmap(width, height, PixelFormat.Format24bppRgb);
uint bytesPerPixel = (uint)(24 >> 3);
uint extraBytes = ((uint)width * bytesPerPixel) % 4;
uint adjustedLineSize = bytesPerPixel * ((uint)width + extraBytes);
uint sizeOfImageData = (uint)(height) * adjustedLineSize;
BitmapData bd1 = b.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
int bufsize = (int)sizeOfImageData;
int n = samplegrabber.GetCurrentBuffer(ref bufsize, bd1.Scan0);
b.UnlockBits(bd1);
b.RotateFlip(RotateFlipType.RotateNoneFlipY);
b.Save("C:\\aaa\\out.bmp");
Marshal.ReleaseComObject(graphbuilder);
Marshal.ReleaseComObject(samplegrabber);
另外要注意,DirectShow是somethign的框架中冷靜...... MS有點建議你去媒體基金會......我是一個老派的DirectX坦率地說,這個程序員不再那麼做了。
相關問題
- 1. 如何從mp4,wmv,flv,mov視頻獲取視頻時長
- 2. C#中的實時wmv視頻編碼
- 3. Matlab的:加載WMV視頻文件
- 4. 流wmv從我的Android應用程序中的url的視頻
- 5. 在android中播放mms wmv視頻
- 6. 在java中轉換mp4視頻到wmv視頻需要幫助
- 7. 如何使用C#修改WMV視頻元數據?
- 8. 如何在html5視頻播放器中播放wmv文件
- 9. 如何將XAML/WPF文件轉換爲視頻(AVI,WMV等)
- 10. 如何在HTML播放器中播放wmv視頻?
- 11. 如何使用c#覆蓋.wmv視頻文件上的音頻文件?
- 12. 如何從Android的YouTube視頻視頻播放視頻視頻?
- 13. C#:從WMV文件中檢索視頻編解碼器信息
- 14. Silverlight視頻播放器可以從Azure blob播放wmv嗎?
- 15. 從WMV轉換黑莓和Iphone視頻格式
- 16. 如何在不影響視頻質量的情況下壓縮視頻文件(.wmv,.avi,.flv)
- 17. 使用MediaMuxer和MediaCodec將wmv視頻文件轉換爲mp4視頻文件
- 18. 從wmv的h264剪輯不工作在iPad上的HTML5視頻(黑屏)
- 19. 將上傳的視頻轉換爲Silverlight WMV
- 20. 加載wmv文件後在wx.Media中播放視頻的代碼
- 21. Windows-Mobile Directshow:指定WMV視頻捕捉的比特率/質量
- 22. 如何從頻道(YouTube)檢索視頻的YouTube視頻ID
- 23. 如何在Java Swing中播放mov和wmv視頻格式文件?
- 24. 如何從視頻中提取音頻
- 25. .wmv文件的格式。 (或任何視頻文件將是偉大的)
- 26. 添加.wmv視頻到網站<video> -tags
- 27. 什麼jquery視頻播放器,播放avi,mp4,mkv,wmv文件?
- 28. 什麼視頻格式(希望WMV)支持透明度?
- 29. 無法在Mozilla和Chrome中播放wmv視頻
- 30. 嵌入wmv視頻不允許全屏按鈕
嗨, 我引用的DirectShowLib-2005.dll,但我停留在你鏈接我的示例代碼2行:) 類型comtype = Type.GetTypeFromCLSID(Clsid.FilterGraph); ClsId會是什麼? – Michel 2010-04-06 12:39:30
是啊!有用。非常感謝! – Michel 2010-04-07 20:25:30
恩,恩,我幾乎不敢問......我更新了我的相機附帶的軟件,GRMBL軟件現在不會讓我輸出到WMV,但只能輸出到原始格式:MP4。我試圖理解代碼以使其適用於MP4文件(因爲它在MP4文件崩潰),但我真的不知道如何。 你能幫我解決這個問題嗎? – Michel 2010-04-10 19:47:27