最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 几行node代码也能做个短视频??

    正文概述 掘金(德莱问)   2021-03-14   954

    hello,大家好,我是德莱问。

    欢迎关注我的github,文章的更新和发布第一时间会在github进行

    这是博客地址,欢迎+star

    写作是件锻炼人的事情,也是对自己的一种习惯的培养,对一段时间以来的一个总结,同时也是对这段时间以来所学知识的一个巩固。在越来越卷的前端领域,大家都在疯狂的学习,如果自己偷懒,将会落后于别人。

    老天爷是公平的,付出多少辛苦,就有多少回报。有时候可以自己开始欺骗自己,可是真正用到的时候,现实就会啪啪打脸。

    (前言)说点事情

    当前太平盛世,可是互联网领域可算是一直乱世。今天我们所说的是短视频领域。

    短视频已成为一种越来越流行的媒体传播形式。像微视和抖音这种 app,每天都会生产成千上万个精彩短视频。而这些视频也为产品带来了巨大的流量。 随之而来,如何让用户可以快速生产一个短视频;或者产品平台如何利用已有的图片、视频、音乐素材批量合成大量视频就成为一个技术难点。

    今天为大家带来的是一个基于node.js的轻量、灵活的短视频制作库。您只需要添加几张图片或视频片段再加一段背景音乐,就可以快速生成一个很酷的的视频短片。

    几行node代码也能做个短视频??

    • github地址:github.com/tnfe/FFCrea…
    • npm地址:www.npmjs.com/package/ffc…

    这篇文章将会带领你从头到尾制作一个短视频。

    生成项目并安装依赖

    首先得建一个项目,然后执行npm init,一顿回车就好了。

    mkdir ffcreator-example && cd ffcreator-example
    npm init
    

    接下来进行今天咱们这个包的安装操作

    npm install ffcreator
    or
    yarn add ffcreator
    

    重中之重,ffcreator依赖于FFnpeg,因此必须安装FFmpeg

    FFCreatorLite依赖于FFmpeg>=0.9以上版本。请设置FFmpeg为全局变量, 否则需要使用setFFmpegPath添加FFmpeg本机路径。(windows用户的ffmpeg很可能不在您的%PATH中,因此您必须设置%FFMPEG_PATH)。

    安装FFmpeg的教程,我只说下windows和mac的哈,关于其他的在上面github里面有更详细的说明,之所以只说下windows和mac,因为对于前端开发人员来说,大多数都是mac,也有部分window。对于其他研发人员,如果想尝试的话,可以进到上面github查看其他环境的安装方式。

    windows:

    共四分步:下载、解压、设置环境变量、使用。

    参考文档

    mac:

    共四分步:

    • 安装homebrew(如已安装,可忽略,直接进行下一步):

      /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
      
    • 使用homebrew安装ffmpeg:

      brew install ffmpeg
      

    参考文档

    至此,项目、环境、依赖都ready了,我们可以进行下一步的操作了。

    关于使用

    ffcreator是一个node的库,提供了多种构造函数可以进行使用:

    • FFScene, // 屏幕,也称场景

      // 新建一个显示屏
      const scene = new FFScene();
      // 设置背景色   
      scene.setBgColor('#30336b');    
      // 设置停留时长   
      scene.setDuration(8.5);             
      // 设置过渡动画(类型, 时间)
      scene.setTransition('Fat', 1.5);    
      // 把屏幕添加到视频创造器实例上面
      creator.addChild(scene);
      
    • FFNode, 下面所有类型的基类,可以直接看下面。

    • FFText, 文本元素

      const text = new FFText({text: '这是一个文字', x: 250, y: 80});
      // 文字颜色
      text.setColor('#ffffff');         
      // 背景色
      text.setBackgroundColor('#b33771');         
      // 出现动画为fadeIn,动画的时长1秒,delay时间为1秒,
      text.addEffect("fadeIn", 1, 1);   
      // 设置文本水平居中
      text.alignCenter();                         
      // 设置样式object 
      text.setStyle({padding: [4, 12, 6, 12]});   
      // 把当前文本节点添加到屏幕上面
      scene.addChild(text);
      
    • FFImage, 图片元素

      // 创建一个图片元素,图片路径为../images/demo.png
      const img = new FFImage({path: '../images/demo.png'});
      // 设置位置   
      img.setXY(250, 340);                
      // 设置缩放
      img.setScale(2);                   
      // 设置旋转   
      img.setRotate(45);               
      // 设置透明度 
      img.setOpacity(0.3);                
      // 设置宽高
      img.setWH(100, 200);                
      // 设置动画效果
      // 设置动画效果为slideInDown,动画时长为1.2秒,delay时间为0
      img.addEffect("slideInDown", 1.2, 0);
      // 把当前图片节点添加到屏幕上面
      scene.addChild(img);
      
    • FFVideo, 视频元素

      // 创建一个视频元素,视频路径为../videos/demo.mp4,位置在屏幕的100和150处
      // 宽度为500,高度为350.
      const video = new FFVideo({
          path: videopath,
          x: 100,
          y: 150,
          width: 500,
          height: 350
      });
      设置是否有音乐
      video.setAudio(true);  
      // 设置是否循环播放
      video.setLoop(true);
      // 截取播放时长,设置视频播放的开始时间和结束时间
      video.setTimes("00:00:43", "00:00:50");
      // 单独设置视频播放的开始时间
      video.setStartTime("00:00:43"),
      // 单独设置视频播放的结束时间
      video.setEndTime("00:00:50"),
      // video还有很多其他的方法
      ...
      // 把当前视频元素添加到屏幕上面
      scene.addChild(video);
      
    • FFAlbum, 相册元素

      // 新建相册元素。
      const album = new FFAlbum({
          list: [img1, img2, img3, img4],   // 相册的图片集合
          x: 250,
          y: 300,
          width: 500,
          height: 300,
      });
       // 设置相册切换动画
      album.setTransition('zoomIn');     
      // 设置单张停留时长
      album.setDuration(2.5);             
      // 设置单张动画时长
      album.setTransTime(1.5);            
      scene.addChild(album);
      // 把当前相册元素添加到屏幕上面
      scene.addChild(video);
      
    • FFVtuber, 虚拟主播形象

      const vtuber = new FFVtuber({ x: 100, y: 400 });
      // 设置动画时间循环周期
      vtuber.setPeriod([
          [0, 3],
          [0, 3]
      ]);
      // 路径设置这里 baby/[d].png 和 baby/%d.png 两种方式均可以
      const vpath = path.join(__dirname, "./avator/baby/[d].png");
       // 从第1-7.png
      vtuber.setPath(vpath, 1, 7);   
      // 播放速度
      vtuber.setSpeed(6);             
      creator.addVtuber(vtuber);
      
    • FFSubtitle, 字幕元素

      const content = '跟计算机工作酷就酷在这里,它们特别听话,说让干什么就干什么...';
      const subtitle = new FFSubtitle({
          text: content,
          comma: true,                  // 是否逗号分割
          backgroundColor: '#00219C',   // 背景色
          color: '#fff',                // 文字颜色
          fontSize: 24                  // 字号
      });
      // 设置文案,也可以放到conf里
      subtitle.setText(content);      
      // 缓存帧
      subtitle.frameBuffer = 24;      
      // 设置字幕总时长
      subtitle.setDuration(12);       
      scene.addChild(subtitle);
      // 设置语音配音-tts
      subtitle.setSpeech(dub);        
      
    • FFTween, 渐变

    除了上面几种类型之外,还有实例和运行:

    • FFCreator,// 创建一个实例

      const creator = new FFCreator({
        cacheDir,                 // 缓存目录
        outputDir,                // 输出目录
        output,                   // 输出文件名(FFCreatorCenter中可以不设)
        width: 500,               // 影片宽
        height: 680,              // 影片高
        audioLoop: true,          // 音乐循环
        fps: 24,                  // fps
        threads: 4,               // 多线程(伪造)并行渲染
        debug: false,             // 开启测试模式
        defaultOutputOptions: null,// ffmpeg输出选项配置
      });
      
      // 往创造器实例里面添加屏幕
      creator.addChild(scene);
      // 创造器的开始函数。启动。
      creator.start();
      
      
    • FFCreatorCenter, // 核心运行库,通过addTask的方式去运行

    // 可以通过这种方式启动多个任务,
    FFCreatorCenter.addTask(createFFTask)
    当然也可以不使用FFCreatorCenter,直接运行
    createFFTask();
    

    有demo的哦

    • 图片动画:

    图片动画demo地址, demo源码地址

    • 多图相册:

    多图相册demo地址, demo源码地址

    • 场景过渡:

    场景过渡demo地址, demo源码地址

    • 配音字幕:

    配音字幕demo地址, demo源码地址

    • 视频动画:

    视频动画demo地址, demo源码地址

    写在最后

    短视频横行互联网,何不顺应潮流,用代码去实现短视频的创作呢?

    既然可以node实现短视频的创造,何不搭配服务器,实现拖拽组合,可视化生成短视频呢?

    这些应该都是可以实现的。

    nothing

    还是那句话,欢迎关注我的github,文章的更新和发布第一时间会在github进行

    这是博客地址,欢迎+star

    如果你过得快乐,请努力工作使自己更快乐;如果不过得不快乐,请努力工作让自己变得快乐;总之,工作使我快乐~

    祝大家工作顺利,天天快乐哦~

    beautiful girl

    几行node代码也能做个短视频??

    觉得还不错的话,点个赞再走哇~


    起源地下载网 » 几行node代码也能做个短视频??

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元