0%

开发了一年多的bilibili云剪辑,终于打算讲讲我对web剪辑技术的理解

随着各长,短视频平台的兴起,我们的生活中各个角落都开始充斥着各式各样的视频。很多人吃饭的时候看视频,上厕所的时候看视频,甚至走路的时候都要刷一刷有趣的视频。

然而如此多的视频,不可能凭空产生。进入大众制作视频的时代的前提,也需要制作工具的繁荣昌盛,以及制作门槛的极大降低。而视频编辑器,则是视频制作的主要工具,今天我们要聊的内容,是基于web技术的视频编辑器。

讲web技术的视频编辑器之前,我们先思考一下非web技术的视频编辑器。在移动短视频平台兴起之前,市场上比较流行的剪辑工具都是类似于pr,ae等pc端本地比较专业的剪辑软件,日常生活中只有少数人会去接触尝试制作自己的视频。

而在抖音,西瓜等移动视频平台兴起之后,短视频制作的难度大幅度降低,一个完全没有接触过视频剪辑的人拿着手机捣鼓捣鼓,就能制作出一个有模有样的短视频。这个事可不得了,这代表着咱们进入了全民剪视频的时代。为什么会发生这样的巨变呢?我想,是因为移动网络的升级,硬件参数的提升,为视频拍摄,剪辑打下了物理层面上的基础,再加上移动设备的便捷性,为视频提供了庞大的消费市场,有了天时地利人和,所以移动设备的视频编辑能够兴起。

那么web剪辑技术呢,它是否也具有物理层面的基础以及广大的受众了呢? 答案既不是肯定,也不是否定。

从技术层面来说,WebAssembly的出现,使得在网页上剪辑视频这件事成为了可能,而越来越快的网络以及越来越强大的浏览器性能,也让在网页上处理一些更重量级的任务,变得顺理成章。虽然当前的网络与逊色于原生程序的性能,依旧是浏览器能力的一大掣肘,但是浏览器的便捷性,即开即用,无需安装等特性,会成为很多人使用它的理由,这也可能会成为未来互联网的趋势。

说到这里,得讲讲我这一年投入心血开发的bilibili云剪辑。它是一个复杂,重量级的项目,同上文所说,它的可能性依赖于WebAssembly,最底层是一个用Qt C++开发的视频渲染引擎,引擎暴露了一些基础api给js层。上层则通过这些基础api,层层的拼装设计,与复杂的交互结合在一起,形成了当前的bilibili云剪辑。开发它不是一件容易的事情,但是最终得到的成果,还是令人感到喜悦的。

今天累了,未完待续

经验和注意事项

在工作中使用了一段时间Docker来批量部署我的服务,也充当了一段时间运维,对于Docker的使用有了几条心得体会,在这里简单的列一下:

  1. 尽量使用docker-compose对docker的各项配置进行管理,防止后续对于手动使用docker的步骤遗忘
  2. docker的build过程、入口尽量设置成脚本文件,从而可以轻松应对更多的运行需求
  3. 规范化的管理好docker镜像、容器的名称很重要,方便在维护中快速查找
  4. 管理好docker network可以让docker应用之间轻松协作
  5. 可以使用docker快速搭建开发环境,并且使用volumes选项映射代码以及文件,产生改动能够立即映射到容器中

下面是我在aws linux虚拟机(Ubuntu 16.04)上快速安装Docker并且配置Docker的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/env bash

# 在没有docker的linux机器上面安装docker的脚本

sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get install docker-ce

sudo mkdir -p /etc/docker

# 如果是国外则不需要配置阿里云加速器
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["$你的加速器地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

# 安装docker-compose
curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
sudo mv ~/docker-compose /usr/local/bin/
sudo chmod +x /usr/local/bin/docker-compose

如果你在国内,你可能希望使用的国内的源以及镜像。
以下脚本可用于ubuntu16.04,在build Docker的脚本中加入国内源以及镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
cat > /etc/apt/sources.list << EOF
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
# 测试版源
deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
# 源码
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
# 测试版源
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
EOF
mkdir ~/.pip
touch ~/.pip/pip.conf
cat > ~/.pip/pip.conf << EOF
[global]
trusted-host=mirrors.aliyun.com
index-url=http://mirrors.aliyun.com/pypi/simple/
EOF