开源一套视频处理工具链 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Lychee0
V2EX    程序员

开源一套视频处理工具链

  Lychee0
Tohrusky 2024 年 10 月 27 日 6582 次点击
这是一个创建于 464 天前的主题,其中的信息可能已经有所发展或是发生改变。

基本概念

前段时间,影视剧风被下架的视频,讨论了国内流媒体平台画质和码率过度压缩的问题,在站内也有不少讨论。

image

事实上作为 pter,我们可以很轻松获取到原盘以及各大压制组压制的视频,但是对于普通用户来说,这个问题就比较棘手了。

对于一些 VR 设备来说,我们甚至期望视频能有 4k+ 的分辨率,以获得更好的观影体验。

  • 压制也是一个小圈子,目前社区拥抱的技术栈普遍是 VapourSynth + FFmpeg(x264/x265/AV1...)
  • 这里不介绍视频编码器的参数,只涉及 VapourSynth ,你可以把他当成一个 Python library ,以下我们简称为 vs

让我们来压制第一个视频!别担心,后面我们会提供全 Docker 化的解决方案,毕竟配环境总是令人痛苦万分的 lol

import vapoursynth as vs from vapoursynth import core clip = core.bs.VideoSource(source="s.mkv") clip.set_output() 

接下来,我们用 vspipe 来执行这个脚本,pipe 到 ffmpeg 开始压制

vspipe script.py - | ffmpeg -i - -vcodec libx265 -crf 16 output.mkv 

超分辨率

  • 超分辨率( Super-Resolution )也是 low level vision 领域的一个重要研究方向 (灌水重灾区),目前也有不少开源项目,社区模型( weights )也非常丰富

通过 SISR (Single Image Super-Resolution) 或者 VSR (Video Super-Resolution) 技术,我们可以轻松 Enhance 视频

不过这个方向并没有 huggingface 那种方便的 lib ,vs 社区里的一些方案也并不是那么灵活

所以我们开源了 ccrestoration,一个基于纯 PyTorch 的 SR 推理库,依赖干净,没有 MMCV,设计上参考了 BasicSR 和 huggingface Transformers 。通过自定义配置,可以轻松 online load 各种各样的社区模型

当然,它也支持 vs ,你可以直接在 vs 脚本里调用它

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 模型了,它有完整的类型提示

容器化

2024 年了,不搞 Docker 怎么行呢? AMD ROCm 甚至已经支持了 WSL2 Docker ,让我们把上面的环境打包吧~

vs-playground 提供了打包好的环境,以及提供了基于 Juptyer 的 Web IDE

你可以直接在浏览器里写 vs 脚本,在线预览任意一帧,调整参数,开始压制

vsplayground001

分布式

不过,单机压制速度还是太慢了,所以我们构建了一个并行压制的最小实现 FinalRip

FinalRip

通过简易的 Dashboard ,你可以轻松分布式执行你在 vs-playground 里写好的脚本

FinalRip 会把视频切成多个 clip ,接着送到队列里,等待 worker 消费,最后合并输出。当然现在还是实验阶段,API 写的也很糙

全自动追番

构建了上面的工具链,老二刺螈初心还是不能忘,所以我们还开源了一个全自动追番工具 AnimePipeline

AnimePipeline

配置 RSS ,自动下载任务送到 FinalRip ,然后上传到 Telegram 等,方便分享给大家

  • 这是跑完一季后的结果,当然只是一个示例,x265 8bit 显然是不合适的

animepipeline001

可是,新番很多都是英肉,人名看不懂咋办啊?幸好现在有 LLM ,结合 bangumi 信息,翻译质量还是不错的。

我们开源了一个简单的 LLM 动漫翻译字幕工具 yuisub ,它提供了自动生成双语 ASS 特效字幕的 API ,也可以作为 cli 使用

llmsub01 llmsub02

结语

这套工具链目前还处于早期开发阶段,如果你有任何问题,欢迎提出 issue

近期会完善 SR 推理库,支持更多的网络结构

下面是所有提及的仓库:

42 条回复    2024-11-11 02:47:55 +08:00
jalena
    1
jalena  
   2024 年 10 月 27 日   1
我其实更关心哪里能搞到片源
ychee0
    2
Lychee0  
OP
   2024 年 10 月 27 日
@jalena 加入 pt 大家庭)需求不大的话看看 bt 就好
slowman
    3
slowman  
   2024 年 10 月 27 日
太专业了, 门槛有点高
SVFITeam
    4
SVFITeam  
   2024 年 10 月 27 日   1
很好用的 ccrestoraton ,使我牛牛旋转
tangguo
    5
tangguo  
   2024 年 10 月 28 日
看完了,还是得整个 nas 啊
R4rvZ6agNVWr56V0
    6
R4rvZ6agNVWr56V0  
   2024 年 10 月 28 日
下载的话,bt 也可以搞到大多数蓝光片源。
假如我搞到了高清片源那:
“通过 SISR (Single Image Super-Resolution) 或者 VSR (Video Super-Resolution) 技术,我们可以轻松 Enhance 视频”

的目的是啥?
importmeta
    7
importmeta  
   2024 年 10 月 28 日
希望未来能对标小丸工具箱和夏娜编码器
Lychee0
    8
Lychee0  
OP
   2024 年 10 月 28 日
@GeekGao
- 新电影/电视剧真 4K 比较多。bt 拿到 4K BD 或者流媒体源难度也很低,这时候确实没必要 SR ,是一个纯粹的压制问题了
- 老片的 4K BD 很可能是后发行 BD 随意 upscale 上的,也就是所谓的假 4K
- 对于动漫,现在的原生分辨率(等效)甚至可能没有 1080p ,普遍 720p-880p

SR 在这里只是扮演一个滤镜的角色,你也可以顺便干点别的 low level vision 任务,比如补帧
Lychee0
    9
Lychee0  
OP
   2024 年 10 月 28 日
@importmeta hhh 谢谢,不过小丸夏娜是一个图形化的 ffmpeg 封装,这里更关注 ffmpeg 之外的事情
R4rvZ6agNVWr56V0
    10
R4rvZ6agNVWr56V0  
   2024 年 10 月 28 日
@Lychee0 soga
kiduu
    11
kiduu  
   2024 年 10 月 28 日
请教一下这个字幕对于日语番剧的翻译准确度怎么样,而且我看还有 bangumi 的相关设置,是不是已经做好了角色名称固定为 bangumi 的 wiki 。纯粹好奇,以前用的 AI 翻译很多时候牛头不对马嘴的。
Lychee0
    12
Lychee0  
OP
   2024 年 10 月 28 日
@kiduu
是的,会爬取 bangumi 的角色中日罗马音,和内容简介,具体可以看生成的 prompt
最近用它完整看过两季番剧,人名方面没啥大问题,但因为是英字翻过去的--英字本来就翻译的不太行
所以我是主要看英字,瞟着看人名
ysc3839
    13
ysc3839  
   2024 年 10 月 28 日 via Android
@jalena 动画的话 dmhy.org
不过基本只有 WEB-DL ,没有蓝光原盘。蓝光原盘估计得去 PT 站。
Lychee0
    14
Lychee0  
OP
   2024 年 10 月 28 日
@ysc3839
进了_2 后其实也发现看圆盘太麻烦,不如看压制组的(
更多时候当素材站拿圆盘了
k9982874
    15
k9982874  
   2024 年 10 月 28 日 via Android
压制普通用户用菠萝就足够了
xzg1993
    16
xzg1993  
   2024 年 10 月 28 日   1
事实上作为 pter ,我们可以很轻松获取到原盘以及各大压制组压制的视频,但是对于普通用户来说,这个问题就比较棘手了。
--------------------------------------------------------------------------
小白不懂,请问 pter 是啥职位,为啥能接触到原盘嘞?
ohoh
    17
ohoh  
   2024 年 10 月 28 日
@xzg1993 PT er, “种马”
cs328
    18
cs328  
   2024 年 10 月 28 日
古老的玩家
Lychee0
    19
Lychee0  
OP
   2024 年 10 月 28 日
@xzg1993
盗版小团体(雾
自行搜索 private tracker 或者某贴吧
FlashEcho
    20
FlashEcho  
   2024 年 10 月 28 日
看到标题吓我一跳,我还以为有大神做了个非编软件或者 ffmpeg 之类的东西
qinfengge
    21
qinfengge  
   2024 年 10 月 28 日
牛逼,不过最近很少看剧了,看的话也是直接转存到网盘或者 TVBOX 了。
neutrino
    22
neutrino  
   2024 年 10 月 28 日 via Android
目标受众是眼镜用户和拥有 4k 以上分辨率显示器的用户,感觉现在看的还是 720p 上下比较多
Lychee0
    23
Lychee0  
OP
   2024 年 10 月 28 日
@neutrino
720p 不至于吧
国内流媒体再阉割,1080p 还是有的?我也不太清楚
DylanRing0
    24
DylanRing0  
   2024 年 10 月 28 日
挺好的项目,就是缺了滤镜要自己装会挺麻烦的
希望模型的部分可以和这个项目对标 https://github.com/styler00dollar/VSGAN-tensorrt-docker
Lychee0
    25
Lychee0  
OP
   2024 年 10 月 28 日
@DylanRing0
- 这个项目有参考的,不过 sudo 写的 Dockerfile 属实难懂,索性暂时 conda 一把梭了。最近还似乎移除 torch 了,我也不太清楚它现在咋整的,可能 all in trt 了
- 不是很熟悉 vs ,滤镜的话希望有人帮忙 pr 下,目前 conda 没有的滤镜暂时就没整。其实 vs 用户的话用 arch 做 base container 应该更方便一些,aur 编译滤镜很省事
- 考虑 ROCm 短期不会写 trt 支持
- 补帧或者其他任务的话可能会单独写个新库,看计划安排
nilaoda
    26
nilaoda  
   2024 年 10 月 28 日   1
二次元头像技术力还是强
sayyiku
    27
sayyiku  
   2024 年 10 月 28 日
太感谢了,正好需要
akatale
    28
akatale  
   2024 年 10 月 28 日
@nilaoda 没想到牢大 V 站也有号,这是找回密码了?
guanzhangzhang
    29
guanzhangzhang  
   2024 年 10 月 28 日
对这种使用技术解决生活和兴趣方向上遇到问题的态度和执行力点赞
Lychee0
    30
Lychee0  
OP
   2024 年 10 月 28 日 via iPhone
@nilaoda 牢大,你的 bbdown 太好用辣
iorilu
    31
iorilu  
   2024 年 10 月 28 日
问下, 有没有好用的 python 库用来剪辑视频的或者包装好的 gui

有时候其实就需要简单剪辑, 没必要用剪影之类工具
nilaoda
    32
nilaoda  
   2024 年 10 月 28 日
@akatale V 站不常用……
deplives
    33
deplives  
   2024 年 10 月 28 日
我都是 ffmpeg 一把梭
hafuhafu
    34
hafuhafu  
   2024 年 10 月 28 日
好长一段,看着效果挺不错的,抽空试一下。
感觉翻译时,如果已经从 bangumi 取数据了,是不是还能顺便生成一下刮削信息啥的。
kero991
    35
kero991  
   2024 年 10 月 28 日
我还是多年前自己搞过 avs+megui 的组合,不知道现在你们都用啥,当年有一个内置的某压片组预设的 megui ,现在也丢了。自己搞参数显然没前途
ala2008
    36
ala2008  
   2024 年 10 月 28 日
感觉很强大,但是有没有基于浏览器插件看片自动翻译( dog
Lychee0
    37
Lychee0  
OP
   2024 年 10 月 28 日 via iPhone
@kero991
第一段就说了哦 vs pipe 到编码器
avs 基本没啥组用了
Lychee0
    38
Lychee0  
OP
   2024 年 10 月 28 日 via iPhone
@hafuhafu
这方面不太熟悉
不过我认为发种命名规范(见 animepipeline 的自动重命名截图)下游刮削是没有问题的
Lychee0
    39
Lychee0  
OP
   2024 年 10 月 28 日 via iPhone
@iorilu
剪辑的话… 好像就 pymovie ?也不是太方便
akatale
    40
akatale  
   2024 年 10 月 29 日
chenxinhaier
    41
chenxinhaier  
   2024 年 10 月 31 日
god bless you
ZiLong
    42
ZiLong  
   2024 年 11 月 11 日
很有意思
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2464 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 28ms UTC 11:24 PVG 19:24 LAX 03:24 JFK 06:24
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86