基于web的在线视频编辑的设计

2023-11-16

基于web的在线视频编辑的设计

我在这里首先说明一下,本设计只涉及到逻辑设计和关键的技术,具体的实现方法,语言就得运用自己的特长去解决了。


场景:

(1)比如我用手机录播一段很长的MP4格式的视频,我想剪切其中的几段,然后在合并成一个新的视频。如果按照传统的方法,我们肯定的要用专业的视频编辑软件,但很遗憾,专业的视频编辑软件只针对专业的人员,怎么做到傻瓜式操作,就可以完成,这才是很重要的。

(2)再比如我现在流行的教育视频云平台,随着互联网+,和云存储技术的日益成熟,现在很多的学校都会讲都开始建立自己的教学视频资源云平台,将老师上课的资源通过自动录播的嵌入式系统录播并存储在服务器上,教师可以根据自己上课的优秀的视频进行裁剪,或者将几段很精彩的视频进行合并成一个新的视频,整个过程,教师不需要任何下载视频,再通过专业的视频软件编辑,然后再上传,这种操作是越来越不符合体验了。如果能够再到,教师登录视频云存储视频平台,选择需要剪切或者合并的视频,直接合并,在这个过程,几分钟的过程就可以完成了。这是一个很好的应用场景,当然整个视频云平台这也是一个很庞大的系统,也是我们正在开发的项目,视频编辑只是其中的一部分。其实,应用的场景还有很多很多。。。。


架构

(1)首先要实现web式,那肯定的基于B/S端式的架构。要对视频进行编辑,首先的可以播放,看这个视频,所以前端的架构,我们就得有一个web播放器。其实像优酷,爱奇艺这种web在线播放,是基于flash的,大过因为HTML5的标准已定稿,很多的浏览器厂商的浏览器都已经是支持Html5的video标签的,但是如果我们自己来基于video重新开发一个有着强大功能的播放器的话,那肯定是很有难度的,所以我会选择一些开源的甚至是兼容flash和html5的播放器。这种播放器很多,在这里我选择一款我比较熟悉,大家公认比较好的播放器,叫flowplayer。大家可以在百度上查找资料,到官网上查看指导手册(这个是必须的)。

(2)播放视频,用什么协议播放呢?传统的视频播放还是基于http协议,就是讲视频先下载完,在播放。这种体验肯定不行的。目前比较流行的都是基于流式播放的,一般用的协议rtmp,和hls。其中rtmp是实时流播放,也就是我们所说的一边看,一般下载或者缓存,这个协议的流媒体服务器也有很多(这里可以查看http://www.oschina.NET/project/tag/111/streaming)。hls是苹果公司提出来的,就是将一段长的视频,剪切成一小段一小段播放,最终播放呢,还是基于http协议,只不过视频只是很小的一段一段,可以做到实时播放,服务器端也是需要一个Hls的流媒体服务器支持,其实一般会选择开源的,比如nginx自带的模块,或者是国内开源的srs(

全称:Simple-RTMP-Serve,github地址:https://github.com/ossrs/srs),具体的技术自己了解。

(3)服务端用什么技术对视频进行剪切或者合并处理?其实很多的在多媒体处理方面,应该用的更多的都是用ffmpeg实现对视频的处理, FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。 
开发语言
WEB的开发有很多的语言可以,javaweb,php,jsp,.net,甚至node.js等都可以实现,目前来说比较流行的是php,项目开发中选择php。
关键技术
首先有以下几个问题
1 )视频怎么才可以用rtmp协议播放
(2)在剪切视频时,如何获取视频的拖曳的任意时间,将要剪切的这一段视频开始时间和结束时间获取?
(3)后台的ffmpeg如何用命令行剪切?
(4)后台的ffmpeg如何将视频合并.?
第一个问题:
首先,用flowplayer作为播放器,具体的用法和配置,开发手册在官网上有具体的说明(官网https://www.flowplayer.org,这是必须的)。其次要用到rtmp协议,肯定得要在服务端安装流媒体服务器,我们可以用nginx的rtmp模块,具体的安装,配置也只能自己查询资料。在这里几句话,肯定说不清楚,这里现在只能只注重方法。这两个方面,肯定的花点时间去了解学习的。
第二个问题
flowplayer有一个视频的对象video,包含很多关于这一个视频的信息。下面是我在官网截得一张图
这些都是在播放一个视频时,视频自身的属性。所以可以在javascript里直接获取到视频的总时长
[html]  view plain  copy  print ? 在CODE上查看代码片 派生到我的代码片
  1. <pre name="code" class="html"><script>  
  2.    // 总时长  
  3.     var duration=flowplayer().video.duration;  
  4. </script>  

 鼠标拖曳播放条,点击获取任意时间点,这个需要获取到当前的时间 
[html]  view plain  copy  print ? 在CODE上查看代码片 派生到我的代码片
  1. <script>  
  2.    // 总时长  
  3.     var current=flowplayer().video.time;  
  4. </script>  

当鼠标在播放器的播放条上移动时,可以显示当前的时间的话,这个可以利用比例来完成
[html]  view plain  copy  print ? 在CODE上查看代码片 派生到我的代码片
  1.  var ratio = flowplayer(0).video.height / flowplayer(0).video.width;  
  2.  var duration=flowplayer(0).video.duration;  
  3.  var timelineOffset = $(this).offset();  
  4.  var x = ev.pageX || ev.clientX;  
  5. var time = Math.round(duration * ((x - timelineOffset.left) / $('.fp-timeline').width()),10);  

其实flowplayer还有很多的API,还是那句老话,一定的自己去认真了解学习。
第三个问题
ffmpeg的命令行实现剪切
[html]  view plain  copy  print ? 在CODE上查看代码片 派生到我的代码片
  1. ffmpeg -i input -y -ss starttime -t lasttime -s -y -vcodec copy -acodec copy output  
[html]  view plain  copy  print ? 在CODE上查看代码片 派生到我的代码片
  1. 例如 "ffmpeg -i "/home/usr/local/video/test.mp4" -ss 00:01:35 -t 00:10:00 -y -vcodec copy -acodec copy "/home/usr/local/video/cut.mp4"  
ffmpeg的具体的参数也很多,这里也不多说了,可以认真看看ffmpeg的官网。
第四个问题
ffmpeg如何合并视频,注意一点。在这里合并视频的所有的视频片段的格式,分辨率,码率都得是一样的,否则视频很棒失败,因为中间我们省去一个转码的过程,如果要转码成统一的格式,对服务器的开销很大,但还是可以实现的,这涉及的知识就更多了,这里的合并之针对相同的格式,分辨率的视频的合并。
合并要用到文档流的方式
建立一个文档,比如bind.txt  ,位置/home/usr/local/bind.txt, 里面内容,一个file,占用一行
[html]  view plain  copy  print ? 在CODE上查看代码片 派生到我的代码片
  1. file "videoPath"  
  2. file "videPath"  
  3.   
  4. 例如 file “/home/usr/local/video/test1.mp4”  
  5.      file ”/home/usr/local/video/test2.mp4“  
  6.      file ”/home/usr/local/video/test2.mp4“  

ffmpeg的命令
[html]  view plain  copy  print ? 在CODE上查看代码片 派生到我的代码片
  1. ffmpeg -f concat -i "/home/usr/local/bind.txt" -c copy "/home/usr/local/video/bind.mp4";  
其实,这只是一个很简单的说明了解吧,真正开发起来,设计的逻辑业务设计很多,比如视频的名称或者其他的信息存在mysql里,JQUERY,css等。php后台调用ffmpeg命令等等。整一个视频编辑模块真的很大很复杂。
拓展
其实,在这基础上,还可以围绕flowplayer这个播放器开发出很多的功能,比如视频打点,视频索引,视频缩列图预览等等。这些功能都已经开发出来,知识就是不断地积累和创新。
直接上几张大图。
                                                                                                                                         剪切图
                                                                                                                            合并图

视频打点和索引


转自http://blog.csdn.net/u012979009/article/details/50585858

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于web的在线视频编辑的设计 的相关文章

随机推荐

  • Java自学路线(超全超详细)—初学者零基础版Ⅰ

    Java 对于第一次见到它的人来说 不知道它是什么东西 可能看起来是个单词 可是通过网络翻译却没办法给它一个中文定义 但是 在计算机领域中 它是一门面向对象的编程语言 那么问题来了 有人对于 面向对象的编程语言 这个词组并不理解 在此 作出
  • 出现'MySQL Daemon failed to start‘解决方法

    方法千万条 备份第一条 运行 service mysqld start 重启数据库总是会出现如下提示 MySQL Daemon failed to start Starting mysqld FAILED 的提示 如果直接输入 mysql
  • Ubuntu/linux c开发(6)内存泄露

    写好个服务程序 短期测试没啥问题 准备跑长时间的 结果 前两天正常 第三天突然涨了100多M 这感觉 爽飞了 这里说下Ubuntu中内存泄露检测工具 Valgrind 安装和使用连接如下 链接 Valgrind安装使用 这里大概说下统计结果
  • 神经网络量化

    前言 神经网络在图像 语音识别等领域使用越来越广泛 大部分实时性要求不高的服务都可以部署在云上 然而还是有不少模型需要在计算能力有限的可移动设备上快速运行 如人脸解锁 拍照视频的实时处理等 一般训练的模型采用的都是32位浮点数 考虑到大部分
  • 第四讲 赋予网页样式

    文科编程系列课程 Web开发 第四讲 赋予网页样式 目录 引言 1 大小 1 1 长度单位 1 1 1 px 像素 1 1 2 百分比 1 2 宽高 1 1 1 宽度 1 1 2 高度 1 1 3 边框 2 颜色 2 1 颜色的三种表示形式
  • 毕业设计:自主开发的害虫识别系统--文档附源码

    基于yolov5多目标检测算法的农业害虫识别查询系统 设计文档 目标问题与意义价值 研究意义 本项目能够及时准确地识别农业害虫的种类 是害虫准确测报和合理防治的前提 传统的害虫识别方法主要依赖个人的专业经验进行辨别 或参考书本 网络上的文字
  • Qt5(一)编写Qt多窗口程序

    本文作者 小嗷 微信公众号 aoxiaoji 吹比QQ群 736854977 链接 https f600lt github io archives 摘要 这篇开始将从基础知识点开始一步一步QT到QT项目 原因就是读者说 QT类很多看不懂 这
  • 如何抵御ddos攻击-免费防御方法分享

    网站遭受DDOS攻击不要怕 今天来跟大家聊聊防御ddos攻击 顺便分享一些防御ddos攻击比较使用的方法 如果你是学生也不要紧 这里可以给你分享免费的防御方法 针对ddos攻击 我们升级服务器带宽配置是不起作用的 因为大部分攻击都是来自海外
  • 文心千帆为你而来

    1 前言 3月16号百度率先发布了国内第一个人工智能大语言模型 文心一言 文心一言的发布在业界引起了不小的震动 而文心一言的企业服务则由文心千帆大模型平台提供 文心千帆大模型平台是百度智能云打造出来的一站式大模型开发与应用平台 提供包括文心
  • 【面试题】说一下promise的理解

    一 什么是Promise ES6 异步编程的一种解决方案 比传统的方案 回调函数和事件 更加的合理和强大 大家都知道传统解决异步编程用的是回调函数套回调函数 简称回调地域 以前用JQuery的朋友应该是相当熟悉了 维护起来很难搞 回调地域
  • 七种Linux设备驱动模型之——Device

    前言 Linux将所有的设备统一抽象为struct device结构 同时将所有的驱动统一抽象为struct device driver结构 这样设计之后就方便驱动开发工程师编写驱动 只需要将具体的设备包含struct device结构 具
  • std::string用法总结

    在平常工作中经常用到了string类 本人记忆了不好用到了的时候经常要去查询 在网上摘抄一下总结一下 为以后的查询方便 string类的构造函数 string const char s 用c字符串s初始化string int n char
  • Windows10下Nginx初步配置

    1 nginx启动与关闭 nginx启动命令 一闪而过为正常启动 且看不到nginx进程 D server nginx nginx 1 16 0 gt start nginx nginx关闭命令 快速停止 nginx s stop 完整有序
  • 宝塔面板ip:端口,访问不进去;提示:请使用正确的入口登录面板 解决办法

    请使用正确的入口登录面板 错误原因 当前新安装的已经开启了安全入口登录 新装机器都会随机一个8位字符的安全入口名称 亦可以在面板设置处修改 如您没记录或不记得了 可以使用以下方式解决 解决方法 在SSH终端输入以下一种命令来解决 1 查看面
  • Android servicemanager进程启动过程

    在分析ServiceManager实例化注册流程前 先放张ServiceManager在Binder体系中的UML图 一 ServiceManager启动流程 查看system core rootdir init rc脚本可知 init进程
  • 用anaconda在d盘中创建虚拟环境

    我可以给你一些提示 首先 你需要在D盘中打开Anaconda Prompt 然后使用命令 conda create n python 来创建虚拟环境 其中 是你要为虚拟环境起的名字 而 则是你想安装的Python版本
  • 2023-9-11 拆分-Nim游戏

    题目链接 拆分 Nim游戏 include
  • 浅谈几个通信概念-如何理解卷积,负频率,傅里叶变换,奈奎斯特采样定理?

    1 如何理解卷积 t时刻的输出信号是t时刻之前的无数小的脉冲序列冲击引起的 2 如何理解欧拉公式 复指数信号呢 可以看成一个点在复平面上以角速度w进行逆时针的旋转 傅里叶分析 整体到部分 把一个信号分解成无数个基频组成的信号的和的过程 of
  • 7-4 输出三角形字符阵列 (15 分)

    7 4 输出三角形字符阵列 15 分 本题要求编写程序 输出n行由大写字母A开始构成的三角形字符阵列 输入格式 输入在一行中给出一个正整数n 1 n lt 7 输出格式 输出n行由大写字母A开始构成的三角形字符阵列 格式见输出样例 其中每个
  • 基于web的在线视频编辑的设计

    基于web的在线视频编辑的设计 我在这里首先说明一下 本设计只涉及到逻辑设计和关键的技术 具体的实现方法 语言就得运用自己的特长去解决了 场景 1 比如我用手机录播一段很长的MP4格式的视频 我想剪切其中的几段 然后在合并成一个新的视频 如