Unity 获得视频的某一帧,生成缩略图
Unity 并无直接获取视频某一帧图像的API,所以想要生成缩略图就要自己写方法了,
图片和视频都可以用这种方式生成缩略图,另,转载请标明出处,谢谢。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Video;
using System.IO; public class NewBehaviourScript : MonoBehaviour { VideoPlayer vp;
Texture2D videoFrameTexture;
RenderTexture renderTexture;
void Start()
{
videoFrameTexture = new Texture2D(, );
vp = GetComponent<VideoPlayer>();
vp.playOnAwake = false;
vp.waitForFirstFrame = true; vp.sendFrameReadyEvents = true;
vp.frameReady += OnNewFrame;
vp.Play(); }
int framesValue=;//获得视频第几帧的图片
void OnNewFrame(VideoPlayer source, long frameIdx)
{
framesValue++;
if (framesValue==) {
renderTexture = source.texture as RenderTexture;
if (videoFrameTexture.width != renderTexture.width || videoFrameTexture.height != renderTexture.height) {
videoFrameTexture.Resize (renderTexture.width, renderTexture.height);
}
RenderTexture.active = renderTexture;
videoFrameTexture.ReadPixels (new Rect (, , renderTexture.width, renderTexture.height), , );
videoFrameTexture.Apply ();
RenderTexture.active = null;
vp.frameReady -= OnNewFrame;
vp.sendFrameReadyEvents = false;
}
} void OnDisable()
{
if (!File.Exists(Application.persistentDataPath+"/temp.jpg")) {
ScaleTexture (videoFrameTexture, , , (Application.persistentDataPath+"/temp.jpg"));
}
}
//生成缩略图
void ScaleTexture(Texture2D source, int targetWidth, int targetHeight,string savePath)
{ Texture2D result = new Texture2D(targetWidth, targetHeight,TextureFormat.ARGB32, false); for (int i = ; i < result.height; ++i)
{
for (int j = ; j < result.width; ++j)
{
Color newColor = source.GetPixelBilinear((float)j / (float)result.width, (float)i / (float)result.height);
result.SetPixel(j, i, newColor);
}
}
result.Apply();
File.WriteAllBytes(savePath, result.EncodeToJPG());
} }
Unity 获得视频的某一帧,生成缩略图的更多相关文章
- php 使用 ffmpeg 转换视频,截图,并生成缩略图
http://blog.csdn.net/toss156/article/details/7003059 把ffmpeg 和 生成缩略图整合了一下. include("ImageResiz ...
- 使用AVFoundation仅仅生成缩略图,不进行播放视频(本地和网络文件都可以创建视频缩略图)
使用MPMoviePlayerController来生成缩略图足够简单,但是如果仅仅是是为了生成缩略图而不进行视频播放的话,此刻使用 MPMoviePlayerController就有点大材小用了.其 ...
- C#:获取视频某一帧的缩略图
读取方式:使用ffmpeg读取,所以需要先下载ffmpeg.网上资源有很多. 原理是通过ffmpeg执行一条命令获取视频某一帧的缩略图. 首先,需要获取视频的帧高度和帧宽度,这样获取的缩略图才不会变形 ...
- php如何截取出视频中的指定帧作为图片
php如何截取出视频中的指定帧作为图片 一.总结 一句话总结:截取视频指定帧为图片,php ffmpeg扩展已经完美实现,并且php ffmpeg是开源的 二.php如何截取出视频中的指定帧作为图片 ...
- 从H264码流中获取视频宽高 (SPS帧) 升级篇
之前写过 <从H264码流中获取视频宽高 (SPS帧)> . 但发现很多局限性,而且有时解出来是错误的. 所以重新去研究了. 用了 官方提供的代码库来解析. 花了点时间,从代码库里单独把解 ...
- Avi视频生成缩略图时,提示“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”
需求:录制Avi格式视频成功后,使用DirectShow生成缩略图,由于视频录制时,宽高分辨率可调节,所以有些情况下,生成缩略图会抛出异常“尝试读取或写入受保护的内存.这通常指示其他内存已损坏”. 异 ...
- PHP -- 七牛云 在线视频 获取某一帧作为封面图
### 最近碰到视频处理,需要视频封面? 但用的是七牛云存储视频,索性搜了一下,怎么获取视频的某一帧作为视频的封面图... 发现了七牛官网又自身的接口 ### https://developer.qi ...
- 【matlab】使用VideoReader提取视频的每一帧,不能用aviread函数~
这个问题是matlab版本问题,已经不用aviread函数了~ VideoReader里面没有cdata这个函数! MATLAB不支持avireader了,而且没有cdata这个属性了,详情去官网ht ...
- 通视频URL截取第一帧图片
为了方便直接给UIImage加个类别,以后什么时候使用可以直接调用. #import <UIKit/UIKit.h> @interface UIImage (Video) /** 通过视频 ...
随机推荐
- (转)PHP(其他语言类似)编码的规范性
为了提高工作效率,保证开发的有效性和合理性,并最大程度提高程序代码的可读性和可重复利用性,提高沟通效率,需要一份代码编辑规范. 一.文件标记: 1.所有php文件 ...
- UWP连接mysql 实现数据远程备份
昨晚吃饭的时候突然觉得我们这个UWP应该添个数据备份的功能,不然换手机,换电脑之后数据库就全没了... 一开始是想用微软提供的AZURE的,没想到这玩意又没什么资料而且申请试用的时候还让我交身份证照片 ...
- HDU 1010 Tempter of the Bone【DFS】
学习剪枝的第一篇@_@学习别人的剪枝,一剪就是两天@_@---- 参看的这篇--http://blog.csdn.net/libin56842/article/details/8962512自己的小体 ...
- js的调试和优化
一.常见的错误和异常 1.拼写错误 拼写错误,可以有代码的高亮来发现. 2.访问不存在的变量 3.括号不匹配 养成规范的编写习惯,适当应用Tab.空行等. 4.字符串和变量链接错误 采用多加括号来进行 ...
- 简洁的MVC思想框架——Nancy(Post操作与外部引用css和JS)
之前介绍了关于Nancy配置与Get基础操作,以下来介绍有关Nancy的Post操作. 第一步,设计主界面,以登录界面为例:Login.cshtml 路径为: 设计好页面后,在之前的modules类中 ...
- JS自定义全局Error
<script> ///自定义错误 onerror=handleErr; function handleErr(msg,url,l) { var txt=""; txt ...
- Django REST framework 自定义字段
自定义字段 继承 Field 类 覆盖父类中的方法 to_representation() 调用该方法将初始数据类型转换为基本的可序列化数据类型 to_internal_value() 调用该方法将原 ...
- HDU-4370 '0 or 1' 最短路 要考虑连通性
题目链接:https://cn.vjudge.net/problem/HDU-4370 题意 给一个矩阵C(nn),要我们找到一个矩阵X(nn),满足以下条件: X_{12}+X_{13}+...X_ ...
- libcudnn (R5) not found in library path
环境:Ubuntu 18.04 + Torch7 + cuda10 在运行使用cudnn的lua程序的时候产生错误: /home/majiabiao/torch/: /home/majiabiao/ ...
- linux操作---cd
cd命令用于切换工作路径,格式是cd [选项][参数]: [选项] -p 如果切换的工作目录是一个符号连接,直接切换到符号连接指向的目标目录: -L 如果切换的工作目录是一个符号连接,直接切换到符 ...