diff --git a/render.py b/render.py index 1452501..f783d8e 100644 --- a/render.py +++ b/render.py @@ -153,7 +153,7 @@ def compose(clips, fragment, target=150, base=1024, voice_over=None, options=Non } }) - volume_front = '-15' + volume_front = '-13' if clip.get('volume') is not None: volume_front = '%0.2f' % (float(volume_front) + clip['volume']) @@ -263,9 +263,9 @@ def compose(clips, fragment, target=150, base=1024, voice_over=None, options=Non print('%07.3f-%07.3f %07.3f' % (sub_offset, sub_offset+vo["duration"], vo["duration"]), vo["src"].split('/')[-1]) voice_overs.append(vo) voc = vo.copy() - a, b = '5', '-1' + a, b = '6', '-1' if options.get('stereo_downmix'): - a, b = '5', '-1' + a, b = '6', '-1' voc['filter'] = {'volume': a} scene['audio-center']['A1'].append(voc) vo_low = vo.copy() @@ -535,9 +535,17 @@ def render_all(options): timelines = render(prefix, scene, fragment_prefix[len(prefix) + 1:] + '/', options) scene_json = json.dumps(scene, indent=2, ensure_ascii=False) - write_if_new(os.path.join(fragment_prefix, 'scene.json'), scene_json) + scene_json_path = os.path.join(fragment_prefix, 'scene.json') + segment_path = os.path.join(fragment_prefix, 'segment.mp4') + is_new = write_if_new(scene_json_path, scene_json) + if not is_new: + if not os.path.exists(segment_path) or os.lstat(scene_json_path).st_mtime > os.lstat(segment_path).st_mtime: + is_new = True + print("%s needs update" % segment_path) + if not is_new: + print("%s did not change" % scene_json_path) - if not options['no_video'] and not options["single_file"]: + if is_new and not options['no_video'] and not options["single_file"]: for timeline in timelines: print(timeline) ext = '.mp4' @@ -662,7 +670,7 @@ def render_all(options): if os.path.exists(fn): os.unlink(fn) - if options["single_file"]: + if is_new and options["single_file"]: cmds = [] base_prefix = Path(base_prefix) for timeline in ( @@ -828,6 +836,11 @@ def scene_subtitles(scene, options): return subs +DEFAULTS = { + "max-items": 10, + "no_video": False +} + def load_defaults(options): path = os.path.join(options["prefix"], "options.json") if os.path.exists(path): @@ -836,8 +849,19 @@ def load_defaults(options): for key in defaults: if key not in options: options[key] = defaults[key] + for key in DEFAULTS: + if key not in options: + options[key] = DEFAULTS[key] return options +def reload_options(options): + path = os.path.join(options["prefix"], "options.json") + if os.path.exists(path): + with open(path) as fd: + defaults = json.load(fd) + for key in defaults: + options[key] = defaults[key] + return options def update_subtitles(options): import item.models @@ -890,8 +914,6 @@ def render_infinity(options): defaults = { "offset": 100, - "max-items": 30, - "no_video": False, } state_f = os.path.join(prefix, "infinity.json") if os.path.exists(state_f): @@ -899,7 +921,16 @@ def render_infinity(options): state = json.load(fd) else: state = {} - for key in ("prefix", "duration", "debug", "single_file", "keep_audio", "stereo_downmix"): + + option_keys = ( + "prefix", + "duration", + "debug", + "single_file", + "keep_audio", + "stereo_downmix" + ) + for key in options_keys: state[key] = options[key] for key in defaults: @@ -912,9 +943,9 @@ def render_infinity(options): f for f in os.listdir(render_prefix) if f.isdigit() and os.path.isdir(render_prefix + f) and state["offset"] > int(f) >= 100 ] - if len(current) > state["max-items"]: + if len(current) > options["max-items"]: current = ox.sorted_strings(current) - remove = current[:-state["max-items"]] + remove = current[:-options["max-items"]] update_m3u(render_prefix, exclude=remove) for folder in remove: folder = render_prefix + folder @@ -926,6 +957,9 @@ def render_infinity(options): with open(state_f + "~", "w") as fd: json.dump(state, fd, indent=2) shutil.move(state_f + "~", state_f) + options = reload_options(options) + for key in options_keys: + state[key] = options[key] def join_subtitles(base_prefix, options): diff --git a/render_sound.py b/render_sound.py index 88e8340..4427b47 100644 --- a/render_sound.py +++ b/render_sound.py @@ -34,7 +34,7 @@ def render_music(): "src": src, "duration": clip.sort.duration, "filter": { - 'volume': '0', + 'volume': '2', }, }) @@ -112,7 +112,7 @@ def render_forest(): "src": src, "duration": clip.sort.duration, "filter": { - 'volume': '2', + 'volume': '1', }, }) diff --git a/utils.py b/utils.py index 1cdd826..bd1cb21 100644 --- a/utils.py +++ b/utils.py @@ -56,6 +56,7 @@ def write_if_new(path, data, mode=''): if is_new: with open(path, write_mode) as fd: fd.write(data) + return is_new def format_duration(duration, fps, audio=False): if audio: