V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
fl2d
V2EX  ›  问与答

如何用 ffmpeg 压分层可伸缩视频(SVC)啊

  •  
  •   fl2d · 2021-05-27 09:42:35 +08:00 · 1402 次点击
    这是一个创建于 1304 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一个亲戚孩子的毕设需要用到的,本打算用 h.265 ,但昨天发了个贴,没人回。于是我想那就 h.264 吧。。

    如果消耗了脑细胞,解决问题了我给您发个红包喝杯咖啡?

    想把一个 4k/60p 视频压成 H.264 SVC 。

    ・不要 B 帧

    ・时间不用伸缩,所有层都是 60p

    ・base 层极低分辨率

    ・提供多个分辨率 /清晰度的层

    ffmpeg 不太熟,而且关于 svc 的资料网上也很少,有知道怎么设 ffmpeg 参数的老兄么?

    13 条回复    2021-05-30 11:15:32 +08:00
    hello2060
        1
    hello2060  
       2021-05-27 10:30:50 +08:00
    首先你要确定能用 FFMPEG 压,H.264 fmpeg 有自带的 encoder, 也有用 X264 也就是 libx264.

    最简单的,下载源码,找到那两个 encoder 的文件,看接受那些参数就行了。或者看看 x264 是否接受制定一个 svc 相关的 profile
    minami
        2
    minami  
       2021-05-27 10:55:59 +08:00
    x264 不支持 svc,你需要用 openh264 。但我看了下 ffmpeg 关于 openh264 的文档,我建议你直接用 openh264,doge
    fl2d
        3
    fl2d  
    OP
       2021-05-27 11:09:59 +08:00
    @hello2060 @minami
    我是在网上的只言片语里,发现似乎 x264 不支持 svc,需要用 openh264 。
    svc 资料真不多啊,说实话,openh264 的文档找了一圈都没找到。。。
    minami
        4
    minami  
       2021-05-27 11:14:12 +08:00
    @fl2d 找不到是正常的,因为思科自己就没好好写文档。。。所有资料就是注释和 doxygen 文档
    fl2d
        5
    fl2d  
    OP
       2021-05-27 12:13:43 +08:00
    @minami
    这就不好整了🤦‍♂️
    为啥建议直接用 openh264 而不是用 ffmpeg ?
    minami
        6
    minami  
       2021-05-27 12:30:52 +08:00
    @fl2d #5 因为 ffmpeg 没有封装 SVC 相关参数,源码里面( libopenh264enc.c )也是写死的,你折腾这个要改源码,还不如直接用 openh264

    源码 179 、180 行,写死了没有使用 SVC:
    param.iTemporalLayerNum = 1;
    param.iSpatialLayerNum = 1;
    fl2d
        7
    fl2d  
    OP
       2021-05-27 17:16:55 +08:00
    @minami
    那就是说,openh264 可以直接命令行来编解码视频?
    完全找不到资料啊😢。。。你知道哪里能找到命令行操作的相关资料么?
    minami
        8
    minami  
       2021-05-27 17:42:21 +08:00
    @fl2d 你去 openh264 的 github 页面,命令行操作的 demo 在 testbin 目录下,资源文件在 res 目录下。顺带一提上面说的 doxygen 文档就在 wiki 页面,里面有通过 API 调用的 demo
    fl2d
        9
    fl2d  
    OP
       2021-05-28 07:15:26 +08:00
    @minami 非常感谢!!🙏 我研究一下!!
    fl2d
        10
    fl2d  
    OP
       2021-05-28 17:55:50 +08:00
    @minami
    testbin 里的例子跑通了。
    尽管是唯一能找到的工具了,但是 openh264 对 svc 的支持相当不行啊。
    比如,命令行只能解出来最高层,issue 里说用 c 倒是可以分开各层,但 spatial 层之间竟然是完全独立的。
    fl2d
        11
    fl2d  
    OP
       2021-05-29 17:09:52 +08:00
    @minami
    请问你了解 svt-av1/svt-vp9 么?
    这个名字里有 svt,实际上支不支持 scalable video?
    minami
        12
    minami  
       2021-05-29 17:54:26 +08:00   ❤️ 1
    @fl2d 据我所知 svt 的名字来源应该是 Intel 自家的 Xeon Scalable 产品线。支不支持 scalable video 是看编码器支持的标准内有没有 scalable 相关的东西。我们常说 x264 不支持 scalable video,是因为 x264 只支持 H264/AVC 标准,不支持 H264 的 Scalable Extension 即 SVC ; x265 只支持 HEVC 标准,不支持 HEVC 的 Scalable Extension 即 SHVC (顺便提一嘴,x265 也不支持 HEVC 的 Screen Content Coding Extensions 即 SCC,这个也是大痛点)。
    根据 webrtc 的文档,VP8 、VP9 、AV1 标准的非扩展部分都已经有 scalable video ( VP8 只支持时间伸缩),所以完整实现标准的编码器都应该支持。就是说你拿 libvpx 就可以编了,不信可以看 libvpx 内的 examples/vp9_spatial_svc_encoder.c 。svt-vp9 你也可以去看看,大概率也是有的
    不过恕我直言,SVC 这玩意之所以一直不温不火,确实是因为实际应用中没有什么用。。。。
    fl2d
        13
    fl2d  
    OP
       2021-05-30 11:15:32 +08:00
    @minami
    多谢!原来如此,是重名😂 查 svt 系列编解码器资料时,我也注意到 scalable 这个词常常被用在 cpu 上,我还纳闷儿呢。。
    是想做增量传视频。我以前听过 svc 的概念,觉得直接把 svc 跑通了就可以把故事说成增量传输了,所以让亲戚孩子选了这个题目。然而万万没想到,找不到工具🤦‍♂️
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2471 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 01:49 · PVG 09:49 · LAX 17:49 · JFK 20:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.