整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

HTML5 实现视频播放 放大缩小(带有源码)

在越来越多用到HTML5,用HTML做的页面很炫,有些功能也很容易实现了。比如HTML5实现视频音频播放。

HTML5 将成为 HTML、XHTML 以及 HTML DOM 的新标准。

HTML5的新特性:

  • 用于绘画的 canvas 元素

  • 用于媒介回放的 video 和 audio 元素

  • 对本地离线存储的更好的支持

  • 新的特殊内容元素,比如 article、footer、header、nav、section

  • 新的表单控件,比如 calendar、date、time、email、url、search

浏览器支持

最新版本的 Safari、Chrome、Firefox 以及 Opera 支持某些 HTML5 特性。Internet Explorer 9 将支持某些 HTML5 特性。

视频格式

当前,video 元素支持三种视频格式:

格式IEFirefoxOperaChromeSafari
OggNo3.5+10.5+5.0+No
MPEG 49.0+NoNo5.0+3.0+
WebMNo4.0+10.6+6.0+No

Ogg = 带有 Theora 视频编码和 Vorbis 音频编码的 Ogg 文件

MPEG4 = 带有 H.264 视频编码和 AAC 音频编码的 MPEG 4 文件

WebM = 带有 VP8 视频编码和 Vorbis 音频编码的 WebM 文件


实例源码:

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>视频播放</title>

</head>

<body>

<div style="text-align:center;">

<button onclick="playPause()">播放/暂停</button>

<button onclick="makeBig()">大</button>

<button onclick="makeNormal()">中</button>

<button onclick="makeSmall()">小</button>

<br />

<video id="video1" width="420" style="margin-top:15px;">

<source src="/项目名字/upload/Video_1509549323159.mp4" type="video/mp4" />

</video>

</div>

<script type="text/javascript">

var myVideo=document.getElementById("video1");

//播放暂停

function playPause()

{

if (myVideo.paused)

myVideo.play();

else

myVideo.pause();

}

//视频放大

function makeBig()

{

myVideo.width=560;

}

//视频中等

function makeSmall()

{

myVideo.width=320;

}

//视频缩小

function makeNormal()

{

myVideo.width=420;

}

</script>

</body>

</html>

实现的效果:

PS:注意一下那个src地址:一定得是在项目里,如果是电脑里的绝对路径是不行的。

新手上路,希望大家多多支持,多多关注,希望能够在头条的路上越走越远。

计思路

定位动画我们在之前已经实现了。那么这里只要考虑如何实现放大动画,最后将两者结合起来就好。从后端拿到的返回值是一个固定长度的数组,所以这里还是用 div 利用 flex 布局将图片平铺展示,利用 CSS transform 进行位置移动和缩放。

接下来就是如何计算出每个 div 的位移。DOM 元素的位移主要关注左上角顶点的位移。针对这个需求可以画出如下草图。外层 div 为 container,内层 div 为 inner。


从上图可以看到,每个 div 的位移即 center.left - inner.left, center.top - inner.top. container 的中心点:

const containerCenterX = containerRect.left + containerRect.width / 2;
const containerCenterY = containerRect.top + containerRect.height / 2;

inner 移动的偏移量:

// 让 inner 移到 container 的正中间
const offsetX = containerCenterX - itemRect.width / 2 - itemRect.left;
const offsetY = containerCenterY - itemRect.height / 2 - itemRect.top;

最后将方位动画的 div 叠在 inner 上面即可。

代码实现和 Demo 演示

梳理清思路之后,就可以实现代码了。Demo 已经放在 CodeSandbox 上了。其中最主要的还是位移计算的逻辑。下面是Demo地址,也可以在我的博客上看到 Demo。 Demo 地址:codesandbox.io/p/devbox/si…

布局部分代码:

  <div class="container" ref="container">
    <div
      v-for="(image, index) in imageList"
      :key="index"
      class="wrapper"
      ref="imageElList"
      :style="{ opacity: image.active ? 1 : 0.6 }"
      @click="toggleActiveImage(index)"
    >
      <img :src="image.src" class="image" />
      <direction
        ref="directionElList"
        class="direction"
        :style="{ display: image.active ? 'block' : 'none' }"
        :pinPosition="selectedDirection"
      />
    </div>
  </div>

数据结构部分:

export const imageDemos = [
  {
    name: "image-1",
    src: "https://images.adsttc.com/media/images/564c/8b23/e58e/ce4d/7300/01c1/newsletter/01.jpg?1447856922",
    active: false,
  },
  {
    name: "image-2",
    src: "https://i.pinimg.com/550x/65/a9/10/65a91018534fc59b675150fc432ccc41.jpg",
    active: false,
  },
  {
    name: "image-3",
    src: "https://1.bp.blogspot.com/-PcYuV8FVZmQ/VXWy7y-QjDI/AAAAAAABewE/La-BpNsCsY0/s1600/mapa-grande1.jpg",
    active: false,
  },
  {
    name: "image-4",
    src: "https://image2.sina.com.cn/gm/zhuanqu/sephiroth/rwjs/fomalhaut_b.gif",
    active: false,
  },
  {
    name: "image-5",
    src: "https://gd-hbimg.huaban.com/f0c7a577ed51f171967cbd3c1b21e90361b6924b1594b7-yrOBDd",
    active: false,
  },
];

偏移量计算部分代码:

const showActiveImage = (imageEl) => {
  const containerEl = container.value;

  const containerRect = containerEl!.getBoundingClientRect();
  const itemRect = imageEl!.getBoundingClientRect();

  const containerCenterX = containerRect.left + containerRect.width / 2;
  const containerCenterY = containerRect.top + containerRect.height / 2;

  const offsetX = containerCenterX - itemRect.width / 2 - itemRect.left;
  const offsetY = containerCenterY - itemRect.height / 2 - itemRect.top;

  imageEl!.style.transform = `translate(${offsetX}px, ${offsetY}px) scale(1.2)`;
  imageEl!.style.zIndex = 100;
};

拓展

这次的需求也可以用于展示动画。比如产品展示或者局部细节的展示。根据不同的需求结合不同的动画,可以让我们的页面变得更加酷炫。

opaz Video AI for Mac是一款专业的AI视频无损放大软件,topaz video ai mac版使用时间信息有效提高视频质量和细节,从而达到最好的视频放大、去隔行、降噪和还原效果,另外topaz video enhance ai mac版允许通过片段选择、处理模型和尺寸比率选项来自定义视频输出。Topaz Video AI提供了几个功能,包括放大、去噪、锐化和稳定。它可以将低分辨率视频升级到更高的分辨率,同时保留细节并减少伪影。去噪功能有助于减少视频中的噪声和颗粒,从而获得更干净、更平滑的画面。锐化工具增强了视频的清晰度和清晰度,使其看起来更加详细和清晰。稳定功能有助于减少相机抖动和抖动,从而获得更流畅、更专业的镜头。

https://mac.macxz.com/mac/182833.html?id=MTY4MTYy

Topaz Video Enhance AI for Mac官方介绍

Topaz Video Enhance AI使用最新的深度学习技术,通过使用时间信息自然提高视频质量和细节。试试看一下视频放大,去噪,去隔行和还原方面令人improvements目结舌的改进。

topaz video enhance ai mac版功能特点

升级

通过从多个帧中收集细节来提高***视频的分辨率。将SD升级到HD,将HD升级到4k或8k,同时添加清晰自然的视频细节。

去噪

在恢复视频中***细节的同时消除杂讯和颗粒感。最小化由逐帧降噪方法引起的闪烁和其他时间伪像。

去隔行

使用深度学习将隔行视频转换为逐行视频,同时保留图像清晰度。与传统的去隔行扫描相比,显着减少了视觉伪影。

https://mac.macxz.com/mac/182833.html?id=MTY4MTYy

恢复

自然还原旧视频,而无需添加视觉效果。恢复***的细节并从旧的或降级的源中删除压缩伪像。

运动会放大升级的缺陷。为了使它起作用,您必须以某种方式智能地跨框架携带细节……而这正是他们所做的。

从多个帧获得更好的视频质量

与您一次放大一帧相比,Topaz Video Enhance AI专门使用时间信息来创建更好的视频增强结果。

更少的运动伪影

其他视频放大技术通常会因相邻帧中的不同处理而产生“闪烁”或“闪烁”效果。VEAI经过培训可显着减少此类伪影。

恢复视频详细信息

VEAI经过培训,可以将***的细节注入到您的视频中,这些细节是从多个相邻帧中的附加信息得出的。

获得更自然的结果

传统的升频通常会导致这种情况,尽管VEAI中也确实存在视觉伪影,但从多个帧派生的信息可以缓解这些伪影。

接受过视频培训

VEAI仅接受视频剪辑而非静态图像的培训。(提高结果值得增加收集数据集的工作量!)

非常推荐VEAI-对于老式电视节目,它会获得很好的效果,而在数字家庭视频和素材上,它的效果也非常好。

使用您现有的工作流程

Video Enhance AI是适用于Mac和Windows的独立软件,这意味着它可以使用您现有的硬件直接处理视频,而不是将工作卸载到远程服务器。与基于服务器的升级相比,这使其更具成本效益,更快且更好地集成到您的工作流中。

针对您的硬件进行了优化

我们直接与不同的硬件制造商合作,以确保软件在您的计算机上尽快运行。

便捷的工作流程

轻松转换和合并多个视频,从SD到HD,HD到4k等。包括导出预设和批处理。

灵活的进出口

支持常见的视频文件类型和图像序列作为输入,并直接导出到mp4,mov或图像序列。

批量处理

让视频增强AI在您的视频排队等候的情况下通宵运行,并在早上返回以获取增强的素材。

在将SD转换为HD方面做得非常出色,这是我无法用Final Cut and Resolve复制的方式。它带来了细节,并且给人留下深刻的印象,给我留下了深刻的印象。