a/v render. gen fixes

This commit is contained in:
j 2026-01-24 13:26:30 +01:00
commit d62d4c5746
6 changed files with 706 additions and 268 deletions

View file

@ -8,9 +8,93 @@ import item.models
from .render_kdenlive import KDEnliveProject, _CACHE
from .render import default_prefix as root
from .render import load_defaults
def render_all(options):
if os.path.exists(os.path.join(root, "render/forest-5.1.mp4"):
print("forest-5.1.mp4 exists, skipping")
else:
render_forest()
if os.path.exists(os.path.join(root, "render/music-5.1.mp4"):
print("music-5.1.mp4 exists, skipping")
else:
render_music()
def render_music():
pass
# Stereo Mix, playing on 5.1 front left/right
project = KDEnliveProject(root)
qs = item.models.Item.objects.filter(
data__type__icontains='music'
).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, "music.kdenlive")
with open(path, 'w') as fd:
fd.write(project.to_xml())
os.chdir(root)
cmd = [
"melt", "music.kdenlive", '-quiet', '-consumer', 'avformat:music.wav'
]
print(" ".join([str(x) for x in cmd]))
subprocess.call(cmd)
info = ox.avinfo('music.wav')
cmds = []
cmds.append([
"ffmpeg", "-y",
"-nostats", "-loglevel", "error",
"-f", "lavfi", "-i", "anullsrc=r=48000:cl=mono",
"-t", str(info["duration"]),
"music_silence.wav"
])
for src, out1, out2 in (
('music.wav', "music_left.wav", "music_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", "music_left.wav",
"-i", "music_right.wav",
"-i", "music_silence.wav",
"-i", "music_silence.wav",
"-i", "music_silence.wav",
"-i", "music_silence.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/music-5.1.mp4"
])
for cmd in cmds:
print(" ".join([str(x) for x in cmd]))
subprocess.call(cmd)
for name in (
"music.kdenlive",
"music.wav",
"music_left.wav",
"music_right.wav",
"music_silence.wav",
):
if os.path.exists(name):
os.unlink(name)
def render_forest():
# Stereo Mix, playing on 5.1 rear left/right
@ -32,11 +116,14 @@ def render_forest():
with open(path, 'w') as fd:
fd.write(project.to_xml())
cmds = []
cmds.append([
os.chdir(root)
cmd = [
"melt", "forest.kdenlive", '-quiet', '-consumer', 'avformat:forest.wav'
])
]
print(" ".join([str(x) for x in cmd]))
subprocess.call(cmd)
info = ox.avinfo('forest.wav')
cmds = []
cmds.append([
"ffmpeg", "-y",
"-nostats", "-loglevel", "error",
@ -61,10 +148,10 @@ def render_forest():
cmds.append([
"ffmpeg", "-y",
"-nostats", "-loglevel", "error",
"-i", "silence.wav",
"-i", "silence.wav",
"-i", "silence.wav",
"-i", "silence.wav",
"-i", "forest_silence.wav",
"-i", "forest_silence.wav",
"-i", "forest_silence.wav",
"-i", "forest_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]",
@ -72,15 +159,15 @@ def render_forest():
"-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.kdenlive",
"forest.wav",
"forest_left.wav",
"forest_right.wav",
"silence.wav",
"forest_silence.wav",
):
if os.path.exists(name):
os.unlink(name)