Giter Club home page Giter Club logo

osr2mp4-core's Introduction

Installing

cd osr2mp4/
python install.py
pip install cython
cd ImageProcess/Curves/libcurves/
python setup.py build_ext --inplace

To enable ffmpeg video writer:

cd VideoProcess/FFmpegWriter/
python setup.py build_ext --inplace

Then

Pillow-SIMD

Download Pillow-SIMD here https://www.lfd.uci.edu/~gohlke/pythonlibs/#pillow-simd

Install pillow-simd pip install download-file.whl

ffmpeg

Download ffmpeg here: https://www.ffmpeg.org/download.html#build-windows

Setup config

Setup path for skin, beatmap, replay, default skin and ffmpeg in osr2mp4/config.json

"Start time": 0, "End time": 60 means it will only convert the first minute of the replay. Set "End time" to -1 if you want to convert full replay.

"Process": 2 means the program will use 2 processes to convert so it will be faster than just 1. Use "Process": 0 if you don't want parallel computing.

To render an auto replay, put "auto" in the osr path, and put .osu path in the Beatmap path. To select a custom mods for replays and auto, put your mods in the "Custom mods" in settings.json. Example: "Custom mods": "HDHR".

Run tests

osr2mp4-core$ python -m unittest discover -s tests -p '*test.py'

Getting started with osr2mp4 library

from osr2mp4.osr2mp4 import Osr2mp4

data = {
   "osu! path": "/Users/yuitora./osu!/",
   "Skin path": "/Users/yuitora./osu!/Skins/-#Whitecat#-",
   "Beatmap path": "/Users/yuitora./osu!/Songs/123456 Hachigatsu, Bou/",
   ".osr path": "/Users/yuitora./osu!/Replays/yuitora_12317423.osr",
   "Default skin path": "/Users/yuitora./Downloads/Default Skin/",
   "Output path": "output.avi",
   "Width": 1920,
   "Height": 1080,
   "FPS": 60,
   "Start time": 0,
   "End time": -1,
   "Video codec": "XVID",
   "Process": 2,
   "ffmpeg path": "Users/yuitora./ffmpeg/bin/ffmpeg.exe"
 }

settings = {
   "Cursor size": 1,
   "In-game interface": True,
   "Show scoreboard": True,
   "Background dim": 90,
   "Always show key overlay": True,
   "Automatic cursor size": False,
   "Rotate sliderball": False,
   "Score meter size": 1.25,
   "Song volume": 50,
   "Effect volume": 100,
   "Ignore beatmap hitsounds": True,
   "Use skin's sound samples": True,
   "Global leaderboard": False,
   "Mods leaderboard": "(HD)HR",
   "api key": "lol"
 }

converter = Osr2mp4(data, settings)
converter.startall()
converter.joinall()

Or you can save data and settings in a json file. config.json:

  {
   "osu! path": "/Users/yuitora./osu!/",
   "Skin path": "/Users/yuitora./osu!/Skins/-#Whitecat#-",
   "Beatmap path": "/Users/yuitora./osu!/Songs/123456 Hachigatsu, Bou/",
   ".osr path": "/Users/yuitora./osu!/Replays/yuitora_12317423.osr",
   "Default skin path": "/Users/yuitora./Downloads/Default Skin/",
   "Output path": "output.avi",
   "Width": 1920,
   "Height": 1080,
   "FPS": 60,
   "Start time": 0,
   "End time": -1,
   "Video codec": "XVID",
   "Process": 2,
   "ffmpeg path": "Users/yuitora./ffmpeg/bin/ffmpeg.exe"
 }

settings.json:

 {
   "Cursor size": 1,
   "In-game interface": true,
   "Show scoreboard": true,
   "Background dim": 90,
   "Always show key overlay": true,
   "Automatic cursor size": true,
   "Rotate sliderball": false,
   "Score meter size": 1.25,
   "Song volume": 50,
   "Effect volume": 100,
   "Ignore beatmap hitsounds": true,
   "Use skin's sound samples": true,
   "Global leaderboard": false,
   "Mods leaderboard": "(HD)HR",
   "api key": "lol"
 }

strainsettings.json:

 {
    "x": 205,
    "y": 145,
    "Size": 7.9, // size out of 20
    "AspectRatio": [9,5], // adjusts width/height of the strain graph
    "Rgb": [247,215,159], // area graph color
    "Alpha": 0.85, // opacity of the graph on the video 0.0 - 1.0
    "Smoothing": 5, // cubic smoothing between strain points. Higher = smoother. Should be between 1 and 10
    "ProgressAlpha": 0.75, // opacity to set the chart to show progress over time 0.0 - 1.0
    "GraphDensity": 25 // How many data points in the strain graph.  It is scaled to the beatmap time.  Higher = more granular strains, lower = smoother curves. Should be between 5 and 100.
 }

And to load it in code

from osr2mp4.osr2mp4 import Osr2mp4
converter = Osr2mp4(filedata="config.json", filesettings="settings.json")
converter.startall()
converter.joinall()

Others shits

All available settings are here and explanations of settings here

Osr2mp4.startvideo()

Start video without audio.

Osr2mp4.joinvideo()

Wait for video to finish.

Osr2mp4.startaudio()

Start audio.

Osr2mp4.joinaudio()

Wait for audio to finish.

Osr2mp4.startall()

Start video and audio.

Osr2mp4.joinall()

Wait for all to finish.

Osr2mp4.getprogress()

Return a value from 0 to 100 corresponding to the estimated progress of the conversion.

osr2mp4-core's People

Contributors

christopher-dg avatar dwiandhikaap avatar gamerboy80 avatar hazuki-san avatar kpei avatar my-angel-double-time avatar philenst avatar spaceskynet avatar uyitroa avatar xjunko avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

osr2mp4-core's Issues

Broken pipe

image

Happened after changing Process to 4 from 2

IndexError: list index out of range

so, when i try to make a replay or go into settings, logs return IndexError: list index out of range.
here's the screenshot of a error:
image
i tried running it as a administrator but it didnt help.

Really slow conversion

I tried converting one of my replays and it takes a really long time. I've waited for 30 minutes and the replay hasn't been converted. How do I speed up the conversion?

Video Produced Doesn't Match Replay

For some strange reason, the video that gets produced doesn't match the replay I gave the program.

At the start of the video, you can see that the cursor does some strange thing, teleporting across the screen. It shows me getting a miss and a few 100s. The strange thing is, even the end screen acknowledges I SS'd.

Replay: https://t89.s3-us-west-1.amazonaws.com/2020/12/nXhZXFUh/faulty.osr
Video: https://t89.s3-us-west-1.amazonaws.com/2020/12/xxJPx3jt/faulty.avi
Map: https://osu.ppy.sh/beatmapsets/444335

Wrong hp

In the osu! replay I clearly died, but in the osr2mp4 i have more than 50% hp? is this lazer hp?

Spinner points issue

So the spinner is bugged, the image with 18000 points its the replay file generated by your program, and the other one is the original replay. Also the SPM is wrong too, and the score in the end is also wrong(because of the spinner bug).
Action 09-07-2020 13-58-56 mp4_snapshot_02 40 014
mpc-hc64_CBDIO1UUTy

audio.mp3 file not found

Trying to record this score on this map, and it would appear that the audio file is not copied into the temp directory. Any ideas why that might be? This is the first time I'm running into this, other beatmaps/scores have been fine.

Here's my recording code:

import os

from pathlib import Path
from tempfile import mkstemp

from osr2mp4.osr2mp4 import Osr2mp4


def record(beatmap: Path, replay: Path) -> Path:
    _, output = mkstemp(suffix=".mp4")
    data = {
        "osu! path": "/",
        "Skin path": os.environ["OSU_SKIN_PATH"],
        "Beatmap path": beatmap.as_posix(),
        ".osr path": replay.as_posix(),
        "Default skin path": os.environ["OSU_SKIN_PATH"],
        "Output path": output,
        "Width": 1280,
        "Height": 720,
        "FPS": 60,
        "Start time": 0,
        "End time": -1,
        "Video codec": "XVID",
        "Process": 2,
        "ffmpeg path": "ffmpeg",
    }
    settings = {
        "Show scoreboard": False,
        "Song volume": 100,
        "Effect volume": 100,
        "Use FFmpeg video writer": True,
        "api key": "",
    }
    osr = Osr2mp4(data, settings)
    osr.startall()
    osr.joinall()
    return Path(output)

And here are the logs:

bot_1       | 2020-10-12 17:55:47,667:INFO:osr2mp4.osr2mp4.Osr2mp4:__init__:test
bot_1       | 2020-10-12 17:55:47,697:TRACE:osr2mp4.Utils.Setup:setupglobals:CALL *({'osu! path': '/', 'Skin path': '/root/skin', 'Beatmap path': '/tmp/tmp9n1bqai9', '.osr path': '/tmp/downloads/replay-osu_2082010_3275936453.osr', 'Default skin path': '/root/skin', 'Output path': '/tmp/tmp_ny585qg.mp4', 'Width': 1280, 'Height': 720, 'FPS': 60, 'Start time': 0, 'End time': -1, 'Video codec': 'XVID', 'Process': 2, 'ffmpeg path': 'ffmpeg'}, {'Show scoreboard': False, 'Song volume': 100, 'Effect volume': 100, 'Use FFmpeg video writer': True, 'api key': None, 'Custom mods': ''}, frozenset({<Mod.NoMod: 0>}), <osr2mp4.global_var.Settings object at 0x7f104d2f0850>) **{'ppsettings': {'x': 1320, 'y': 725, 'Size': 25, 'Rgb': [255, 255, 255], 'Alpha': 1, 'Font': 'arial.ttf', 'Background': '/root/osr2mp4/res/pptemplate.png', 'Hitresult x': 50, 'Hitresult y': 150, 'Hitresult Size': 16, 'Hitresult Rgb': [255, 255, 255], 'Hitresult Alpha': 1, 'Hitresult Font': 'arial.ttf', 'Hitresult Background': '/root/osr2mp4/res/hitresulttemplate.png', 'Hitresult Gap': 3}}
bot_1       | 1000
bot_1       | 2020-10-12 17:55:47,701:TRACE:root:read:{'Name': 'CirclePeople', 'Author': '- Zayin -', 'CursorRotate': '0', 'CursorExpand': '1', 'CursorCentre': '1', 'HitCircleOverlayAboveNumer': '1', 'SliderStyle': '2', 'Version': 'latest'}
bot_1       | 2020-10-12 17:55:47,701:TRACE:root:read:{'Combo1': '242,216,223', 'Combo2': '0,255,168', 'Combo3': '231,232,226', 'SliderBorder': '255,110,0', 'SliderTrackOverride': '0,30,70', 'SpinnerApproachCircle': '255,255,255'}
bot_1       | 2020-10-12 17:55:47,701:TRACE:root:read:{'HitCirclePrefix': 'default', 'HitCircleOverlap': '8', 'ScorePrefix': 'score', 'ScoreOverlap': '6'}
bot_1       | 2020-10-12 17:55:47,701:TRACE:osr2mp4.Utils.Setup:setupglobals:RETURN None
bot_1       | 2020-10-12 17:55:47,836:TRACE:root:__init__:Settings vars {'skin_path': '/root/skin', 'default_path': 'root/osr2mp4/res/default/', 'skin_ini': <osr2mp4.Parser.skinparser.Skin object at 0x7f104cba15b0>, 'default_skin_ini': <osr2mp4.Parser.skinparser.Skin object at 0x7f104cba15b0>, 'format': '.png', 'x2': '@2x', 'ffmpeg': 'ffmpeg', 'output': '/tmp/tmp_ny585qg.mp4', 'beatmap': '/tmp/tmp9n1bqai9', 'osu': '/', 'path': 'root/osr2mp4/', 'temp': 'root/osr2mp4/286ae3ae-0cb4-11eb-a23f-0242ac130002temp/', 'width': 1280, 'height': 720, 'fps': 60, 'scale': 0.9375, 'playfieldscale': 1.453857421875, 'playfieldwidth': 744.375, 'playfieldheight': 558.28125, 'movedown': 85, 'moveright': 255, 'timeframe': 1000, 'settings': {'Show scoreboard': False, 'Song volume': 100, 'Effect volume': 100, 'Use FFmpeg video writer': True, 'api key': None, 'Custom mods': '', 'Cursor size': 1, 'In-game interface': True, 'Background dim': 100, 'Rotate sliderball': False, 'Always show key overlay': True, 'Automatic cursor size': False, 'Show mods icon': True, 'Enable PP counter': False, 'Score meter size': 1, 'Show score meter': True, 'Ignore beatmap hitsounds': False, "Use skin's sound samples": False, 'Song delay': 0, 'Global leaderboard': False, 'Mods leaderboard': '*', 'FFmpeg codec': 'libx264', 'FFmpeg custom commands': '-preset ultrafast -crf 23', 'Audio bitrate': 500, 'Slider quality': 2}, 'ppsettings': {'x': 1320, 'y': 725, 'Size': 25, 'Rgb': [255, 255, 255], 'Alpha': 1, 'Font': 'arial.ttf', 'Background': '/root/osr2mp4/res/pptemplate.png', 'Hitresult x': 50, 'Hitresult y': 150, 'Hitresult Size': 16, 'Hitresult Rgb': [255, 255, 255], 'Hitresult Alpha': 1, 'Hitresult Font': 'arial.ttf', 'Hitresult Background': '/root/osr2mp4/res/hitresulttemplate.png', 'Hitresult Gap': 3}, 'codec': 'XVID', 'audiocodec': 'aac', 'process': 2, 'enablelog': True}
bot_1       | 2020-10-12 17:55:47,836:TRACE:osr2mp4.osr2mp4.Osr2mp4:startall:CALL *() **{}
bot_1       | 2020-10-12 17:55:47,836:TRACE:osr2mp4.osr2mp4.Osr2mp4:analyse_replay:CALL *() **{}
bot_1       | 2020-10-12 17:55:47,933:TRACE:root:__init__:Diff {'CircleSize': 4.0, 'OverallDifficulty': 9.3, 'HPDrainRate': 4.4, 'BaseHPDrainRate': 4.4, 'BaseCircleSize': 4.0, 'BaseOverallDifficulty': 9.3, 'ApproachRate': 9.9, 'BaseApproachRate': 9.9, 'SliderMultiplier': 2.0, 'BaseSliderMultiplier': 2.0, 'SliderTickRate': 1.0, 'BaseSliderTickRate': 1.0}
bot_1       | 2020-10-12 17:55:47,963:DEBUG:root:checkmain:Start check
bot_1       | 2020-10-12 17:55:48,539:DEBUG:root:checkmain:check done
bot_1       | 2020-10-12 17:55:48,539:TRACE:root:checkmain:RETURN Info(time=150379, combo=1, combostatus=1, showscore=84088786, score=84088786, accuracy={300: 1629, 100: 17, 50: 0, 0: 2}, clicks=[629, 1029, 1, 0], hitresult=100, timestamp=150324, id=1647, hp=0.9190240000000001, maxcombo=2141, more=Circle(state=<States.FADEOUT: 2>, deltat=55, followstate=False, sliderhead=False, x=236.0, y=189.0))
bot_1       | 2020-10-12 17:55:48,539:TRACE:osr2mp4.osr2mp4.Osr2mp4:analyse_replay:RETURN None
bot_1       | 2020-10-12 17:55:48,539:TRACE:osr2mp4.osr2mp4.Osr2mp4:startvideo:CALL *() **{}
bot_1       | 2020-10-12 17:55:48,539:DEBUG:root:create_frame:entering preparedframes
bot_1       | 2020-10-12 17:55:48,558:DEBUG:root:create_frame:Starting process
bot_1       | 2020-10-12 17:55:48,561:DEBUG:root:create_frame:Start drawer 0
bot_1       | 2020-10-12 17:55:48,562:TRACE:root:draw:CALL (0, 6370), False
bot_1       | 2020-10-12 17:55:48,562:DEBUG:root:draw:process start
bot_1       | 2020-10-12 17:55:48,563:DEBUG:root:create_frame:Start writer 0
bot_1       | 2020-10-12 17:55:48,564:DEBUG:root:write:root/osr2mp4/286ae3ae-0cb4-11eb-a23f-0242ac130002temp/output0.mp4
bot_1       |
bot_1       | 2020-10-12 17:55:48,566:DEBUG:root:create_frame:Starting process
bot_1       | 2020-10-12 17:55:48,566:DEBUG:root:__init__:start preparing cursor
bot_1       | 2020-10-12 17:55:48,568:DEBUG:root:create_frame:Start drawer 1
bot_1       | 2020-10-12 17:55:48,569:TRACE:root:draw:CALL (6370, 12740), True
bot_1       | 2020-10-12 17:55:48,569:DEBUG:root:draw:process start
bot_1       | 2020-10-12 17:55:48,571:DEBUG:root:create_frame:Start writer 1
bot_1       | 2020-10-12 17:55:48,571:TRACE:osr2mp4.osr2mp4.Osr2mp4:startvideo:RETURN None
bot_1       | 2020-10-12 17:55:48,572:TRACE:osr2mp4.osr2mp4.Osr2mp4:startaudio:CALL *() **{}
bot_1       | 2020-10-12 17:55:48,572:DEBUG:root:write:root/osr2mp4/286ae3ae-0cb4-11eb-a23f-0242ac130002temp/output1.mp4
bot_1       |
bot_1       | 2020-10-12 17:55:48,574:DEBUG:root:__init__:start preparing cursor
bot_1       | 2020-10-12 17:55:48,604:DEBUG:root:__init__:start preparing cursormiddle
bot_1       | 2020-10-12 17:55:48,604:DEBUG:root:__init__:start preparing cursormiddle
bot_1       | 2020-10-12 17:55:48,604:DEBUG:root:__init__:start preparing cursortrail
bot_1       | 2020-10-12 17:55:48,604:DEBUG:root:__init__:start preparing cursortrail
bot_1       | 2020-10-12 17:55:48,611:DEBUG:root:__init__:start preparing scorenetry
bot_1       | 2020-10-12 17:55:48,611:DEBUG:root:__init__:start preparing scorenetry
bot_1       | 2020-10-12 17:55:48,671:DEBUG:root:__init__:start preparing scorenumber
bot_1       | 2020-10-12 17:55:48,677:DEBUG:root:__init__:start preparing scorenumber
bot_1       | cur_index 0
bot_1       |
bot_1       |
bot_1       | OFFSET: 3865.0
bot_1       | 0.9375
bot_1       | 2020-10-12 17:55:48,694:DEBUG:root:__init__:start preparing accuracy
bot_1       | 0.9375
bot_1       | 2020-10-12 17:55:48,694:DEBUG:root:__init__:start preparing accuracy
bot_1       | 2020-10-12 17:55:48,697:TRACE:osr2mp4.osr2mp4.Osr2mp4:startaudio:RETURN None
bot_1       | 2020-10-12 17:55:48,698:TRACE:osr2mp4.osr2mp4.Osr2mp4:startall:RETURN None
bot_1       | 2020-10-12 17:55:48,698:TRACE:osr2mp4.osr2mp4.Osr2mp4:joinall:CALL *() **{}
bot_1       | 2020-10-12 17:55:48,698:TRACE:osr2mp4.osr2mp4.Osr2mp4:joinvideo:CALL *() **{}
bot_1       | 2020-10-12 17:55:48,698:DEBUG:root:joinvideo:True
bot_1       | 2020-10-12 17:55:48,698:DEBUG:root:joinvideo:True
bot_1       | Start write
bot_1       | 2020-10-12 17:55:48,847:DEBUG:root:write:start writing: 0.275004
bot_1       | Start write
bot_1       | 2020-10-12 17:55:48,847:DEBUG:root:write:start writing: 0.282898
bot_1       | 2020-10-12 17:55:49,003:DEBUG:root:__init__:start preparing circle
bot_1       | 2020-10-12 17:55:49,017:DEBUG:root:__init__:start preparing circle
bot_1       | 2020-10-12 17:55:49,306:ERROR:root:processaudio:KeyError('42') from audio
bot_1       |
bot_1       |
bot_1       |
bot_1       | Process Process-5:
bot_1       | Traceback (most recent call last):
bot_1       |   File "/usr/local/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap
bot_1       |     self.run()
bot_1       |   File "/usr/local/lib/python3.8/multiprocessing/process.py", line 108, in run
bot_1       |     self._target(*self._args, **self._kwargs)
bot_1       |   File "/root/osr2mp4/AudioProcess/CreateAudio.py", line 166, in processaudio
bot_1       |     audioprc(my_info, beatmap, offset, endtime, mods, settings)
bot_1       |   File "/root/osr2mp4/AudioProcess/CreateAudio.py", line 193, in audioprc
bot_1       |     filenames = getfilenames(beatmap, settings.settings["Ignore beatmap hitsounds"])
bot_1       |   File "/root/osr2mp4/AudioProcess/Utils.py", line 174, in getfilenames
bot_1       |     f = getfilename(beatmap.timing_point[timingpoint_i], soundinfo, sampleset, hitsound, soundset, objtype)
bot_1       |   File "/root/osr2mp4/AudioProcess/Utils.py", line 58, in getfilename
bot_1       |     sample_name = sampleset[samplekey]
bot_1       | KeyError: '42'
bot_1       | done
bot_1       | 2020-10-12 17:55:49,526:DEBUG:root:__init__:start preparing background
bot_1       | done
bot_1       | 2020-10-12 17:55:49,526:DEBUG:root:__init__:start preparing background
bot_1       | 2020-10-12 17:55:49,753:DEBUG:root:__init__:start preparing sections
bot_1       | 2020-10-12 17:55:49,762:DEBUG:root:__init__:start preparing sections
bot_1       | 2020-10-12 17:55:49,773:DEBUG:root:__init__:start preparing scoreboard
bot_1       | 2020-10-12 17:55:49,774:DEBUG:root:__init__:start preparing scoreboard
bot_1       | 2020-10-12 17:55:49,860:DEBUG:root:__init__:start preparing done
bot_1       | 5 8 0.6961069335937501
bot_1       | 2020-10-12 17:55:49,873:ERROR:root:prepare_text:OSError('cannot open resource')
bot_1       | 2020-10-12 17:55:49,881:ERROR:root:prepare_text:OSError('cannot open resource')
bot_1       | cur_index 0
bot_1       | 2020-10-12 17:55:49,889:TRACE:root:draw:PROCESS (0, 6370), <osr2mp4.VideoProcess.Draw.Drawer object at 0x7f104c8963d0>
bot_1       | 2020-10-12 17:55:49,889:DEBUG:root:draw:setup done
bot_1       | Loading default path YImagesss menu-back
bot_1       | 2020-10-12 17:55:50,085:DEBUG:root:__init__:start preparing ur ranking
bot_1       | 2020-10-12 17:55:50,098:DEBUG:root:__init__:start preparing done
bot_1       | 5 8 0.6961069335937501
bot_1       | 2020-10-12 17:55:50,130:ERROR:root:prepare_text:OSError('cannot open resource')
bot_1       | 2020-10-12 17:55:50,137:ERROR:root:prepare_text:OSError('cannot open resource')
bot_1       | cur_index 6250
bot_1       | done
bot_1       | 2020-10-12 17:55:50,156:TRACE:root:draw:PROCESS (6370, 12740), <osr2mp4.VideoProcess.Draw.Drawer object at 0x7f104cfbc340>
bot_1       | 2020-10-12 17:55:50,156:DEBUG:root:draw:setup done
bot_1       | Starting draw
bot_1       | End draw 71.43674492835999
bot_1       | 2020-10-12 17:56:59,999:DEBUG:root:draw:
bot_1       | process done (0, 6370), <osr2mp4.VideoProcess.Draw.Drawer object at 0x7f104c8963d0>
bot_1       | 2020-10-12 17:56:59,999:DEBUG:root:draw:Drawing time: 0
bot_1       | 2020-10-12 17:56:59,999:DEBUG:root:draw:Total time: 71.43704152107239
bot_1       | 2020-10-12 17:56:59,999:DEBUG:root:draw:Waiting time: 8.521287679672241
bot_1       | 2020-10-12 17:56:59,999:DEBUG:root:draw:Changing value time: 0.33205676078796387
bot_1       | --- Logging error ---
bot_1       | Traceback (most recent call last):
bot_1       |   File "/root/osr2mp4/ImageProcess/Objects/Components/Scoreboard.py", line 243, in getlocalscores
bot_1       |     scores = getscores(self.beatmaphash, os.path.join(self.settings.osu, "scores.db"))
bot_1       |   File "/root/osr2mp4/Parser/scoresparser.py", line 373, in getscores
bot_1       |     scoresDb = open(dbpath, "rb")
bot_1       | FileNotFoundError: [Errno 2] No such file or directory: '/scores.db'
bot_1       |
bot_1       | During handling of the above exception, another exception occurred:
bot_1       |
bot_1       | Traceback (most recent call last):
bot_1       |   File "/usr/local/lib/python3.8/logging/__init__.py", line 1081, in emit
bot_1       |     msg = self.format(record)
bot_1       |   File "/usr/local/lib/python3.8/logging/__init__.py", line 925, in format
bot_1       |     return fmt.format(record)
bot_1       |   File "/usr/local/lib/python3.8/logging/__init__.py", line 664, in format
bot_1       |     record.message = record.getMessage()
bot_1       |   File "/usr/local/lib/python3.8/logging/__init__.py", line 369, in getMessage
bot_1       |     msg = msg % self.args
bot_1       | TypeError: not all arguments converted during string formatting
bot_1       | Call stack:
bot_1       |   File "/usr/local/lib/python3.8/runpy.py", line 194, in _run_module_as_main
bot_1       |     return _run_code(code, main_globals, None,
bot_1       |   File "/usr/local/lib/python3.8/runpy.py", line 87, in _run_code
bot_1       |     exec(code, run_globals)
bot_1       |   File "/root/bot/__main__.py", line 12, in <module>
bot_1       |     video = record(beatmap_path, replay_path)
bot_1       |   File "/root/bot/recorder.py", line 35, in record
bot_1       |     osr.startall()
bot_1       |   File "/usr/local/lib/python3.8/site-packages/autologging.py", line 1039, in autologging_traced_instancemethod_delegator
bot_1       |     return proxy(method, args, keywords)
bot_1       |   File "/usr/local/lib/python3.8/site-packages/autologging.py", line 1196, in __call__
bot_1       |     value = function(*args, **keywords)
bot_1       |   File "/root/osr2mp4/osr2mp4.py", line 208, in startall
bot_1       |     self.startvideo()
bot_1       |   File "/usr/local/lib/python3.8/site-packages/autologging.py", line 1039, in autologging_traced_instancemethod_delegator
bot_1       |     return proxy(method, args, keywords)
bot_1       |   File "/usr/local/lib/python3.8/site-packages/autologging.py", line 1196, in __call__
bot_1       |     value = function(*args, **keywords)
bot_1       |   File "/root/osr2mp4/osr2mp4.py", line 177, in startvideo
bot_1       |     self.drawers, self.writers, self.pipes, self.sharedarray = create_frame(self.settings, self.beatmap,
bot_1       |   File "/root/osr2mp4/VideoProcess/CreateFrames.py", line 62, in create_frame
bot_1       |     drawer.start()
bot_1       |   File "/usr/local/lib/python3.8/multiprocessing/process.py", line 121, in start
bot_1       |     self._popen = self._Popen(self)
bot_1       |   File "/usr/local/lib/python3.8/multiprocessing/context.py", line 224, in _Popen
bot_1       |     return _default_context.get_context().Process._Popen(process_obj)
bot_1       |   File "/usr/local/lib/python3.8/multiprocessing/context.py", line 277, in _Popen
bot_1       |     return Popen(process_obj)
bot_1       |   File "/usr/local/lib/python3.8/multiprocessing/popen_fork.py", line 19, in __init__
bot_1       |     self._launch(process_obj)
bot_1       |   File "/usr/local/lib/python3.8/multiprocessing/popen_fork.py", line 75, in _launch
bot_1       |     code = process_obj._bootstrap(parent_sentinel=child_r)
bot_1       |   File "/usr/local/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap
bot_1       |     self.run()
bot_1       |   File "/usr/local/lib/python3.8/multiprocessing/process.py", line 108, in run
bot_1       |     self._target(*self._args, **self._kwargs)
bot_1       |   File "/root/osr2mp4/VideoProcess/Draw.py", line 182, in draw_frame
bot_1       |     draw(shared, conn, beatmap, replay_info, resultinfo, videotime, settings, showranking)
bot_1       |   File "/root/osr2mp4/VideoProcess/Draw.py", line 207, in draw
bot_1       |     drawer = Drawer(shared, beatmap, frames, replay_info, resultinfo, videotime, settings)
bot_1       |   File "/root/osr2mp4/VideoProcess/Draw.py", line 47, in __init__
bot_1       |     self.setup_draw()
bot_1       |   File "/root/osr2mp4/VideoProcess/Draw.py", line 61, in setup_draw
bot_1       |     self.component = FrameObjects(self.frames, self.settings, self.beatmap.diff, light_replay_info, self.beatmap.meta, self.beatmap.hash, map_time)
bot_1       |   File "/root/osr2mp4/VideoProcess/AFrames.py", line 215, in __init__
bot_1       |     self.scoreboard = Scoreboard(frames.scoreboard, frames.scoreboardscore, frames.scoreboardeffect, replay_info, meta, maphash, settings)
bot_1       |   File "/root/osr2mp4/ImageProcess/Objects/Components/Scoreboard.py", line 120, in __init__
bot_1       |     self.getscores()
bot_1       |   File "/root/osr2mp4/ImageProcess/Objects/Components/Scoreboard.py", line 194, in getscores
bot_1       |     self.getlocalscores(mod)
bot_1       |   File "/root/osr2mp4/ImageProcess/Objects/Components/Scoreboard.py", line 245, in getlocalscores
bot_1       |     logging.error("from scoreboard", repr(e))
bot_1       | Message: 'from scoreboard'
bot_1       | Arguments: ("FileNotFoundError(2, 'No such file or directory')",)
bot_1       | 2020-10-12 17:57:00,008:DEBUG:root:joinvideo:Joined drawers 0
bot_1       | Release write
bot_1       | End write
bot_1       | 2020-10-12 17:57:00,023:DEBUG:root:write:
bot_1       | Writing done root/osr2mp4/286ae3ae-0cb4-11eb-a23f-0242ac130002temp/output0.mp4
bot_1       | 2020-10-12 17:57:00,023:DEBUG:root:write:Writing time: 12.312196969985962
bot_1       | 2020-10-12 17:57:00,024:DEBUG:root:write:Total time: 71.45969772338867
bot_1       | 2020-10-12 17:57:00,024:DEBUG:root:write:Waiting time: 54.33728504180908
bot_1       | 2020-10-12 17:57:00,024:DEBUG:root:write:Changing value time: 4.47427225112915
bot_1       | 2020-10-12 17:57:00,030:DEBUG:root:joinvideo:Joined writers 0
bot_1       | 2020-10-12 17:57:00,031:DEBUG:root:joinvideo:Closed conn 0
bot_1       | 2020-10-12 17:57:00,031:DEBUG:root:joinvideo:True
bot_1       | 2020-10-12 17:57:00,031:DEBUG:root:joinvideo:True
bot_1       | Starting draw
bot_1       | End draw 78.02247762680054
bot_1       | 2020-10-12 17:57:06,592:DEBUG:root:draw:
bot_1       | process done (6370, 12740), <osr2mp4.VideoProcess.Draw.Drawer object at 0x7f104cfbc340>
bot_1       | 2020-10-12 17:57:06,592:DEBUG:root:draw:Drawing time: 0
bot_1       | 2020-10-12 17:57:06,592:DEBUG:root:draw:Total time: 78.02273297309875
bot_1       | 2020-10-12 17:57:06,592:DEBUG:root:draw:Waiting time: 8.14038896560669
bot_1       | 2020-10-12 17:57:06,592:DEBUG:root:draw:Changing value time: 0.3120119571685791
bot_1       | --- Logging error ---
bot_1       | Traceback (most recent call last):
bot_1       |   File "/root/osr2mp4/ImageProcess/Objects/Components/Scoreboard.py", line 243, in getlocalscores
bot_1       |     scores = getscores(self.beatmaphash, os.path.join(self.settings.osu, "scores.db"))
bot_1       |   File "/root/osr2mp4/Parser/scoresparser.py", line 373, in getscores
bot_1       |     scoresDb = open(dbpath, "rb")
bot_1       | FileNotFoundError: [Errno 2] No such file or directory: '/scores.db'
bot_1       |
bot_1       | During handling of the above exception, another exception occurred:
bot_1       |
bot_1       | Traceback (most recent call last):
bot_1       |   File "/usr/local/lib/python3.8/logging/__init__.py", line 1081, in emit
bot_1       |     msg = self.format(record)
bot_1       |   File "/usr/local/lib/python3.8/logging/__init__.py", line 925, in format
bot_1       |     return fmt.format(record)
bot_1       |   File "/usr/local/lib/python3.8/logging/__init__.py", line 664, in format
bot_1       |     record.message = record.getMessage()
bot_1       |   File "/usr/local/lib/python3.8/logging/__init__.py", line 369, in getMessage
bot_1       |     msg = msg % self.args
bot_1       | TypeError: not all arguments converted during string formatting
bot_1       | Call stack:
bot_1       |   File "/usr/local/lib/python3.8/runpy.py", line 194, in _run_module_as_main
bot_1       |     return _run_code(code, main_globals, None,
bot_1       |   File "/usr/local/lib/python3.8/runpy.py", line 87, in _run_code
bot_1       |     exec(code, run_globals)
bot_1       |   File "/root/bot/__main__.py", line 12, in <module>
bot_1       |     video = record(beatmap_path, replay_path)
bot_1       |   File "/root/bot/recorder.py", line 35, in record
bot_1       |     osr.startall()
bot_1       |   File "/usr/local/lib/python3.8/site-packages/autologging.py", line 1039, in autologging_traced_instancemethod_delegator
bot_1       |     return proxy(method, args, keywords)
bot_1       |   File "/usr/local/lib/python3.8/site-packages/autologging.py", line 1196, in __call__
bot_1       |     value = function(*args, **keywords)
bot_1       |   File "/root/osr2mp4/osr2mp4.py", line 208, in startall
bot_1       |     self.startvideo()
bot_1       |   File "/usr/local/lib/python3.8/site-packages/autologging.py", line 1039, in autologging_traced_instancemethod_delegator
bot_1       |     return proxy(method, args, keywords)
bot_1       |   File "/usr/local/lib/python3.8/site-packages/autologging.py", line 1196, in __call__
bot_1       |     value = function(*args, **keywords)
bot_1       |   File "/root/osr2mp4/osr2mp4.py", line 177, in startvideo
bot_1       |     self.drawers, self.writers, self.pipes, self.sharedarray = create_frame(self.settings, self.beatmap,
bot_1       |   File "/root/osr2mp4/VideoProcess/CreateFrames.py", line 62, in create_frame
bot_1       |     drawer.start()
bot_1       |   File "/usr/local/lib/python3.8/multiprocessing/process.py", line 121, in start
bot_1       |     self._popen = self._Popen(self)
bot_1       |   File "/usr/local/lib/python3.8/multiprocessing/context.py", line 224, in _Popen
bot_1       |     return _default_context.get_context().Process._Popen(process_obj)
bot_1       |   File "/usr/local/lib/python3.8/multiprocessing/context.py", line 277, in _Popen
bot_1       |     return Popen(process_obj)
bot_1       |   File "/usr/local/lib/python3.8/multiprocessing/popen_fork.py", line 19, in __init__
bot_1       |     self._launch(process_obj)
bot_1       |   File "/usr/local/lib/python3.8/multiprocessing/popen_fork.py", line 75, in _launch
bot_1       |     code = process_obj._bootstrap(parent_sentinel=child_r)
bot_1       |   File "/usr/local/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap
bot_1       |     self.run()
bot_1       |   File "/usr/local/lib/python3.8/multiprocessing/process.py", line 108, in run
bot_1       |     self._target(*self._args, **self._kwargs)
bot_1       |   File "/root/osr2mp4/VideoProcess/Draw.py", line 182, in draw_frame
bot_1       |     draw(shared, conn, beatmap, replay_info, resultinfo, videotime, settings, showranking)
bot_1       |   File "/root/osr2mp4/VideoProcess/Draw.py", line 207, in draw
bot_1       |     drawer = Drawer(shared, beatmap, frames, replay_info, resultinfo, videotime, settings)
bot_1       |   File "/root/osr2mp4/VideoProcess/Draw.py", line 47, in __init__
bot_1       |     self.setup_draw()
bot_1       |   File "/root/osr2mp4/VideoProcess/Draw.py", line 61, in setup_draw
bot_1       |     self.component = FrameObjects(self.frames, self.settings, self.beatmap.diff, light_replay_info, self.beatmap.meta, self.beatmap.hash, map_time)
bot_1       |   File "/root/osr2mp4/VideoProcess/AFrames.py", line 215, in __init__
bot_1       |     self.scoreboard = Scoreboard(frames.scoreboard, frames.scoreboardscore, frames.scoreboardeffect, replay_info, meta, maphash, settings)
bot_1       |   File "/root/osr2mp4/ImageProcess/Objects/Components/Scoreboard.py", line 120, in __init__
bot_1       |     self.getscores()
bot_1       |   File "/root/osr2mp4/ImageProcess/Objects/Components/Scoreboard.py", line 194, in getscores
bot_1       |     self.getlocalscores(mod)
bot_1       |   File "/root/osr2mp4/ImageProcess/Objects/Components/Scoreboard.py", line 245, in getlocalscores
bot_1       |     logging.error("from scoreboard", repr(e))
bot_1       | Message: 'from scoreboard'
bot_1       | Arguments: ("FileNotFoundError(2, 'No such file or directory')",)
bot_1       | 2020-10-12 17:57:06,600:DEBUG:root:joinvideo:Joined drawers 1
bot_1       | Release write
bot_1       | End write
bot_1       | 2020-10-12 17:57:06,604:DEBUG:root:write:
bot_1       | Writing done root/osr2mp4/286ae3ae-0cb4-11eb-a23f-0242ac130002temp/output1.mp4
bot_1       | 2020-10-12 17:57:06,604:DEBUG:root:write:Writing time: 12.81538438796997
bot_1       | 2020-10-12 17:57:06,604:DEBUG:root:write:Total time: 78.03226280212402
bot_1       | 2020-10-12 17:57:06,604:DEBUG:root:write:Waiting time: 60.06943345069885
bot_1       | 2020-10-12 17:57:06,604:DEBUG:root:write:Changing value time: 4.2786948680877686
bot_1       | 2020-10-12 17:57:06,607:DEBUG:root:joinvideo:Joined writers 1
bot_1       | 2020-10-12 17:57:06,607:DEBUG:root:joinvideo:Closed conn 1
bot_1       | 2020-10-12 17:57:06,608:TRACE:osr2mp4.osr2mp4.Osr2mp4:joinvideo:RETURN None
bot_1       | 2020-10-12 17:57:06,608:TRACE:osr2mp4.osr2mp4.Osr2mp4:joinaudio:CALL *() **{}
bot_1       | 2020-10-12 17:57:06,608:TRACE:osr2mp4.osr2mp4.Osr2mp4:joinaudio:RETURN None
bot_1       | ffmpeg version 4.1.6-1~deb10u1 Copyright (c) 2000-2020 the FFmpeg developers
bot_1       |   built with gcc 8 (Debian 8.3.0-6)
bot_1       |   configuration: --prefix=/usr --extra-version='1~deb10u1' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
bot_1       |   libavutil      56. 22.100 / 56. 22.100
bot_1       |   libavcodec     58. 35.100 / 58. 35.100
bot_1       |   libavformat    58. 20.100 / 58. 20.100
bot_1       |   libavdevice    58.  5.100 / 58.  5.100
bot_1       |   libavfilter     7. 40.101 /  7. 40.101
bot_1       |   libavresample   4.  0.  0 /  4.  0.  0
bot_1       |   libswscale      5.  3.100 /  5.  3.100
bot_1       |   libswresample   3.  3.100 /  3.  3.100
bot_1       |   libpostproc    55.  3.100 / 55.  3.100
bot_1       | [mov,mp4,m4a,3gp,3g2,mj2 @ 0x55bf626f1600] Auto-inserting h264_mp4toannexb bitstream filter
bot_1       | Input #0, concat, from '/root/osr2mp4/286ae3ae-0cb4-11eb-a23f-0242ac130002temp/listvideo.txt':
bot_1       |   Duration: N/A, start: 0.000000, bitrate: 7982 kb/s
bot_1       |     Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1280x720, 7982 kb/s, 60 fps, 60 tbr, 15360 tbn, 120 tbc
bot_1       |     Metadata:
bot_1       |       handler_name    : VideoHandler
bot_1       | Output #0, mp4, to 'root/osr2mp4/286ae3ae-0cb4-11eb-a23f-0242ac130002temp/outputf.mp4':
bot_1       |   Metadata:
bot_1       |     encoder         : Lavf58.20.100
bot_1       |     Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1280x720, q=2-31, 7982 kb/s, 60 fps, 60 tbr, 15360 tbn, 15360 tbc
bot_1       |     Metadata:
bot_1       |       handler_name    : VideoHandler
bot_1       | Stream mapping:
bot_1       |   Stream #0:0 -> #0:0 (copy)
bot_1       | Press [q] to stop, [?] for help
bot_1       | [mov,mp4,m4a,3gp,3g2,mj2 @ 0x55bf627878c0] Auto-inserting h264_mp4toannexb bitstream filter
bot_1       | frame= 9156 fps=0.0 q=-1.0 Lsize=  149529kB time=00:02:32.58 bitrate=8028.0kbits/s speed= 737x
bot_1       | video:149491kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.025910%
bot_1       | ffmpeg version 4.1.6-1~deb10u1 Copyright (c) 2000-2020 the FFmpeg developers
bot_1       |   built with gcc 8 (Debian 8.3.0-6)
bot_1       |   configuration: --prefix=/usr --extra-version='1~deb10u1' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
bot_1       |   libavutil      56. 22.100 / 56. 22.100
bot_1       |   libavcodec     58. 35.100 / 58. 35.100
bot_1       |   libavformat    58. 20.100 / 58. 20.100
bot_1       |   libavdevice    58.  5.100 / 58.  5.100
bot_1       |   libavfilter     7. 40.101 /  7. 40.101
bot_1       |   libavresample   4.  0.  0 /  4.  0.  0
bot_1       |   libswscale      5.  3.100 /  5.  3.100
bot_1       |   libswresample   3.  3.100 /  3.  3.100
bot_1       |   libpostproc    55.  3.100 / 55.  3.100
bot_1       | Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'root/osr2mp4/286ae3ae-0cb4-11eb-a23f-0242ac130002temp/outputf.mp4':
bot_1       |   Metadata:
bot_1       |     major_brand     : isom
bot_1       |     minor_version   : 512
bot_1       |     compatible_brands: isomiso2avc1mp41
bot_1       |     encoder         : Lavf58.20.100
bot_1       |   Duration: 00:02:32.60, start: 0.000000, bitrate: 8027 kb/s
bot_1       |     Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1280x720, 8025 kb/s, 60 fps, 60 tbr, 15360 tbn, 120 tbc (default)
bot_1       |     Metadata:
bot_1       |       handler_name    : VideoHandler
bot_1       | root/osr2mp4/286ae3ae-0cb4-11eb-a23f-0242ac130002temp/audio.mp3: No such file or directory

NoVideo mod is not supported (Touchscreen?)

Steps to reproduce:
Pick any replay with Touchscreen mod

What happens:
Traceback (most recent call last): File "main.py", line 24, in <module> main() File "main.py", line 15, in main osr2mp4.startall() File "C:\Users\Hazuki-san\AppData\Local\Programs\Python\Python36\lib\site-packages\autologging.py", line 1039, in autologging_traced_instancemethod_delegator return proxy(method, args, keywords) File "C:\Users\Hazuki-san\AppData\Local\Programs\Python\Python36\lib\site-packages\autologging.py", line 1196, in __call__ value = function(*args, **keywords) File "E:\GitHub\osr2mp4-core\osr2mp4\osr2mp4.py", line 153, in startall self.analyse_replay() File "C:\Users\Hazuki-san\AppData\Local\Programs\Python\Python36\lib\site-packages\autologging.py", line 1039, in autologging_traced_instancemethod_delegator return proxy(method, args, keywords) File "C:\Users\Hazuki-san\AppData\Local\Programs\Python\Python36\lib\site-packages\autologging.py", line 1196, in __call__ value = function(*args, **keywords) File "E:\GitHub\osr2mp4-core\osr2mp4\osr2mp4.py", line 144, in analyse_replay self.resultinfo = checkmain(self.beatmap, self.replay_info, self.settings) File "E:\GitHub\osr2mp4-core\osr2mp4\CheckSystem\checkmain.py", line 107, in checkmain hitobjectchecker = HitObjectChecker(beatmap, settings, replay_info.mod_combination, tests) File "E:\GitHub\osr2mp4-core\osr2mp4\CheckSystem\HitObjectChecker.py", line 71, in __init__ self.mod_multiplier = getmultiplier(mods) File "E:\GitHub\osr2mp4-core\osr2mp4\CheckSystem\HitObjectChecker.py", line 40, in getmultiplier result *= multiplier[m] KeyError: <Mod.NoVideo: 4>

Did this work on a previous version?
No

Additional information:

Stop changing global logging settings

When I set up a Osr2mp4 instance with default kwargs, it changes a bunch of logging settings and seemingly turns the global logging level to DEBUG. Could we make this module use its own logger?

does not install

uhh cython isnt working right

Error compiling Cython file:

    cdef int mid = 0
    cdef int left = 0
    cdef int right = len(v)

    while left < right:
            mid = left + (right - left)/2
         ^

ccurves.pyx:31:13: Cannot assign type 'double' to 'int'

FL

The replay shows the FL mod icon but doesn't show the gameplay in FL itself lol

Cannot enable FFmpeg Writer

After going through all the stuff in the master repo, I cannot enable FFMPEG writer as python setup build_ext --inplace cannot find the file.

problems that I have

only things that I saw with this program being wrong is:
scorebar (if you have it to change the lower your HP gets) and the amount of hp left
the spacing between numbers on the ending screen (accuracy,score, 100 count and so on)

amazing program regardless

Failed replay fails to render

Every time I try to render a failed replay it goes to 99% then gives me this error

Process Process-3:
Traceback (most recent call last):
  File "C:\Users\alchzh\osr2mp4\libs\pythonlib\lib\multiprocessing\process.py", line 297, in _bootstrap
    self.run()
  File "C:\Users\alchzh\osr2mp4\libs\pythonlib\lib\multiprocessing\process.py", line 99, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\alchzh\osr2mp4\libs\pythonlib\lib\site-packages\osr2mp4\VideoProcess\Draw.py", line 190, in draw_frame
    draw(shared, conn, beatmap, replay_info, resultinfo, videotime, settings, showranking)
  File "C:\Users\alchzh\osr2mp4\libs\pythonlib\lib\site-packages\osr2mp4\VideoProcess\Draw.py", line 218, in draw
    status = drawer.render_draw()
  File "C:\Users\alchzh\osr2mp4\libs\pythonlib\lib\site-packages\osr2mp4\VideoProcess\Draw.py", line 88, in render_draw
    in_break = check_break(self.beatmap, self.component, self.frame_info, self.updater, self.settings)
  File "C:\Users\alchzh\osr2mp4\libs\pythonlib\lib\site-packages\osr2mp4\VideoProcess\calc.py", line 122, in check_break
    component.sections.startbreak(1, breakperiod["Start"], updater.resultinfo[updater.info_index].hp)
IndexError: list index out of range

Relax plays do not export properly

Steps to reproduce:
Choose a replay with the relax mod in the config file.
The bug will occur with any relax play.

What happens:
The video shows a 0% accuracy full miss replay, as if no keys had been pressed during the playthrough.

Did this work on a previous version?
No

Additional information:
When the replay is opened in game, the 300s/100s/50s/misses are displayed but they show up as zeroes in the console osr2mp4 is launched in.

Problem when trying to convert a replay

When I start the process of converting a replay it just gives out this error:

TypeError("object of type 'NoneType' has no len()")object of type 'NoneType' has no len() Traceback (most recent call last):
File "libs/pythonlib/lib/site-packages/osr2mp4app/run_osu.py", line 92, in
run()
File "libs/pythonlib/lib/site-packages/osr2mp4app/run_osu.py", line 50, in run
converter = Osr2mp4(filedata=config, filesettings=settings, filepp=ppsettings, logtofile=True, logpath=logpath)
File "C:\Users\Darius\Desktop\osr2mp4\libs\pythonlib\lib\site-packages\autologging.py", line 1041, in autologging_traced_instancemethod_delegator
return method(*args, **keywords)
File "C:\Users\Darius\Desktop\osr2mp4\libs\pythonlib\lib\site-packages\osr2mp4\osr2mp4.py", line 141, in init
self.replay_event, self.cur_time = setup_replay(replaypath, self.beatmap, reverse=reverse_replay)
File "C:\Users\Darius\Desktop\osr2mp4\libs\pythonlib\lib\site-packages\osr2mp4\Parser\osrparser.py", line 40, in setup_replay
for index in range(len(replay_info.play_data)):
TypeError: object of type 'NoneType' has no len()

I'm clueless and really wanna use the converter.

TypeError Help

image
Hello, I have an issue where the error message says:
"TypeError("VideoWriter_fourcc()
missing required argument 'c4' (pos4)"

How do you fix this?

It fails to convert every time

Whenever i try to convert something it fails and says this.

CalledProcessError(1, ['ffmpeg', '-i', 'D:/osu!/Songs/147962 UPLIFT SPICE - Omega Rhythm\UPLIFT SPICE-01 - .mp3', '-ar', '44100', 'libs\pythonlib\lib\site-packages\osr2mp4/1c5b419a-5fc1-11eb-92af-208984e37d70temp/converted.wav', '-y'])

license?

license file or section in readme.md should be added. open source repository without license cannot be looked at.

Cannot convert Harumachi Clover replays

when i tried to convert my harumachi clover play it didnt convert, instead displaying "HarumachiCloverBan". this is a serious issue that needs attention.
image

Weird problem when converting

Not sure if I've done something wrong, but I whenever I try to convert a video in 1080p 240 FPS, the video acts stangely. The hitsounds are higher pitched for the beginning, and after a few slight lagspikes it looks like the video is put in half speed, while the audio still stays the original speed. So the video and audio don't match at all, there are some weird artifacts in the video, and the sound is higher pitched/distorted

Spinners incorrectly increment combo color

In the osu! client, spinners don't move the combo color forward even though they're treated as their own combos. In osr2mp4 every time there's a spinner the combo color gets shifted incorrectly forward by one. This is pretty bad if there are color hax.

ComboOffset bits also shouldn't do anything if on a spinner, and the notes after the spinner should always be a new combo (the editor will correct these errors on save ppy/osu-stable-issues#733 )

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.