import os import subprocess import ox import itemlist.models import item.models from .render_kdenlive import KDEnliveProject, _CACHE from .render import default_prefix as root def render_music(): pass def render_forest(): # Stereo Mix, playing on 5.1 rear left/right project = KDEnliveProject(root) qs = item.models.Item.objects.filter( data__type__icontains='Forest' ).order_by('sort__title') for clip in qs: src = clip.files.all()[0].data.path project.append_clip('A1', { "src": src, "duration": clip.sort.duration, "filter": { }, }) path = os.path.join(root, "forest.kdenlive") with open(path, 'w') as fd: fd.write(project.to_xml()) cmds = [] cmds.append([ "melt", "forest.kdenlive", '-quiet', '-consumer', 'avformat:forest.wav' ]) info = ox.avinfo('forest.wav') cmds.append([ "ffmpeg", "-y", "-nostats", "-loglevel", "error", "-f", "lavfi", "-i", "anullsrc=r=48000:cl=mono", "-t", str(info["duration"]), "forest_silence.wav" ]) for src, out1, out2 in ( ('forest.wav', "forest_left.wav", "forest_right.wav"), ): cmds.append([ "ffmpeg", "-y", "-nostats", "-loglevel", "error", "-i", src, "-filter_complex", "[0:0]pan=1|c0=c0[left]; [0:0]pan=1|c0=c1[right]", "-map", "[left]", out1, "-map", "[right]", out2, ]) cmds.append([ "ffmpeg", "-y", "-nostats", "-loglevel", "error", "-i", "silence.wav", "-i", "silence.wav", "-i", "silence.wav", "-i", "silence.wav", "-i", "forest_left.wav", "-i", "forest_right.wav", "-filter_complex", "[0:a][1:a][2:a][3:a][4:a][5:a]amerge=inputs=6[a]", "-map", "[a]", "-ar", "48000", "-c:a", "aac", "render/forest-5.1.mp4" ]) os.chdir(root) for cmd in cmds: print(" ".join([str(x) for x in cmd])) subprocess.call(cmd) for name in ( "forest.wav", "forest_left.wav", "forest_right.wav", "silence.wav", ): if os.path.exists(name): os.unlink(name)