使用 flex 从视频中获取随机(或第一)帧

Posted

技术标签:

【中文标题】使用 flex 从视频中获取随机(或第一)帧【英文标题】:Get random (or first) frame from video using flex 【发布时间】:2012-01-15 02:44:59 【问题描述】:

我正在开发一个用于录制视频并将其预览为 tilelist 的应用程序。有什么方法可以捕获视频帧以用作我列表中的缩略图?我正在使用 Flex 4.5。

【问题讨论】:

【参考方案1】:

来自this answer:

var frameGrab:BitmapData = new BitmapData(clip.width, clip.height, false, 0);
frameGrab.draw(clip); // the .draw() method will copy the frame from your video.
var frame:Bitmap = new Bitmap(frameGrab);

【讨论】:

【参考方案2】:

我正在寻找的是以下内容:

        private function capture(filename:String):void
           
            var bitmapData:BitmapData = new BitmapData(videoDisplay.width, videoDisplay.height);            
            bitmapData.draw(videoDisplay,new Matrix());

            var bitmap : Bitmap = new Bitmap(bitmapData);
            var jpg:JPEGEncoder = new JPEGEncoder();
            var ba:ByteArray = jpg.encode(bitmapData);
            var newImage:File = File.desktopDirectory.resolvePath("foldername/"+filename+".jpg");

            fileStream = new FileStream();
            fileStream.open(newImage, FileMode.UPDATE);
            fileStream.writeBytes(ba);
            fileStream.close();


        

这是当用户点击录制时调用的方法..所以我抓住一张照片作为拇指!我希望以上内容也能帮助其他寻找类似东西的人...... 非常感谢!

【讨论】:

【参考方案3】:

还有另一种方法: 将事件监听器附加到视频流(即NetStream),如下所示:

var vConnection:NetConnection = new NetConnection();
vConnection.connect(null);
var vStream:NetStream = new NetStream(vConnection);
vStream.addEventListener(NetStatusEvent.NET_STATUS, onNetStatusChange);

监听器看起来像这样:

protected function onNetStatusChange(event:NetStatusEvent):void

    switch(event.info.code)
    
        case "NetStream.Play.Start": 
        
            vStream.seek(1); // seek to key frame
            break;
        
        case "NetStream.Video.DimensionChange":
        
            // after a dimension change we have a loaded frame
            // do whatever you want here, but keep in mind 
            // that the video needs to be on the display list 
            // if you want to draw it   
            break;
        
        default: break;
    

【讨论】:

以上是关于使用 flex 从视频中获取随机(或第一)帧的主要内容,如果未能解决你的问题,请参考以下文章

从在线托管的 MP4 文件中捕获随机帧

如何随机抽取每段视频画面中的一帧保存为图片格式?

web获取视频图片第一帧

Unity Viewbob 使用 lerp 随机回弹 1 帧

从视频中提取帧的最快方法

使用 JS 从视频中获取帧