VapourSynth(VS) 视频处理压制入门教程
EddyStorm
编辑于 2022年03月13日 20:46
收录于文集
共1篇

目标

主要讲视频压制环境的搭建和基本压制流程,不讲视频压制技术原理(因为我不懂)。目标是看完可以了解视频压制的流程,适合对视频压制感兴趣,在网上查相关资料,却无从下手的同学。

工具下载与安装

1、MediaInfo - 查看视频和音频文件编码和封装信息

下载:mediaarea.net/en/MediaInfo

通常所说的视频格式,例如 mp4、mkv、avi 指的是封闭格式,也叫容器。

视频编码指视频压缩编码技术标准,例如 H.264、HEVC、VP8、VP9、AV1等。

音频编码指的是音频压缩编码技术标准,例如 WAV、MP3、AAC、OGG、Opus等。

2、FFmpeg - 跨平台录制、转换以及流化音频和视频完整解决方案

下载:ffmpeg.org

把 ffmpeg 目录加入到 环境变量。

“此电脑”右键“属性”(也可以“开始” - “设置” - “关于”),点击相关设置下的“高级系统设置”,弹出“系统属性”对话框,选择“高级”标签,点“环境变量”,弹出“环境变量”对话框,双击“EddyStorm的环境变量”里的“Path”,点击“新建”,将 ffmpeg.exe 所在目录粘贴,点击各个对话的“确认”按钮,完成环境变量设置。

打开“系统属性”对话框,选择“高级”标签,点击“环境变量”

将 ffmpeg.exe 所在的路径添加到环境变量

打开“cmd”,运行“ffmpeg -version”,可以看到 ffmpeg 版本信息,说明 ffmpeg 环境变量设置成功,并且可以正常运行。

代码块
Shell
自动换行
复制代码
C:\Users\EddyStorm>ffmpeg -version
ffmpeg version 4.4-essentials_build-www.gyan.dev Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 10.2.0 (Rev6, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-libass --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
libavutil      56. 70.100 / 56. 70.100
libavcodec     58.134.100 / 58.134.100
libavformat    58. 76.100 / 58. 76.100
libavdevice    58. 13.100 / 58. 13.100
libavfilter     7.110.100 /  7.110.100
libswscale      5.  9.100 /  5.  9.100
libswresample   3.  9.100 /  3.  9.100
libpostproc    55.  9.100 / 55.  9.100
复制成功

Tip:没有添加环境变量的话,运行 ffmpeg 命令会提示“'ffmpeg' 不是内部或外部命令,也不是可运行的程序或批处理文件。”,需要先进入到 ffmpeg.exe 的目录才能调用运行 ffmpeg。加入环境变量的话,可以任意目录运行 ffmpeg 命令。

代码块
Shell
自动换行
复制代码
C:\Users\EddyStorm>cd C:\Program Files\ffmpeg\bin #先进入 ffmpeg.exe 所在目录
C:\Program Files\ffmpeg\bin>ffmpeg -version       #再运行 ffmpeg 命令 
复制成功

3、Python - 脚本编程语言

下载:www.python.org

打开 cmd,输入 python -V,显示版本号,Python 安装成功。

代码块
Shell
自动换行
复制代码
C:\Users\EddyStorm>python -V
Python 3.9.5
复制成功

4、VapourSynth - 视频处理框架(FrameServer)

下载:http://www.vapoursynth.com/

要先成功安装 Python,再安装 VapourSynth。

cmd,输入 python,进入 python 环境。

输入 import vapoursynth 回车,

再输入 print(vapoursynth.core.version()) 回车,

会打印出 Vapoursynth 版本信息,说明 Vapoursynth 安装成功。

代码块
Shell
自动换行
复制代码
C:\Users\EddyStorm>python
Python 3.9.5 (tags/v3.9.5:0a7dcbd, May  3 2021, 17:27:52) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import vapoursynth
>>> print(vapoursynth.core.version())
VapourSynth Video Processing Library
Copyright (c) 2012-2021 Fredrik Mellbin
Core R53
API R3.6
Options: -
复制成功

5、VapourSynth Edit - VapourSynth 的 GUI 编辑器与预览

下载:bitbucket.org/mystery_keeper/vapoursynth-editor/downloads/

把下载的 VapourSynth Edit 解压到想要安装的位置,打开 vsedit.exe,菜单栏的 Edit 下拉,点 Settings。

设置对话框选 Paths 标签。

默认安装的路径 VaporSynth 库的路径 C:\Users\你的用户名\AppData\Roaming\VapourSynth\plugins64 默认安装 Python 插件的路径 C:\Users\你的用户名\AppData\Local\Programs\Python\Python39\Lib\site-packages

设置好这两个路径后,点 Apply 再点 OK,VapourSynth Edit 就设置好了。

VapourSynth 插件查找下载安装、运行示例文脚本

查看 VapourSynth 官方文档

要运行的示例脚本,这段代码条用了 Transpos 滤镜,会将视频旋转90度

例如:我在 C:\Users\EddyStorm\Videos\Test 里有个文件名为 tearsofsteel_4k.mov 的视频,在此目下新建一个文件 tearsofsteel_4k.vpy,使用 VapourSynth Editor(vsedit.exe)打开tearsofsteel_4k.vpy文件,把下面代码粘贴在 VapourSynth Editor 代码编辑区。然后,按 F5 或 菜单栏 Script 下拉的 Preview 进行预览。

Tip:学习测试的视频找 10 秒长度以内的就可以,因为视频处理过程会占用几乎 100% 的CPU资源,而且处理速度通常比想像的更慢。可以用 ffmpeg 裁剪一小段视频作为测试用,以免处理视频时间过长,当然也可以使用其他视频处理软件截取。

代码块
Shell
自动换行
复制代码
ffmpeg -ss 15 -t 5 -i test.mp4 -codec copy cut.mp4
#  -ss 15       从视频的第 15 秒开始截取
#  -t 5         截取 5 秒的视频,也就是截取视频的第 15 秒到 20 秒的内容
#  -i test.mp4  要截取的视频源
#  -codec copy  保留视频音频编码,可以无损截取
# cut.mp4       所截取视频文件名
复制成功

代码块
text/x-python
自动换行
复制代码
from vapoursynth import core
video = core.ffms2.Source(source='tearsofsteel_4k.mov')
#官方示例视频文件名是 Rule6.mkv,记得改成你要处理的视频文件名,
#例如我这里的 tearsofsteel_4k.mov
video = core.std.Transpose(video) #调用 Transpose 滤镜
video.set_output()
复制成功

因为还没有安装 ffms2,所以查找不到,可以使用 vsrepo 安装和管理插件脚本。

代码块
Shell
自动换行
复制代码
#使用 vsrepo 安装 ffms2
vsrepo.py install ffms2
复制成功

插件会自动安装到路径

C:\Users\你的用户名\AppData\Roaming\VapourSynth\plugins64

如果因为网络不畅,下载不下来可以访问 vsdb.top 手动下载插件脚本。

访问 VapourSynth 官网的插件页面

vsdb.top 提供插件和脚本列表

在 vsdb.top 找到 ffms2 插件

下载对应的 ffms2 版本,此处下载最后发布的 2.40 版本

解压下载的文件包,复制 ffms2.dll 到  C:\Users\你的用户名\AppData\Roaming\VapourSynth\plugins64 目录下。

安装好 ffms2 插件再回到 Vapoursynth Edit,按 F5 预览,此时会弹出视频经过处理后的预览窗口。

源视频是横向的

处理完后,视频逆时针旋转了90度

这样就成功预览了官方将视频旋转 90度 的示例脚本。

运行 cmd,使用 cd 命令进入测试视频所在目录

代码块
Shell
自动换行
复制代码
C:\Users\EddyStorm>cd C:\Users\Eddy\Videos\Test
C:\Users\EddyStorm\Videos\Test>
复制成功

再次查看官方的示例脚本,运行 vspipe 进行输出处理过的视频。

代码块
Shell
自动换行
复制代码
vspipe --y4m tearsofsteel_4k.vpy - | ffmpeg -i pipe: tearsofsteel_4k_Transpose.mp4
复制成功

视频处理完成,得到一个通过 Vapoursynth 处理,通过管道使用 ffmpeg 输出文件名为 tearsofsteel_4k_Transpose.mp4 的视频。

得到旋转后的视频

总结

通过 Vapoursynth 官网内容,可以把整个视频处理压制流程串联起来,具体滤镜的使用,要阅读相关滤镜文档或代码,ffmpeg 的使用也可以通过 ffmpeg 官网的文档 和 ffmpeg 的帮助命令,学习,x264、x265、AV1亦然。

熟悉绝对路径、相对路径、环境变量、命令行(cmd)等基本计算机知识,会在细节上少范错误,也相对容易找到细节上的错误。

写在后面

学习视频处理压制其实意义不大,花费的时间、精力和算力都很多,不能给工作和学习带来直接明显的帮助。

  • 原版视频不好下载。版权越来越规范,盗版视频不会像以前在开放平台公开传播,原版视频资源基本只在小圈子里流动

  • 压制相关工具和技术杂乱。视频处理压制的工具软件,基本是通过各种脚本组合链接,兼容性和细节太多,新手非常容易掉坑,经常示例代码都运行不起来。

  • 需要极高的算力,对电脑配置要求极高。虽然各显卡厂商现在都有支持硬件编码,但是效果稍好的都是新出的,价格也不便宜。像 AV1 等新的编码,计算强度不断提高,要你现在还压 H264,很多人是不愿意的,玩压制的大多要追新,电脑配置永远不够用的感觉。

  • 处理压制好的视频无人欣赏。对于非字幕组的人,处理压制好的视频几乎只能自己存档用,一般人是没有高热度的分发渠道,分享也有版权的风险。

很多人都明白学习视频处理压制并没有多大意义,还是在持续或时不时折腾并分享,做什么事都要讲求利益和意义,那还有什么意思,感兴趣有时间就折腾折腾,也没什么不好。