SmallPeaches / DanmakuRender

一个可以录制带弹幕直播流的小工具
367 stars 38 forks source link

最新版代码中渲染器高级参数似乎并没有生效,还有些其他问题 #147

Closed ddd-zero closed 1 year ago

ddd-zero commented 1 year ago

120

上次提交了一个强制弹幕渲染帧率为60的issues,今天拉取了新代码测试2个小时前的‘2a3b37d

测试地址为,小米直播间。直播间一直在循环宣传片,推出来的流为60帧。https://live.bilibili.com/545342

①当配置文件为默认配置,即

  advanced_render_args:  ~

首先录出来的原始视频是正常60帧,渲染出来的带弹幕版视频也是60帧,但弹幕看着非常卡,很明显是30帧的弹幕。理论上视频是60帧渲染出来的弹幕应该也是60帧,没搞明白为啥会这样。

②用和①相同的配置,仅更改视频直播地址为 英雄联盟 笑笑的直播间 https://live.bilibili.com/7777 ,相同的配置弹幕又是以60帧的帧率渲染的。 这是我没搞明白的。

③我又回去继续测试小米直播间的。

advanced_render_args:
  # 指定输出帧率。此选项不同于'-r',这里的帧率将直接作用在video filter上,默认保持原视频帧率
  fps: 60

加上高级参数,指定强制渲染60帧弹幕。发现结果与①依旧一样。手动尝试直接用render only 直接渲染。日志中显示参数是有的,但出来的视频还是和①一样,弹幕只有30

{'src': 'render', 'msg': './直播回放(带弹幕版)\\[正在录制] xiaomi-20231026-154217-Part000(带弹幕版).mp4', 'type': 'info', 'group': None, 'desc': '', 'msg_type': 'render', 'video': './直播回放\\[正在录制] xiaomi-20231026-154217-Part000.flv', 'danmaku': './直播回放\\[正在录制] xiaomi-20231026-154217-Part000.ass', 'output': './直播回放 (带弹幕版)\\[正在录制] xiaomi-20231026-154217-Part000(带弹幕版).mp4', 'video_info': None, 'config': {'output_dir': None, 'format': 'mp4', 'engine': 'ffmpeg', 'hwaccel_args': ['-hwaccel', 'dxva2'], 'vencoder': 'h264_qsv', 'vencoder_args': ['-profile:v', 'high', '-global_quality:v', 26, '-look_ahead', 0, '-g', 600, '-low_power', False, '-preset', 'slow', '-scenario', 'archive'], 'aencoder': 'aac', 'aencoder_args': ['-b:a', '320K'], 'output_resize': 1.5, 'advanced_render_args': {'fps': 60}, 'nproc': 2, 'bufsize': 100, 'danmaku_resort': False}, 'kwargs': {}}
[2023-10-26 15:46:09,609][INFO]: 正在渲染: ./直播回放\[正在录制] xiaomi-20231026-154217-Part001.flv
{'src': 'render', 'msg': './直播回放(带弹幕版)\\[正在录制] xiaomi-20231026-154128-Part001(带弹幕版).mp4', 'type': 'info', 'group': None, 'desc': '', 'msg_type': 'render', 'video': './直播回放\\[正在录制] xiaomi-20231026-154128-Part001.flv', 'danmaku': './直播回放\\[正在录制] xiaomi-20231026-154128-Part001.ass', 'output': './直播回放 (带弹幕版)\\[正在录制] xiaomi-20231026-154128-Part001(带弹幕版).mp4', 'video_info': None, 'config': {'output_dir': None, 'format': 'mp4', 'engine': 'ffmpeg', 'hwaccel_args': ['-hwaccel', 'dxva2'], 'vencoder': 'h264_qsv', 'vencoder_args': ['-profile:v', 'high', '-global_quality:v', 26, '-look_ahead', 0, '-g', 600, '-low_power', False, '-preset', 'slow', '-scenario', 'archive'], 'aencoder': 'aac', 'aencoder_args': ['-b:a', '320K'], 'output_resize': 1.5, 'advanced_render_args': {'fps': 60}, 'nproc': 2, 'bufsize': 100, 'danmaku_resort': False}, 'kwargs': {}}

④我看下面还有一个filter_complex,于是使用filter_complex测试

  advanced_render_args: 
    filter_complex: 'fps=fps=60,subtitles=filename={DANMAKU}'

这样出来的弹幕就正常了。

ddd-zero commented 1 year ago

直播回放.zip 渲染后part1.zip 渲染后part2.zip

SmallPeaches commented 1 year ago

也许是vf参数和filter complex参数的区别?如果单纯指定fps的话用的是单个vf而不是filter complex,也许是这里的区别。

ddd-zero commented 1 year ago

也许是vf参数和filter complex参数的区别?如果单纯指定fps的话用的是单个vf而不是filter complex,也许是这里的区别。

这个我也不太懂。要不把 fps: 60 删了吧。有需求的直接自己写filter_complex