This commit is contained in:
j 2026-02-02 15:33:55 +01:00
commit cca2de20fe
3 changed files with 48 additions and 13 deletions

View file

@ -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):

View file

@ -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',
},
})

View file

@ -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: