Unity 获得视频的某一帧,生成缩略图

Unity 并无直接获取视频某一帧图像的API,所以想要生成缩略图就要自己写方法了,

图片和视频都可以用这种方式生成缩略图,另,转载请标明出处,谢谢。

 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using UnityEngine;
 4 using UnityEngine.Video;
 5 using System.IO;
 6
 7
 8 public class NewBehaviourScript : MonoBehaviour {
 9
10     VideoPlayer vp;
11     Texture2D videoFrameTexture;
12     RenderTexture renderTexture;
13     void Start()
14     {
15         videoFrameTexture = new Texture2D(2, 2);
16         vp = GetComponent<VideoPlayer>();
17         vp.playOnAwake = false;
18         vp.waitForFirstFrame = true;
19
20         vp.sendFrameReadyEvents = true;
21         vp.frameReady += OnNewFrame;
22         vp.Play();
23
24
25     }
26     int framesValue=0;//获得视频第几帧的图片
27     void OnNewFrame(VideoPlayer source, long frameIdx)
28     {
29         framesValue++;
30         if (framesValue==100) {
31             renderTexture = source.texture as RenderTexture;
32             if (videoFrameTexture.width != renderTexture.width || videoFrameTexture.height != renderTexture.height) {
33                 videoFrameTexture.Resize (renderTexture.width, renderTexture.height);
34             }
35             RenderTexture.active = renderTexture;
36             videoFrameTexture.ReadPixels (new Rect (0, 0, renderTexture.width, renderTexture.height), 0, 0);
37             videoFrameTexture.Apply ();
38             RenderTexture.active = null;
39             vp.frameReady -= OnNewFrame;
40             vp.sendFrameReadyEvents = false;
41         }
42     }
43
44     void OnDisable()
45     {
46         if (!File.Exists(Application.persistentDataPath+"/temp.jpg")) {
47             ScaleTexture (videoFrameTexture, 800, 400, (Application.persistentDataPath+"/temp.jpg"));
48         }
49     }
50     //生成缩略图
51     void ScaleTexture(Texture2D source, int targetWidth, int targetHeight,string savePath)
52     {
53
54         Texture2D result = new Texture2D(targetWidth, targetHeight,TextureFormat.ARGB32, false);
55
56         for (int i = 0; i < result.height; ++i)
57         {
58             for (int j = 0; j < result.width; ++j)
59             {
60                 Color newColor = source.GetPixelBilinear((float)j / (float)result.width, (float)i / (float)result.height);
61                 result.SetPixel(j, i, newColor);
62             }
63         }
64         result.Apply();
65         File.WriteAllBytes(savePath, result.EncodeToJPG());
66     }
67
68 }
时间: 2024-09-30 10:03:18

Unity 获得视频的某一帧,生成缩略图的相关文章

C#:获取视频某一帧的缩略图

读取方式:使用ffmpeg读取,所以需要先下载ffmpeg.网上资源有很多. 原理是通过ffmpeg执行一条命令获取视频某一帧的缩略图. 首先,需要获取视频的帧高度和帧宽度,这样获取的缩略图才不会变形. 获取视频的帧高度和帧宽度可以http://www.zhoumy.cn/?p=35通过查看. 获取到视频的帧高度和帧宽度后,还需要获取缩略图的高度和宽度,这是按比例缩放的. 比如你存放缩略图的区域的最大宽度和最大高度是100,缩略图的高度也应缩放到对应大小. 接下来通过执行一条命令就可以获取到视频

七牛云上传视频并截取第一帧为图片(js实现)

本文出自APICloud官方论坛, 感谢论坛版主 东冥羽的分享. 七牛云上传视频并截取第一帧作为视频的封面图. 使用js上传,模块videoPlayer截取第一帧(有专门的截图模块,但是我使用的有点问题,可能是视频源的问题:canvas也能截取,但是有点小bug,比如会截成黑色或白色的图片). 上传一个和上传多个视频 demo运行点这里 需要参数:token值,七牛云域名 *逻辑: 上传一个视频: 点击上传按钮,获取token值,选中视频后开始上传.input file会获取文件的大小,文件名等

nginx实时生成缩略图到硬盘上

原文:http://www.ttlsa.com/nginx/nginx-create-image-on-disk/ 现在随着各终端的出现(手机,ipad等平板),以及各种终端的手机分辨率和尺寸都不同,现在手机用户流量都是宝,网上出现了各种各样的生成缩略图功能的架构,有使用php实时生成缩略图的,也有用nginx + lua实现的,上节我也讲到了使用nginx生成缩略图,但是用户每次访问都需要生成一次,会给cpu和硬盘带来比较大的压力,今天带来了另外一种方式,这次使用nginx将原图生成缩略图到硬

生成缩略图时报GDI+中发生一般性错误

最近由于业务需要要写一个生成缩略图并能设置图片质量的功能,本来这是一件so easy的事,以前也干过,可是却遇到了问题.话不多说先看代码 /// <summary> /// 等比生成缩略图 /// </summary> /// <param name="originalImagePath">源图路径(物理路径)</param> /// <param name="thumbnailPath">缩略图路径(物理

nginx利用image_filter动态生成缩略图

原文:http://www.open-open.com/lib/view/open1416193847945.html "我现在是有些图片需要生成缩略图,这个现在加了image_filter这个已经实现了,但我不知道怎么样才能访问我上传的原图" 刚开始觉得也不太好弄,让他用程序区处理,实际上稍微动脑筋分析一下也可以不修改程序实现动态生成缩略图且能够访问原图. 前提是需要定好图片的访问规则. 先来看一下什么是nginx的image filter模块. HttpImageFilterMod

C#生成缩略图

[csharp] view plain copy print? /// 生成缩略图 /// </summary> /// <param name="originalImagePath">源图路径</param> /// <param name="thumbnailPath">缩略图路径</param> /// <param name="width">缩略图宽度</par

[原创]超强C#图片上传,加水印,自动生成缩略图源代码

<%@ Page Language=“C#“ AutoEventWireup=“true“ %> <%@ Import Namespace=“System“ %> <%@ Import Namespace=“System.IO“ %> <%@ Import Namespace=“System.Net“ %> <%@ Import NameSpace=“System.Web“ %> <%@ Import NameSpace=“Legalsof

php生成缩略图函数

/** * 生成缩略图 * @author [email protected] * @param string 源图绝对完整地址{带文件名及后缀名} * @param string 目标图绝对完整地址{带文件名及后缀名} * @param int 缩略图宽{0:此时目标高度不能为0,目标宽度为源图宽*(目标高度/源图高)} * @param int 缩略图高{0:此时目标宽度不能为0,目标高度为源图高*(目标宽度/源图宽)} * @param int 是否裁切{宽,高必须非0} * @param

ASP组件AspJpeg(加水印)生成缩略图等使用方法

ASP组件AspJpeg(加水印)生成缩略图等使用方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-12-17我要评论 ASPJPEG是一款功能相当强大的图象处理组件,用它可以轻松地做出图片的缩略图和为图片加上水印功能.下面简单介绍一下使用方法,需要的朋友可以了解下 一.为图片添加水印 复制代码 代码如下: <% Dim Jpeg ''''//声明变量 Set Jpeg = Server.CreateObject("Persits.Jpeg") ''''//调用组件