This commit is contained in:
j 2023-11-03 22:15:20 +01:00
parent c786f22ed3
commit 7368316f8d
2 changed files with 47 additions and 15 deletions

View file

@ -56,13 +56,23 @@ def compose(clips, target=150, base=1024, voice_over=None):
'back': { 'back': {
'V1': [], 'V1': [],
'V2': [], 'V2': [],
'A1': [],
}, },
'audio': { 'audio-center': {
'A1': [],
},
'audio-front': {
'A1': [], 'A1': [],
'A2': [], 'A2': [],
'A3': [], 'A3': [],
'A4': [], 'A4': [],
} },
'audio-rear': {
'A1': [],
'A2': [],
'A3': [],
'A4': [],
},
} }
all_clips = clips.copy() all_clips = clips.copy()
seq = random(base) seq = random(base)
@ -85,13 +95,20 @@ def compose(clips, target=150, base=1024, voice_over=None):
target = vo_min target = vo_min
elif vo_min < target: elif vo_min < target:
offset = (target - vo_min) / 2 offset = (target - vo_min) / 2
scene['audio']['A3'].append({ scene['audio-center']['A1'].append({
'blank': True,
'duration': offset
})
scene['audio-rear']['A1'].append({
'blank': True, 'blank': True,
'duration': offset 'duration': offset
}) })
vo_min += offset vo_min += offset
for vo in voice_overs: for vo in voice_overs:
scene['audio']['A3'].append(vo) scene['audio-center']['A1'].append(vo)
vo_low = vo.copy()
vo_low['filter'] = {'volume': '-6'}
scene['audio-rear']['A1'].append(vo_low)
clip = None clip = None
while target - length > 0 and clips: while target - length > 0 and clips:
@ -202,12 +219,16 @@ def compose(clips, target=150, base=1024, voice_over=None):
blur = seq() * 3 blur = seq() * 3
if blur: if blur:
scene['back']['V1'][-1]['filter']['blur'] = blur scene['back']['V1'][-1]['filter']['blur'] = blur
scene['audio']['A1'].append({ scene['back']['A1'].append({
'duration': clip['duration'], 'duration': clip['duration'],
'src': clip['original'], 'src': clip['original'],
}) })
# TBD: Foley # TBD: Foley
scene['audio']['A2'].append({ scene['audio-front']['A2'].append({
'duration': clip['duration'],
'src': foley,
})
scene['audio-rear']['A2'].append({
'duration': clip['duration'], 'duration': clip['duration'],
'src': foley, 'src': foley,
}) })
@ -346,7 +367,9 @@ def render_all(options):
if ext == '.wav': if ext == '.wav':
cmd += ['vn=1'] cmd += ['vn=1']
else: else:
cmd += ['an=1', 'vcodec=libx264', 'x264opts=keyint=1', 'crf=15'] if not timeline.endswith("back.kdenlive"):
cmd += ['an=1']
cmd += ['vcodec=libx264', 'x264opts=keyint=1', 'crf=15']
subprocess.call(cmd) subprocess.call(cmd)
if ext == '.wav' and timeline.endswith('audio.kdenlive'): if ext == '.wav' and timeline.endswith('audio.kdenlive'):
cmd = [ cmd = [
@ -362,9 +385,9 @@ def render_all(options):
fragment_prefix = Path(fragment_prefix) fragment_prefix = Path(fragment_prefix)
cmds = [] cmds = []
for src, out1, out2 in ( for src, out1, out2 in (
("audio-A1.wav", "fl.wav", "fr.wav"), ("audio-front.wav", "fl.wav", "fr.wav"),
("audio-A2.wav", "fc.wav", "lfe.wav"), ("audio-center.wav", "fc.wav", "lfe.wav"),
("audio-A3.wav", "bl.wav", "br.wav"), ("audio-rear.wav", "bl.wav", "br.wav"),
): ):
cmds.append([ cmds.append([
"ffmpeg", "-y", "ffmpeg", "-y",
@ -390,15 +413,15 @@ def render_all(options):
cmds.append([ cmds.append([
"ffmpeg", "-y", "ffmpeg", "-y",
"-nostats", "-loglevel", "error", "-nostats", "-loglevel", "error",
"-i", fragment_prefix / "back.mp4", "-i", fragment_prefix / "front.mp4",
"-i", fragment_prefix / "audio-5.1.mp4", "-i", fragment_prefix / "audio-5.1.mp4",
"-c", "copy", "-c", "copy",
fragment_prefix / "back-5.1.mp4", fragment_prefix / "front-5.1.mp4",
]) ])
for cmd in cmds: for cmd in cmds:
#print(" ".join([str(x) for x in cmd])) #print(" ".join([str(x) for x in cmd]))
subprocess.call(cmd) subprocess.call(cmd)
shutil.move(fragment_prefix / "back-5.1.mp4", fragment_prefix / "back.mp4") shutil.move(fragment_prefix / "front-5.1.mp4", fragment_prefix / "front.mp4")
for fn in ( for fn in (
"audio-5.1.mp4", "fl.wav", "fr.wav", "fc.wav", "lfe.wav", "bl.wav", "br.wav", "audio-5.1.mp4", "fl.wav", "fr.wav", "fc.wav", "lfe.wav", "bl.wav", "br.wav",
): ):

View file

@ -500,7 +500,7 @@ class KDEnliveProject:
["0", "00:00:00.000=%s" % value], ["0", "00:00:00.000=%s" % value],
["kdenlive:collapsed", "0"], ["kdenlive:collapsed", "0"],
])] ])]
if name == "blur": elif name == "blur":
return [self.get_element("filter", [ return [self.get_element("filter", [
["mlt_service", "avfilter.avgblur"], ["mlt_service", "avfilter.avgblur"],
["kdenlive_id", "avfilter.avgblur"], ["kdenlive_id", "avfilter.avgblur"],
@ -509,7 +509,7 @@ class KDEnliveProject:
["planes", "7"], ["planes", "7"],
["kdenlive:collapsed", "0"], ["kdenlive:collapsed", "0"],
])] ])]
if name == "mask": elif name == "mask":
mask = [ mask = [
self.get_element("filter", [ self.get_element("filter", [
["mlt_service", "frei0r.saturat0r"], ["mlt_service", "frei0r.saturat0r"],
@ -532,6 +532,15 @@ class KDEnliveProject:
]) ])
] ]
return mask return mask
elif name == "volume":
return [self.get_element("filter", [
["window", "75"],
["max_gain", "20db"],
["mlt_service", "volume"],
["kdenlive_id", "volume"],
["level", "00:00:00.000=%s" % value],
["kdenlive:collapsed", "0"],
])]
else: else:
return [ return [
self.get_element("filter", [ self.get_element("filter", [