### 基本概念
前段时间,影视剧风被下架的视频,讨论了国内流媒体平台画质和码率过度压缩的问题,在站内也有不少讨论。
![image]( https://i.fshex.co/C78EAePF.jpeg)
事实上作为 *pter*,我们可以很轻松获取到原盘以及各大压制组压制的视频,但是对于普通用户来说,这个问题就比较棘手了。
对于一些 VR 设备来说,我们甚至期望视频能有 4k+ 的分辨率,以获得更好的观影体验。
- 压制也是一个小圈子,目前社区拥抱的技术栈普遍是 VapourSynth + FFmpeg(x264/x265/AV1...)
- 这里不介绍视频编码器的参数,只涉及 VapourSynth ,你可以把他当成一个 Python library ,以下我们简称为 vs
让我们来压制第一个视频!别担心,后面我们会提供全 Docker 化的解决方案,毕竟配环境总是令人痛苦万分的 lol
```python
import vapoursynth as vs
from vapoursynth import core
clip = core.bs.VideoSource(source="s.mkv")
clip.set_output()
```
接下来,我们用 `vspipe` 来执行这个脚本,pipe 到 ffmpeg 开始压制
```bash
vspipe script.py - | ffmpeg -i - -vcodec libx265 -crf 16 output.mkv
```
### [超分辨率]( https://github.com/TensoRaws/ccrestoration)
- 超分辨率( Super-Resolution )也是 low level vision 领域的一个重要研究方向 ~~(灌水重灾区)~~,目前也有不少开源项目,社区模型( weights )也[非常丰富]( https://openmodeldb.info/)
通过 SISR (Single Image Super-Resolution) 或者 VSR (Video Super-Resolution) 技术,我们可以轻松 Enhance 视频
不过这个方向并没有 huggingface 那种方便的 lib ,vs 社区里的一些方案也并不是那么灵活
所以我们开源了 [ccrestoration]( https://github.com/TensoRaws/ccrestoration),一个基于纯 PyTorch 的 SR 推理库,依赖干净,~~没有 MMCV~~,设计上参考了 BasicSR 和 huggingface Transformers 。通过自定义配置,可以轻松 online load 各种各样的社区模型
当然,它也支持 vs ,你可以直接在 vs 脚本里调用它
```python
import vapoursynth as vs
from vapoursynth import core
from ccrestoration import AutoModel, BaseModelInterface, ConfigType
model: BaseModelInterface = AutoModel.from_pretrained(
pretrained_model_name=ConfigType.RealESRGAN_APISR_RRDB_GAN_generator_2x
)
clip = core.bs.VideoSource(source="s.mp4")
clip = core.resize.Bicubic(clip=clip, matrix_in_s="709", format=vs.RGBH)
clip = model.inference_video(clip)
clip = core.resize.Bicubic(clip=clip, matrix_s="709", format=vs.YUV420P16)
clip.set_output()
```
现在,我们可以自由地调用相当多的 SR 模型了,它有完整的类型提示
### [容器化]( https://github.com/TensoRaws/vs-playground)
2024 年了,不搞 Docker 怎么行呢? AMD ROCm 甚至已经支持了 WSL2 Docker ,让我们把上面的环境打包吧~
[vs-playground]( https://github.com/TensoRaws/vs-playground) 提供了打包好的环境,以及提供了基于 Juptyer 的 Web IDE
你可以直接在浏览器里写 vs 脚本,在线预览任意一帧,调整参数,开始压制
![vsplayground001]( https://raw.githubusercontent.com/TensoRaws/.github/refs/heads/main/vsplayground001.png)
### [分布式]( https://github.com/TensoRaws/FinalRip)
不过,单机压制速度还是太慢了,所以我们构建了一个并行压制的最小实现 [FinalRip]( https://github.com/TensoRaws/FinalRip)
![FinalRip]( https://raw.githubusercontent.com/TensoRaws/.github/refs/heads/main/finalrip.png)
通过简易的 Dashboard ,你可以轻松分布式执行你在 vs-playground 里写好的脚本
FinalRip 会把视频切成多个 clip ,接着送到队列里,等待 worker 消费,最后合并输出。~~当然现在还是实验阶段,API 写的也很糙~~
### [全自动追番]( https://github.com/TensoRaws/AnimePipeline)
构建了上面的工具链,老二刺螈初心还是不能忘,所以我们还开源了一个全自动追番工具 [AnimePipeline]( https://github.com/TensoRaws/AnimePipeline)
![AnimePipeline]( https://raw.githubusercontent.com/TensoRaws/.github/refs/heads/main/animepipeline.png)
配置 RSS ,自动下载任务送到 FinalRip ,然后上传到 Telegram 等,方便分享给大家
- 这是跑完一季后的结果,当然只是一个示例,x265 8bit 显然是不合适的
![animepipeline001]( https://raw.githubusercontent.com/TensoRaws/.github/refs/heads/main/animepipeline001.png)
可是,新番很多都是英肉,人名看不懂咋办啊?幸好现在有 LLM ,结合 bangumi 信息,翻译质量还是不错的。
我们开源了一个简单的 LLM 动漫翻译字幕工具 [yuisub]( https://github.com/TensoRaws/yuisub) ,它提供了自动生成双语 ASS ~~特效~~字幕的 API ,也可以作为 cli 使用
![llmsub01]( https://raw.githubusercontent.com/TensoRaws/.github/refs/heads/main/llmsub01.png)
![llmsub02]( https://raw.githubusercontent.com/TensoRaws/.github/refs/heads/main/llmsub02.png)
### 结语
这套工具链目前还处于早期开发阶段,如果你有任何问题,欢迎提出 issue
近期会完善 SR 推理库,支持更多的网络结构
下面是所有提及的仓库:
- https://github.com/TensoRaws/ccrestoration
- https://github.com/TensoRaws/vs-playground
- https://github.com/TensoRaws/FinalRip
- https://github.com/TensoRaws/AnimePipeline
- https://github.com/TensoRaws/yuisub |
|