Unity3D 提取视频某一片段作为缩略图

网上看了好多关于提取视频缩略图的文章,基本都是利用VideoPlayer截取图片。

在这里我分享一下AVProVideo也可截取,

    public RenderHeads.Media.AVProVideo.MediaPlayer mediaPlayer;
    /// 
    /// 保存视频缩略图
    /// 
    /// 视频路径
    /// 回调函数
    public void SaveVideoThumb(string filePath,System.Action call)
    {
        mediaPlayer.m_VideoPath = filePath;
        mediaPlayer.OpenVideoFromFile(mediaPlayer.m_VideoLocation,    mediaPlayer.m_VideoPath, mediaPlayer.m_AutoStart);      
        StopAllCoroutines();
        StartCoroutine(IESaveVideoThumb(filePath,call));
    }
    IEnumerator IESaveVideoThumb(string filePath, System.Action call)
    {
        yield return null;
        yield return new WaitForSeconds(1f);
        //  mediaPlayer.Info.GetDurationMs() 取的是毫秒
        float durationMs = mediaPlayer.Info.GetDurationMs() / 1000f;
        float ms = durationMs < 1 ? durationMs : 1;
        //ms= 1;
        //取视频中1秒位置保存为图片
        Texture2D t = mediaPlayer.ExtractFrame(null, ms);
        //
        string path = Path.GetDirectoryName(filePath) + "/" + Path.GetFileNameWithoutExtension(filePath) + ".jpg";
        //写入文件
        File.WriteAllBytes(path, t.EncodeToJPG());
        yield return new WaitForSeconds(0.1f);
        //调用回调函数 刷新UI界面
        call?.Invoke();      
    }

或者用MediaPlayerEvent 来代替协程的等待

MediaPlayerEvent.EventType.FirstFrameReady就表示准备就绪了

 

 

你可能感兴趣的:(Unity3D 提取视频某一片段作为缩略图)