请教一个视频网站的设计方案 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
fatDex
V2EX    程序员

请教一个视频网站的设计方案

  •  
  •   fatDex 278 天前 1643 次点击
    这是一个创建于 278 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求大致如下:

    1. 网站用于上传一个大小至少为 1GB 的视频文件;
    2. 上传成功后,需要能够在网站上逐帧回放这个视频,必须能精确到每一帧;
    3. 定位到某一帧后,可以在这一帧的画面里面绘制直线或者多边形用于标注;
    4. 标注完成后,再把视频和标注的数据统一发给另外一个服务器的 API 用于进一步解析;
    5. 解析后的结果返回到网站,提供在线查看与下载;
    6. 用户量暂时不大,同一时间最多不到 10 个人访问。

    这里面最大的难点可能就在前三项了,自己没有做过视频相关的产品,感觉有很多坑的样子。也问过 gpt ,但还是有些迷茫。想请教下各位,有没有什么比较推荐的解决方案呢,最好是成本低一些的,十分感谢!

    21 条回复    2025-01-22 15:13:49 +08:00
    humbass
        1
    humbass  
       278 天前   1
    没啥难度,但是工作量还是有的

    帧操作肯定有一个定制版的滑动条,用来定位帧啥的;
    其次是多边形标注;
    至于说第 1 条,做个分片的断点续传
    linshuizhaoying
        2
    linshuizhaoying  
       278 天前   1
    标注简单 canvas 定位 画图
    Solix
        3
    Solix  
       278 天前 via iPhone   1
    你应该找视频解析编辑框架,比如这个 https://juejin.cn/post/7380702373570494490
    hiwind
        4
    hiwind  
       278 天前   1
    第一条要考虑实际使用者的网络环境吧
    内网速度够快的话应该问题不大 公网的话是不是要考虑下断点续传?
    2 服务器拿到视频之后做切分转格式按需给前端

    标记数据看起来跟单个帧是绑定的 这块触及到知识盲区了 等下大佬们的回答
    fatDex
        5
    fatDex  
    OP
       278 天前
    @dejavuwind 是公网环境,所以目前看下来肯定得做断点续传了。标记的话我觉得只需要记录下帧号以及在这个帧下的几个标记的位置就行了,这块并不需要对原始的视频数据做任何修改,所以应该相对容易实现。视频逐帧解析这块工作我目前打算放在前端,类似于用 ffmpeg.js 这种东西,但不知道前端做起来效率怎么样。
    fatDex
        6
    fatDex  
    OP
       278 天前
    @gaobh 啊,这个看起来挺有启发的,我研究一下,感谢~
    fatDex
        7
    fatDex  
    OP
       278 天前
    @linshuizhaoying 对,我目前也是这么想。
    fatDex
        8
    fatDex  
    OP
       278 天前
    @humbass 没错,得有一个专门的进度条。
    iamzuoxinyu
        9
    iamzuoxinyu  
       278 天前
    前端用 ffmpeg+wasm 挺合适的。wasm 虽然性能有点捉急,但你的场景似乎不用考虑 25+的帧率;其它的就是做好解码缓存就行,有 B 帧处理起来稍微麻烦一些。
    iamzuoxinyu
        10
    iamzuoxinyu  
       278 天前   1
    另外 webcodecs 看主流版本浏览器也支持了,可以优先考虑这个。
    fatDex
        11
    fatDex  
    OP
       278 天前
    @iamzuoxinyu 好的,我研究下,感谢~
    fatDex
        12
    fatDex  
    OP
       278 天前
    @iamzuoxinyu 感觉思路一下子打开了
    wnpllrzodiac
        13
    wnpllrzodiac  
       278 天前 via Android
    有个本地编辑视频的开源项目。electron 做的,逐桢编辑
    netnr
        14
    netnr  
       278 天前 via Android   1
    用 Uppy.js TUS 协议上传

    前端处理视频要考虑超大视频文件是否支持,
    稳妥还是后台处理,拿到总帧数,然后弄个类似分页的组件,动态加载对应帧画面
    fatDex
        15
    fatDex  
    OP
       277 天前
    @netnr 收到~ 关于前端处理的问题,昨天收到大家的建议之后我发现也可以考虑用 webcodecs 这样子的前端方案去先在本地处理好视频,再做后续调用 API 的工作,这样子的好处是可以少上传一次视频,并且也不需要专门用来存视频的服务器了,不过我自己试了下一些基于 webcodecs 的几个开源项目,包括 B 站的 WebAV 以及 3 楼兄弟推荐的 fly-cut ,都遇到了一个问题,就是如果视频有几百兆的话,处理起来都很慢,甚至看起来页面跟完全没反应一样,要等好久,我现在还不确定究竟是什么问题,但这可能就是你提到的超大视频文件支持的问题?考虑到我这边的需求,视频普通都是大于 1 GB 甚至几十 GB 的,或许真的不用考虑前端处理了。
    skallz
        16
    skallz  
       277 天前   1
    前端处理的话,web 的话大视频基本不太可能,内存捉急,electron 可以考虑下
    @fatDex
    zzzyyysss
        17
    zzzyyysss  
       277 天前   1
    @fatDex 视频这么大的话 只能分片传到后端 然后再处理,不过前端有个读取文件的 api `File System Access API` 是不是可以拿到目录权限 然后每次读取视频文件的一部分来处理。
    zzzyyysss
        18
    zzzyyysss  
       277 天前
    不过这种需求感觉打包个 electron 更适合,直接处理完数据发送给指定的 API 。
    fatDex
        19
    fatDex  
    OP
       277 天前
    @wnpllrzodiac 请问下知道这个项目叫什么名字么?
    fatDex
        20
    fatDex  
    OP
       277 天前
    @zzzyyysss 嗯,看很多人都提到 electron ,我研究下看看。
    table cellpadding="0" cellspacing="0" border="0" width="100%"> wnpllrzodiac
        21
    wnpllrzodiac  
       276 天前   1
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2483 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 02:28 PVG 10:28 LAX 19:28 JFK 22:28
    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