利用 b 站二压, 30fps 和 60fps 下显示不同的画面 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
爱意满满的作品展示区。
aynakeya

利用 b 站二压, 30fps 和 60fps 下显示不同的画面

  •  2
     
  •   aynakeya
    aynakeya Jul 3, 2024 3477 views
    This topic created in 665 days ago, the information mentioned may be changed or developed.

    效果图

    简单来说,当一个高 FPS 的视频压缩为较低 FPS 的视频时,会选择某些帧作为关键帧插入。

    B 站提供了 30fps 或 60fps 的视频。

    因此,我们可以创建一个 120fps 的视频,然后在第1+4n 帧插入你希望在 30fps 下显示的内容,其余帧则插入你希望在 60fps 下显示的内容。

    这样,在阿 b 二压后,30fps 和 60fps 的视频就会显示不同的画面。

    至于“1+4n”这个公式的由来。

    可以首先制作一个每帧都标有序号的 120fps 视频。然后使用 ffmpeg 将视频转换为 30fps ,观察哪些帧被保留,从而确定关键帧。

    proof of concept

    懒得传 gist 了

    import cv2 class Fps120FrameReader: def __init__(self, filename): self.src = cv2.VideoCapture(filename) self.framerate = int(self.src.get(cv2.CAP_PROP_FPS)) if self.framerate not in [30,60,120]: raise Exception(f"not support frame rate other than 30, 60, 120, framerate {self.framerate}") self.current_frame = 0 self.frame = None def read(self): if self.currnt_frame % (120 // self.framerate) == 0: ok, self.frame = self.src.read() if not ok: self.frame = None self.current_frame +=1 return self.frame def close(self): return self.src.release() @property def size(self): return int(self.src.get(cv2.CAP_PROP_FRAME_WIDTH)),int(self.src.get(cv2.CAP_PROP_FRAME_HEIGHT)) readerA = Fps120FrameReader('igotsmoke.mp4') readerB = Fps120FrameReader('benkui.mp4') assert readerA.size == readerB.size fourcc = cv2.VideoWriter_fourcc(*'mp4v') out = cv2.VideoWriter('output_video_C.mp4', fourcc, 120, readerA.size) frame_count = 0 while True: frameA = readerA.read() frameB = readerB.read() if frameA is None or frameB is None: break if frame_count % 4 == 1: out.write(frameA) else: out.write(frameB) frame_count += 1 readerA.close() readerB.close() out.release() print("ok") 
    16 replies    2024-07-04 10:57:29 +08:00
    ReZer0
        1
    ReZer0  
       Jul 3, 2024
    WOW ,我有一个大胆的想法!(指上传未过审的番剧和电影
    lany
        2
    lany  
       Jul 3, 2024
    还能这样玩
    V2SD
        3
    V2SD  
       Jul 3, 2024
    好思路!不过那正常看不就会全是画面闪现吗,审核能过嘛
    aynakeya
        4
    aynakeya  
    OP
       Jul 3, 2024   1
    @V2SD 30fps 和 60fps 都不会闪现,只有 120fps 才会闪
    darkengine
        5
    darkengine  
       Jul 3, 2024
    好奇问下,这样的视频 size 会比普通的 120hz 视频要大挺多?
    MakizonoFY
        6
    MakizonoFY  
       Jul 3, 2024   1
    B 站看片指日可待
    blankmiss
        7
    blankmiss  
       Jul 3, 2024
    额 我在 B 站上看到有人演示过 凤姐 和 热巴 那个视频对吧
    Plating
        8
    Plating  
       Jul 3, 2024
    可惜不能直播,彩 6 狂喜
    Bologna
        9
    Bologna  
       Jul 3, 2024
    在 b 站看过这个分析
    zhw2590582
        10
    zhw2590582  
       Jul 3, 2024
    有点意思
    yuzo555
        11
    yuzo555  
       Jul 3, 2024   1
    这视频得牛大一个吧,相邻帧之间毫无关联性,什么编码能优化这个
    cslive
        12
    cslive  
       Jul 3, 2024
    大会员专属视频,之前 b 站已经有人发过,大会员看的跟普通看的视频不一样,也是用 op 发的这个原理
    HeyWeGo
        13
    HeyWeGo  
       Jul 3, 2024
    这...是不是就说平行宇宙!
    zthxxx
        14
    zthxxx  
       Jul 3, 2024
    @yuzo555 没关系的,因为二压之后抽出来的就是正常视频流的序列帧了
    7gugu
        15
    7gugu  
       Jul 4, 2024 via iPhone
    我去这个也太牛皮了吧
    jpyl0423
        16
    jpyl0423  
       Jul 4, 2024
    音频也能这样处理吗
    About     Help     Advertise     Blog     API     FAQ     Solana     1040 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 55ms UTC 22:39 PVG 06:39 LAX 15:39 JFK 18:39
    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