windowsair / bilibili_danmaku

bilibili 弹幕工具集 - 直播录制、直播弹幕、SC渲染、XML转ASS
GNU General Public License v3.0
54 stars 1 forks source link

想输出4K,但强制设置分辨率无效,也无法追加使用-vf scale #8

Open YRFBK opened 2 years ago

YRFBK commented 2 years ago

录的直播最近推流变成了20M,1080P下B站转码后会糊很多,想使用4K进行上传,但经测试强制设置分辨率无效,也无法追加使用-vf scale image 设置分辨率无效,文件仍为1080P image 使用-vf scale无效,报错提示Filtergraph 'scale=3840:2160' was specified through the -vf/-af/-filter option for output stream 0:0, which is fed from a complex filtergraph.

windowsair commented 2 years ago

我不清楚实际的使用场景,我先问几个问题:

  1. 直播源有没有4K输出?
  2. 如果有4K输出,目前项目是不是没有正确获取到4K的输出?
  3. 如果没有4K输出,目前您想做的是不是强制将1080P转为4K?
YRFBK commented 2 years ago

直播源无4K,是20M码率的1080P,想要强制转为4K

windowsair commented 2 years ago

但是这样强制转的话,效果肯定是比AI超分的效果差的。

您可以先试试裸视频用ffmpeg放缩到4K,看效果是不是符合您的预期。如果您觉得有必要,后续我可以考虑添加这个功能

YRFBK commented 2 years ago

有进行过ffmpeg放缩测试,效果还算良好 这边推流的码率为20M,1080P经B站转码过审后稿件在2M左右,4K标准的话可以达到10M-16M BV14D4y1t7Cy 这份是用-vf scale=2664:1442拉出来的稿件,蹭4K观感会比1080P强上很多 有考虑过AI超分,但时效性就…… 确有需求,可以的话辛苦添加了

windowsair commented 2 years ago

放缩的话不知道会不会很吃性能,待我后续测试下

YRFBK commented 2 years ago

测试了下R5 5600G,使用如下指令处理1080P 20M的视频文件,速率为3.4x ffmpeg -i input.mp4 -c:v h264_amf -vf scale=-1:1442 -c:a copy -b:v 20m -y output.mp4 改为scale=-1:2160后,速率仅有1.6X了 1442P是蹭B站4K的最低标准,可以的话希望对这个分辨率进行适配添加

windowsair commented 2 years ago

N卡这边可以用硬件放缩,但是好像需要专有版本的ffmpeg A卡似乎没有可以利用的硬件加速= =

YRFBK commented 2 years ago

酱紫啊……那应该是需要专门版本的ffmpeg 群友使用5900X+3080TI进行hevc_nvenc scale=-1:2160的处理,速率为1.8X 虽然一个h265一个h264,但比起我5600G核显的1.6X,这个速度差确实更像是只受到了CPU性能差距上的影响

windowsair commented 2 years ago

您好,能否测试下这个版本,添加了对缩放的支持

https://github.com/windowsair/bilibili_danmaku/actions/runs/3411062366

Windows版本的下载地址为 https://github.com/windowsair/bilibili_danmaku/suites/9166890436/artifacts/426895434

在使用的时候需要在config中添加这些内容:

        "output_scale_enable": true,
        "#output_scale_enable": [ "是否要启用输出视频缩放", "该功能可以用于1080P转伪4K等需求,一般不启用",
            "true为启用", "false为不启用"
        ],

        "output_scale_value": "2564:1442",
        "#output_scale_value": [ "缩放的比例, 按照 w:h 的格式进行输入",
            "例如1442P设置为2564:1442", "UHD设置为3840:2160", "4K设置为4096:2160"
        ],

        "output_scale_hwaccel": "none",
        "#output_scale_hwaccel": [ "在缩放时是否要使用硬件加速, 目前ffmpeg仅支持Nvidia卡的硬件加速",
            "设置为nvidia使用nvidia加速",
            "设置为none使用CPU进行计算,即无加速"
        ],

        "output_scale_algo": "bicubic",
        "#output_scale_algo": [ "采用的缩放算法, 可用的算法有如下几种",
            "bicubic 双三次插值(CPU/Nvidia)",
            "bilinear 双线性插值(CPU/Nvidia)",
            "neighbor 最近邻插值(CPU/Nvidia)",
            "lanczos lanczos算法(CPU/Nvidia)",
            "bicublin 亮度分量双三次缩放插值(CPU)",
            "fast_bilinear 快速双线性插值(CPU)",
            "area 平均面积插值(CPU)",
            "gauss 高斯插值(CPU)",
            "sinc sinc插值(CPU)",
            "spline (natural bicubic spline算法)(CPU)",
            "experimental 实验性算法(CPU)"
        ],

根据实际情况进行配置。

我只进行了简单的测试,CPU的话我的机器跑不动,带N卡加速对输出速率基本无影响。

windowsair commented 2 years ago

注意修改了上面的内容之后,输出的码率设置也记得修改一下

YRFBK commented 2 years ago

抱歉久等了,前几天一直是电台720P无法测试,辛苦老师添加功能,非常感谢 实际使用下来并没有很吃性能,但对GPU的占用貌似有点抽象 几份测试样本(3840:2160,bicubic)如下:

5600G+核显 :使用h264编码,CPU占用约20%,GPU占用约10%,两分钟能跑到0.9X 10750H+1650 :使用h265编码,CPU占用约40%,GPU占用约50% 5900X+3080TI :使用h265编码,CPU占用约10%,GPU占用约60%

以上样本均可正常输出,但存在一些问题:

  1. 两位N卡的朋友output_scale_hwaccel设置为nvidia后均会报错无法运行(如下图),设置为none反而可以正常使用

Cache_7f633e77d9bab1e3

  1. 三份样本输出的文件,属性里均会显示非常抽象的码率(90M-170M不等,如下图),不过实际用potplayer查看是正常的22M

`AP1IBG67 0FCCFM~23R9LG 以上是目前的测试结果。虽然存在一些问题,不过大概……能跑就行?(

windowsair commented 2 years ago

上面发的是个临时版本,现在又做了一个版本,这个版本基本上可以支持完全的自定义输出视频调整,比如目前的调整尺寸,添加水印等。不过文档还没有写好,得找个时间写下。

关于输出文件,目前你们是直接上传,还是会先用losslesscut等工具先粗切一下?如果有粗切,可以关注一下粗切过后的视频码率。

YRFBK commented 2 years ago

测试了下llc粗切后文件属性里的码率是正常的,不过这点其实没啥实际影响来着。 新版本的完全自定义输出会能帧率转换和填充黑边吗?有一个需求场景是手机推流的竖屏720P 30帧,目前是调整尺寸加黑边,处理成1080P 60帧后再压制弹幕。所用指令和实际效果如下: ffmpeg -i input.mp4 -vf "scale=-1:1080,pad=1920:1080:656:0,fps=60" -y output.mp4 image 不过这种直播很少遇到,三个多月只出现过两次,所以不能的话也没啥(

windowsair commented 2 years ago

只要是用ffmpeg能够处理的,一般来说都可以做到

YRFBK commented 2 years ago

好好好~另外能麻烦老师添加一个是否挂载弹幕的选项吗?能直出4K纯净版的话也可以节约些时间…… 直接把danmaku_show_range设置为0的话,担心稳定性还是会受到弹幕数据的影响。

windowsair commented 2 years ago

您好,能否尝试下最新的0.0.20版本。

https://github.com/windowsair/bilibili_danmaku/releases/tag/v0.0.20

1) 关于竖屏720P转横屏1080P

    "adjust_input_video_width": 1920,

    "adjust_input_video_height": 1080,

    "adjust_input_video_fps": 60,

2) 关于伪4K生成

见这篇文章的最后部分: https://github.com/windowsair/bilibili_danmaku/blob/master/doc/live_render_custom_feature.md#%E8%B0%83%E6%95%B4%E8%BE%93%E5%87%BA%E8%A7%86%E9%A2%91%E5%B0%BA%E5%AF%B8%E4%BC%AA4k%E7%94%9F%E6%88%90

3) 关于纯净版直出

应该不会考虑添加这个功能,有很多做得更好的工具,现在我们只专注于处理弹幕。

YRFBK commented 2 years ago

收到收到,辛苦老师了,等下周直播测试一下。 关于纯净版直出4K的工具老师能推荐几个吗?

windowsair commented 2 years ago

是说1080P转4K吗?暂时还不知道有啥😳

YRFBK commented 2 years ago

那做的更好的工具是指😵

windowsair commented 2 years ago

如果是直出直播源不做处理的,那我觉得BililiveRecorder就挺好的

YRFBK commented 2 years ago

那老师方便加一个弹幕流的开关来支持直出1080P转4K纯净版吗🥺 后压4K只能跑到2-3X,稍微有点慢(

windowsair commented 2 years ago

这个可以直接偷懒,这样设置

        "danmaku_show_range": 0,
        "#danmaku_show_range": "弹幕在屏幕上的显示范围,取值为0~1.0,为1时全屏显示",

        "danmaku_move_time": 4611686018427387903,
        "#danmaku_move_time": "滚动弹幕的停留时间(以秒计)",

danmaku_show_range设置为0,danmaku_move_time设置为一个特别大的数就行

YRFBK commented 2 years ago

好好好,收到收到~

windowsair commented 1 year ago

还有后续吗🥺

YRFBK commented 1 year ago

啊啊最近事情有点多忘记来反馈了……🥶 1080P转4K 输出纯净/弹幕版均使用正常,就是这俩同时开对性能的要求稍高了 例如10750H+1650,开一个弹幕版就要吃掉一半性能 5900X+3080TI的话,单个任务CPU占用约10%,GPU占用约30% 暂时还没有竖屏720P的直播,其余场景两周使用下来一切正常 之后用到竖屏720P转横屏1080P的话会及时来反馈各样本数据的,感谢充气老师捏😘