一个亲戚孩子的毕设需要用到的,本打算用 h.265 ,但昨天发了个贴,没人回。于是我想那就 h.264 吧。。
如果消耗了脑细胞,解决问题了我给您发个红包喝杯咖啡?
想把一个 4k/60p 视频压成 H.264 SVC 。
・不要 B 帧
・时间不用伸缩,所有层都是 60p
・base 层极低分辨率
・提供多个分辨率 /清晰度的层
ffmpeg 不太熟,而且关于 svc 的资料网上也很少,有知道怎么设 ffmpeg 参数的老兄么?
1
hello2060 2021-05-27 10:30:50 +08:00
首先你要确定能用 FFMPEG 压,H.264 fmpeg 有自带的 encoder, 也有用 X264 也就是 libx264.
最简单的,下载源码,找到那两个 encoder 的文件,看接受那些参数就行了。或者看看 x264 是否接受制定一个 svc 相关的 profile |
2
minami 2021-05-27 10:55:59 +08:00
x264 不支持 svc,你需要用 openh264 。但我看了下 ffmpeg 关于 openh264 的文档,我建议你直接用 openh264,doge
|
3
fl2d OP |
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; |
7
fl2d OP |
8
minami 2021-05-27 17:42:21 +08:00
@fl2d 你去 openh264 的 github 页面,命令行操作的 demo 在 testbin 目录下,资源文件在 res 目录下。顺带一提上面说的 doxygen 文档就在 wiki 页面,里面有通过 API 调用的 demo
|
10
fl2d OP @minami
testbin 里的例子跑通了。 尽管是唯一能找到的工具了,但是 openh264 对 svc 的支持相当不行啊。 比如,命令行只能解出来最高层,issue 里说用 c 倒是可以分开各层,但 spatial 层之间竟然是完全独立的。 |
11
fl2d OP |
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 这玩意之所以一直不温不火,确实是因为实际应用中没有什么用。。。。 |