Video: la partita completa rigirata sul gioco di oggi, il trailer e la versione extended (copioni, prova locale, montaggio --trailer) (Andrea)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GiECd9KMfjthRUnujCGSzZ
This commit is contained in:
@@ -4,6 +4,7 @@ copione -> video/out/<clip>.mp4.
|
||||
|
||||
python3 video/monta.py ~/Workspaces/qemu/qemu-iso-lab/artifacts/tour/out/demo-prototipo
|
||||
python3 video/monta.py ~/Workspaces/qemu/qemu-iso-lab/artifacts/tour/out/partita-completa
|
||||
python3 video/monta.py ~/Workspaces/qemu/qemu-iso-lab/artifacts/tour/out/trailer --trailer
|
||||
|
||||
- ritaglia lo schermo 1600x900 della VM sull'area del gioco e lascia sopra una fascia per le didascalie;
|
||||
- le didascalie (cues.json, solo «it») restano a schermo il tempo di leggerle, non fino alla successiva;
|
||||
@@ -31,6 +32,9 @@ VOLUME = 0.5 # musica della demo-prototipo (senza voci)
|
||||
VOLUME_SOTTO = 0.22 # musica sotto le voci: bassa (Andrea, 25 ottobre)
|
||||
VOLUME_VOCI = 1.0
|
||||
VOLUME_NARRATORE = 1.15
|
||||
# Il trailer (--trailer): tutto lo schermo della VM (la scena è a tutto schermo), niente fascia né didascalie (le
|
||||
# scritte sono nella pagina), la musica in primo piano.
|
||||
VOLUME_TRAILER = 0.6
|
||||
VOLUME_TUTORIAL = 0.07 # musica dei video «Come si gioca»: sottofondo # il narratore dei video «Come si gioca», sopra la musica bassa
|
||||
FADE = 1.2
|
||||
|
||||
@@ -49,6 +53,7 @@ def ts(s: float) -> str:
|
||||
def main() -> None:
|
||||
d = Path(sys.argv[1]).expanduser()
|
||||
tutorial = "--tutorial" in sys.argv[2:]
|
||||
trailer = "--trailer" in sys.argv[2:]
|
||||
taglio, fascia = (TAGLIO_TUTORIAL, FASCIA_TUTORIAL) if tutorial else (TAGLIO, FASCIA)
|
||||
meta = json.loads((d / "cues.json").read_text())
|
||||
nome = meta["clip"]
|
||||
@@ -71,6 +76,8 @@ def main() -> None:
|
||||
# «troppo alta la musica del gioco»).
|
||||
if (OUT / f"{nome}-narrazione.json").exists():
|
||||
volume = VOLUME_TUTORIAL
|
||||
if trailer:
|
||||
volume = VOLUME_TRAILER
|
||||
else:
|
||||
musica = json.loads((OUT / "musica.json").read_text())
|
||||
volume = VOLUME
|
||||
@@ -131,6 +138,8 @@ def main() -> None:
|
||||
mix = "".join(pezzi) + f"amix=inputs={len(pezzi)}:normalize=0:duration=longest[a]"
|
||||
stile = f"FontName=DejaVu Sans,FontSize=11,Bold=1,MarginV=4,Outline=1,Shadow=0,PrimaryColour=&H007AD2FF"
|
||||
video = f"[0:v]{taglio},pad=iw:ih+{fascia}:0:{fascia}:{FONDO},subtitles={srt}:force_style='{stile}'[v]"
|
||||
if trailer:
|
||||
video = "[0:v]scale=1600:900:flags=lanczos,fade=t=in:d=0.5[v]"
|
||||
finale = OUT / f"{nome}.mp4"
|
||||
subprocess.run(["ffmpeg", "-loglevel", "error", "-y", "-i", str(raw), *ingressi,
|
||||
"-filter_complex", ";".join([video, *catene, mix]), "-map", "[v]", "-map", "[a]",
|
||||
|
||||
Reference in New Issue
Block a user