interview-reel: Reel aus Interviews/Vorträgen (Fox Hsiao-Stil)
Josh 2026-10-12 genehmigt: Für Interview-Reels den Fox-Stil verwenden, mit erklärenden Passagen und 15-30-Sekunden-Originalausschnitten (mit Quellenangabe). Dieses Skill erstellt nur Entwürfe, keine finalen Posts. Das Posten übernimmt immer der Haupt-Bot nach Josh's Freigabe.
- Skripte:
<SKILLS_DIR>/interview-reel/scripts/(im Folgenden$S) - Beispiel-Spezifikation:
examples/mcp_test.spec.json(Anthropic offizielles MCP-Interview, Testvideo) - Referenz-Endprodukt:
<YOUR_WORKSPACE>/media-team/03-drafts/interview-reel-test/test.mp4 - Referenzvideos:
<YOUR_WORKSPACE>/refs/ig-DeWJjxJyoEb/(Fox Hsiao, Musk Terafab, zu kopierendes Format),<YOUR_WORKSPACE>/refs/ig-DWVQfDmE41Z/(AI Post, Huang Jen-Hsun, nur Originalton, einfach, NICHT kopieren – keine Quellenangabe) - Verwendet: common.py aus stock-footage-reel (Schriftarten, Downloads), synth_music.py (eigene Musik), Pexels-Cache; venv von OpenMontage (faster-whisper, yt-dlp) und
elevenlabs_tts; Cover<YOUR_WORKSPACE>/media-team/00-profile/covers/render.py.
Format (basierend auf Fox Hsiaos Video)
| Abschnitt | Bild | Ton |
|---|---|---|
| Hook (0 bis ca. 11 Sekunden) | Vollbild 9:16 B-Roll (abgedunkelt, langsame Zoom-in), alle 1 bis 2,5 Sekunden wechselnd; oben links große Textkarte (roter kleiner Kategorie-Tag + zwei Zeilen großer fetter Text, wichtige Wörter orange) | Voice-Over (Chinesisch <YOUR_VOICE_NAME> / Englisch Sarah Explains) + Musik |
| clip (Originalton, jede 15 bis 30 Sekunden, 3 bis 4 Stücke) | 16:9 Original zentriert (y=468), oben und unten mit demselben Bild unscharf abgedunkelt; oben links kleiner Text „Video / Originalkanal“; unter dem Original roter „Originalton“-Tag + „Englischer Name · Chinesischer Name oder Rolle“ + „Anlass | YYYY.MM.DD“ |
| explainer (Erklärung, zwischen den Clips) | Wie Hook, Textkarten durch Faktenkarten ersetzt, unten kleiner Text „Quelle: Wer | Datum“; alle 2 bis 3,2 Sekunden wechselnd |
| Outro | Zentrierte große Frage (wichtige Wörter gelb) + Markenzeichen + @bounce12340 + ganz unten eine Zeile Quellenangabe | Voice-Over fragt das Publikum (Chinesisch <YOUR_VOICE_NAME> / Englisch Sarah Explains) |
Gemeinsam für das ganze Video: Feste Titelzeile oben (Markenzeichen + einzeiliger Titel, wichtige Wörter orange); Untertitel zentriert, großes traditionelles Chinesisch (weiß, fett, leichter Schatten, wichtige Wörter gelb) + darunter eine Zeile klein Englisch. In den Erklär-Abschnitten ist das Englisch der Originaltext des Voice-Overs; in den Originalton-Abschnitten ist das Englisch die Transkription des Redners, Chinesisch unsere Übersetzung.
Hausregeln (müssen befolgt werden)
- 1080x1920, unter 3 Minuten, IG-Endprodukt unter 45 MB (sonst automatische Bitratenreduzierung), H.264/AAC.
- Voice-Over: ElevenLabs-Stimme je nach Sprache. Chinesisch: „<YOUR_VOICE_NAME>“ (
<YOUR_ELEVENLABS_VOICE_ID>); Englisch: Sarah Explains (Nhs7eitvQWFTQBsf0yiT). Modelleleven_multilingual_v2. Verwendetelevenlabs_ttsvon OpenMontage. Der API-Key ist die UmgebungsvariableELEVENLABS_API_KEY(wird nur mitbash -lcübergeben), nicht ausdrucken oder in Dateien speichern. - Untertitel: Traditionelles Chinesisch als Hauptuntertitel + kleines Englisch. Taiwanesische Begriffe (軟體, 資料, 影片, 網路, 運算資源…). Anführungszeichen: 「」. Keine Gedankenstriche (wird von build.py blockiert).
- Erklärung dominiert: Originalton insgesamt unter 40%, über 50% wird von build.py direkt blockiert. Jeder Originalton-Clip max. 30 Sekunden (wird von prep_clips.py blockiert), empfohlen 15 bis 30 Sekunden.
- Originalton-Abschnitte: Kein Voice-Over, keine Änderung des Originaltextes des Redners; die chinesische Übersetzung muss dem Original treu bleiben, keine Schlussfolgerungen für den Redner hinzufügen.
- Quellentreue: Zahlen, Daten in der Erklärung müssen auf die Primärquelle zurückgehen; Textkarten mit
cite„Quelle: Wer | Datum“ versehen und in facts.md aufnehmen. - Das Ende MUSS eine Frage an das Publikum stellen (outro.question muss „?“ enthalten).
- Cover: Mit covers/render.py,
cover.templatestandardmäßig"E"(Porträt, von Josh als „D Personen-Porträt“ bezeichnet). Josh hat vor dem 2026-10-12 entschieden: Alle Interview-Reels verwenden diese Vorlage.
Quellen & Lizenzierung (in credits.json jedes Videos)
- Bevorzugt offizielle Quellen: Firmenkanäle (Anthropic, OpenAI, NVIDIA, Microsoft…), Veranstalter (GTC, Build, TED…), Podcast-eigene Kanäle. Im
channel-Feld der Spezifikation den Originalkanal angeben; prep_clips.py vergleicht mit dem YouTube-Kanal und warnt bei Abweichungen. - Auf keinen Fall Nachdrucke / Versionen mit fremden Wasserzeichen verwenden (z. B. von Fanpages neu hochgeladen, von anderen Accounts geschnittene Clips, Clips mit fremden Logos). Wenn keine offizielle Version gefunden wird, diesen Abschnitt nicht machen.
- Quellenangabe im Bild zwingend: Unter dem Originalton „Originalton Name | Anlass | Datum“ + oben links „Video / Originalkanal“; am Ende noch einmal klein; in der Post-Beschreibung den
caption_creditsauscredits.jsoneinfügen. - credits.json zeichnet automatisch auf: Quell-URL, Kanal, Kanal-URL, Videotitel, Upload-Datum, verwendete Start-/Endzeit (source_in/source_out), Position im Endvideo, URLs und Autoren der B-Rolls, Voice-Over, Musik.
- Lizenzhinweis: Das Urheberrecht an diesen Interviewausschnitten liegt beim Originalkanal. Wir haben keine Lizenz erworben, sondern berufen uns auf „Kommentar, Zitat“ im Rahmen des Fair Use (Taiwanesische Urheberrechtsgesetze Art. 52, 65). Dies ist eine Grauzone. Daher: Jeder Clip kurz; das gesamte Video konzentriert sich auf Josh's Kommentare und Zusammenfassung (transformativ); Originalton nur als Beleg; keine ganzen Abschnitte übernehmen; nichts so schneiden, dass der Redner etwas nicht Gesagtes zu meinen scheint.
- Keine implizite Unterstützung: Nicht „Empfohlen von…“, „Offizielle Zusammenarbeit“ o. Ä. schreiben; Cover und Titel sollen nicht den Eindruck erwecken, der Redner unterstütze Josh oder seine Produkte.
- Downloads: Nur yt-dlp für öffentliche Videos verwenden, kein Login, keine Cookies, keine Bezahlschranken oder Regionssperren umgehen.
--download-sectionsvon YouTube führt auf diesem Rechner zu 403, daher lädt prep_clips.py das ganze Video (max. 1080p) in dencache/sources/-Ordner und schneidet es mit ffmpeg zu. - Wenn der Originalkanal die Löschung verlangt oder Josh Bedenken hat, nur mit Textzitaten arbeiten, ohne Video.
Ablauf
D=<YOUR_WORKSPACE>/media-team/03-drafts/<Thema>-interview ; mkdir -p $D/work
cp $S/../examples/mcp_test.spec.json $D/spec.json # Auf aktuellen Inhalt anpassen
bash -lc "source <SKILLS_DIR>/OpenMontage/om-env.sh >/dev/null; cd $S; python prep_clips.py --spec $D/spec.json --work $D/work"
- Clips auswählen: Zuerst die Kapitel des Originalvideos lesen (yt-dlp
--print description). Im offiziellen Video 15-30-Sekunden-Ausschnitte wählen, in denen der Redner einen wichtigen Punkt vollständig darstellt. Transkription mitprep_clips.py; zum Probehören das ganze Video herunterladen und einen kleinen Ausschnitt mit ffmpeg schneiden. - prep_clips.py: Download, zuschneiden, transkribieren (faster-whisper
medium, CPU: 20-Sekunden-Clip ca. 10 Sekunden). Gibt eine"subs"-Vorlage aus: Diese zurück in den Clip kopieren,zhin taiwanesisches Chinesisch übersetzen. Zeilen können zusammengeführt oder geteilt werden (tist die Sekunden relativ zum Clip-Start). Englisch so lassen, wie der Redner spricht; bei Zweifeln an der Transkription nochmal anhören oder mit einem anderen Modell gegenprüfen (--retranscribe --model small). - tts.py: Eine Audiodatei pro Zeile; derselbe Text wird nur einmal gesendet (gecacht per Hash in
cache/tts/). Zuerst--dry-runausführen, um die Zeichenanzahl zu sehen. Fallback bei Fehler: user-Elevenlabs-Connectorcreative_generate_speech(generations_count: 1), in den ausgegebenen Cache-Pfad speichern. - fetch_broll.py: Pro Schlüsselwort 3 Videos von Pexels holen (Querformat bevorzugt, Schlüsselwörter genauer). Konkrete Bilder verwenden („Server-Rack-Lichter“, „Programmierer beim Codieren“), keine abstrakten Begriffe. In der Zeile kann auch
"image"(Standbild, langsamer Zoom-in) oder"file"(z. B. Screen-Recording einer Webseite) angegeben werden. - build.py --check: Gibt Videolänge, Originalton-Anteil, Untertitelzeiten und Regelverstöße aus.
- build.py: Video rendern. Oder alles auf einmal:
bash $S/run.sh $D/spec.json $D <name>(Untertitel müssen vorher übersetzt sein).
Spezifikationsfelder
{
"title": "Fester Titel oben, [[wichtig]] wird orange",
"voice": {"voice_id": "Nhs7eitvQWFTQBsf0yiT", "model": "eleven_multilingual_v2"}, // Englisch Sarah Explains; Chinesisch: <YOUR_ELEVENLABS_VOICE_ID> (deine chinesische Stimme)
"music": "synth", // Eigene synthetische Musik; oder Dateipfad (mit music_license); oder "none"
"music_db": -19, // Grundlautstärke der Musik
"clip_music_db": -8, // Musik noch leiser während der Originalton-Clips (dB)
"gap": 0.28, // Pause nach jedem Voice-Over-Satz (Sekunden), Überschreibung pro Zeile mit line.pause
"max_cut": 3.2, // Maximale Bildwechsel alle X Sekunden in Erklär-Abschnitten (Hook standardmäßig 2.4, Überschreibung pro Segment mit seg.max_cut)
"segments": [
{"type": "hook", "broll": ["Schlüsselwort"], "lines": [
{"en": "Voice-Over Englisch", "zh": "Untertitel Chinesisch", "card": {"tag": "Kleiner roter Tag", "text": "Erste Zeile\nZweite Zeile[[wichtig]]", "cite": "Quelle: …|YYYY.MM.DD"}}
]},
{"type": "clip", "url": "https://www.youtube.com/watch?v=…", "channel": "Originalkanal", "official": true,
"in": 147.1, "out": 166.75, "speaker_en": "David Soria Parra", "speaker_zh": "MCP-Mitbegründer",
"event": "Anthropic offizielles Interview", "date": "2025.12.11", "highlight": ["gelb zu machendes chinesisches Wort"],
"subs": [{"t": [0.0, 3.56], "en": "Originaltext des Redners", "zh": "Taiwanesische Übersetzung"}]},
{"type": "explainer", "broll": ["…"], "lines": [
{"en": ["Absatz eins,", "Absatz zwei."], "zh": ["Untertitel eins", "Untertitel zwei"], "broll": ["Schlüsselwort für diesen Satz"], "card": {…}}
]},
{"type": "outro", "tag": "Hinterlasse einen Kommentar", "question": "Große Frage erste Zeile\nZweite Zeile[[wichtig]]?", "broll": ["…"], "lines": [{"en": "…", "zh": "…"}]}
],
"cover": {"template": "E", "ep": "EP.13", "kicker": "…", "title": "…\n[[…]]", "subtitle": "…", "frame": {"clip": 1, "t": 4.0}}
}
en/zhkönnen ein String oder eine gleich lange Liste sein (Liste = derselbe Voice-Over-Satz, aufgeteilt in mehrere Untertitel, Zeit proportional zur englischen Zeichenanzahl).cardwird innerhalb desselben Abschnitts für den nächsten Satz übernommen, bis eine neue Karte kommt;"card": falselöscht sie.- Wenn
zhzu lang ist, wird automatisch bei „,“ getrennt; manuell mit\n. Wichtige Wörter mit[[ ]]oderhl-Liste kennzeichnen. cover.frame: Für das Cover den X-ten Originalton-Clip zur Sekunde Y (rohes 16:9-Bild) verwenden. Andere Felder der E-Vorlage (photo_side,visual_pos,brightness,tag) nachcovers/README.md.- Chinesischer Name: Wenn der Redner einen allgemein üblichen chinesischen Namen hat (z. B. 黃仁勳, 馬斯克), diesen verwenden; ansonsten die Rolle (z. B. „MCP-Mitbegründer“). Keine eigenen Umschriften erstellen.
Ausgabe (OUT)
<name>.mp4, preview_720p.mp4 (für Josh zum Ansehen im Chat), contact_sheet.jpg (ein Bild pro Kameraeinstellung), credits.json, timeline.json, cover_reel.png / cover_post.png, cover_spec.json.
Selbstcheck vor Abgabe
- Mit Read contact_sheet.jpg prüfen: Überschneiden sich Textkarten, Untertitel, Originalton-Tags? Werden sie von der IG-Oberfläche verdeckt (oben 220px, unten 380px, rechts 130px)?
- Originalton-Untertitel: Englisch stimmt mit dem Original des Redners überein, Chinesisch verfälscht die Bedeutung nicht. Bei unsicheren Transkriptionsstellen Josh zum Anhören markieren.
ffprobefür Länge und Dateigröße; Originalton-Anteil in der letzten Zeile von build.py.- In credits.json: Jeder interview_clips-Eintrag enthält URL, Kanal, Start-/Endzeit; bestätigen, dass es der offizielle Kanal ist.
- Dem Haupt-Bot melden: Dateipfad, Länge, Größe, Originalton-Quellen und Lizenzinformationen, Entscheidungen, die Josh treffen muss. Nicht posten.
Bekannte Einschränkungen
- faster-whisper auf diesem Rechner:
*.en-Modelle (small.en usw.) liefern unsinnige Ausgaben, daher mehrsprachige Modellemedium/smallverwenden; PyAV-Version inkompatibel, Audio muss als numpy übergeben werden (im Skript bereits behandelt). Verschiedene Modelle lassen gelegentlich Wörter aus, daher wichtige Sätze gegenprüfen. - YouTube
--download-sectionsführt zu 403, daher muss das ganze Video heruntergeladen werden (lange Interviews in 1080p können mehrere 100 MB sein; im Cachecache/sources/, nach Gebrauch löschbar). - Keine GPU: 1-minütiges Video ca. 2 Minuten Rendering, 3-minütiges Video ca. 6-8 Minuten.
- Pexels-Schlüsselwort-Ergebnisse sind manchmal ungenau; nach Ansicht des Kontaktblatts Schlüsselwörter ändern oder
image/fileverwenden.