Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from bundle
Capture a talking-head clip with camera and microphone, transcribe it with ElevenLabs word-level timestamps, detect immediate doubled words or stutters, render
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
scripts/mux_audio_to_video.py
1#!/usr/bin/env python32import argparse3import json4import subprocess5from pathlib import Path678def main() -> None:9parser = argparse.ArgumentParser()10parser.add_argument("--video", required=True)11parser.add_argument("--audio", required=True)12parser.add_argument("--output", required=True)13parser.add_argument("--audio-bitrate", default="192k")14args = parser.parse_args()1516video = Path(args.video).expanduser().resolve()17audio = Path(args.audio).expanduser().resolve()18output = Path(args.output).expanduser().resolve()19output.parent.mkdir(parents=True, exist_ok=True)2021subprocess.run(22[23"ffmpeg",24"-hide_banner",25"-loglevel",26"error",27"-i",28str(video),29"-i",30str(audio),31"-map",32"0:v:0",33"-map",34"1:a:0",35"-c:v",36"copy",37"-c:a",38"aac",39"-b:a",40args.audio_bitrate,41"-shortest",42str(output),43"-y"44],45check=True46)4748probe = subprocess.run(49[50"ffprobe",51"-hide_banner",52"-show_entries",53"format=duration,size",54"-of",55"json",56str(output)57],58check=True,59capture_output=True,60text=True61)6263print(json.dumps({"ok": True, "output": str(output), "probe": json.loads(probe.stdout)}))646566if __name__ == "__main__":67main()68