之前的那篇文章阅读量1314,作者想保留着吉祥的数字,所以这边在复制出来一份。
网上看了好多关于提取视频缩略图的文章,基本都是利用VideoPlayer截取图片。
在这里我分享一下AVProVideo也可截取,
public RenderHeads.Media.AVProVideo.MediaPlayer mediaPlayer;
/// <summary>
/// 保存视频缩略图
/// </summary>
/// <param name="filePath">视频路径</param>
/// <param name="call">回调函数</param>
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就表示准备就绪了