Communitygithub.com

amrodwaire/phone-reel-edit

Redaktionshandbuch zur Umwandlung von Handyaufnahmen in vertikale Reels, Shorts oder TikToks mit arabischen Bildschirmtexten. Deckt Quellenprüfung, Schnitt, Stabilisierung, Zeitlupe mit ffmpeg, Farbkorrektur nach Messwerten (ffmpeg LUT oder DaVinci Resolve Free), arabischen Text in Remotion mit automatischer Überlappung, Sicherheitszonen- und Kontrastprüfung, Musikbearbeitung, Lautstärkemastering für Handylautsprecher und Vorab-Checks ab. Verwenden Sie es immer dann, wenn ein vertikales Video geschnitten, neu geschnitten oder farblich bearbeitet wird.

Was ist phone-reel-edit?

Dieses Skill ist ein umfassendes Redaktionshandbuch für die Erstellung vertikaler Kurzvideos (Reels, Shorts, TikToks) aus Handyaufnahmen, speziell für den arabischen Markt mit arabischen Bildschirmtexten. Es führt den Agenten Schritt für Schritt durch den gesamten Workflow: von der Quellenprüfung und dem Schnitt über Stabilisierung und Zeitlupe mit ffmpeg bis zur Farbkorrektur – entweder mit einem messwertbasierten Python-Skript (`grade.py`) oder in DaVinci Resolve Free mit Power Windows. Besonderes Augenmerk liegt auf der automatischen Erstellung und Überprüfung von arabischem Text in Remotion, inklusive Sicherheitszonen, Kontrast und Überlappungen. Das Skill ist für Claude Code, Cursor und andere KI-Agenten optimiert und stellt konsistente, messbare Ergebnisse sicher, indem es subjektive Entscheidungen des Agenten durch reproduzierbare Checks ersetzt.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/amrodwaire/phone-reel-edit/tree/HEAD

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Bearbeitung von Handy-Reels

Die meisten Regeln hier stammen von einem echten Reel, das genau an diesem Schritt zuerst gescheitert ist. references/research.md enthält die Gründe und Quellen. references/resolve-ui.md bildet die Steuerelemente von DaVinci Resolve ab, um es mit Computer-Use zu steuern.

Einige Fälle wurden noch nicht durch ein veröffentlichtes Reel getestet: HDR-Quellen, 30-fps-Zeitlupe, Sprache vor der Kamera, TikTok- und Shorts-Safe-Boxen sowie Cover. Ihre Befehle wurden nur an Testclips ausgeführt. references/other-cases.md enthält sie und erklärt, wie jeder geprüft wurde. Informieren Sie den Benutzer, wenn eine Bearbeitung auf einen dieser Fälle angewiesen ist.

Pipeline: Handy-Quelle, ffmpeg-Schnitt und -Stabilisierung, Farbe (DaVinci Resolve oder scripts/grade.py für Vollbild-Änderungen), Remotion-Text, ffmpeg-Ton und -Mastering.

Vor dem Schnitt

  1. Lesen Sie die Markenrichtlinien für den Kunden, falls vorhanden: verbotene Wörter, Kontaktzeile, KI-Kennzeichnung und was vor der Veröffentlichung genehmigt werden muss.
  2. Überprüfen Sie jedes Quellclip: python -I scripts/probe_source.py clip.mp4. Es meldet Rotation, Bildrate und ob sie variiert, SDR oder HDR, Farb-Tags und Audio und listet dann auf, was das Clip vor dem Schnitt benötigt. Typische Handyclips sind SDR bt709 mit etwa 30 oder 60 fps. HDR, variable Bildrate und 30-fps-Quellen benötigen jeweils einen zusätzlichen Schritt, siehe references/other-cases.md. Hintergrundgespräche bedeuten, dass der Originalton stumm bleibt. Wenn die Person vor der Kamera mit dem Zuschauer spricht, lesen Sie den Sprachabschnitt derselben Datei.
  3. Wenn Sie ein zweites KI-Modell als Prüfer verwenden, besprechen Sie die Idee zuerst mit ihm, bevor Sie eine Entscheidung treffen, und überprüfen Sie dann, was es sagt. references/research.md listet die Arten von Fehlern auf, die ein Prüfmodell gemacht hat.

Tempo

  • Eine Idee pro Reel. Der Text bestimmt die Länge, nicht eine Zielzahl. Ein Test-Reel benötigte 18,6 s, weil der Kunde bei 10,5 s oder 13,5 s nicht fertig lesen konnte.
  • Planen Sie 10 arabische Zeichen pro Sekunde ein, gezählt ab dem Erscheinen einer Zeile. Das ist absichtlich langsam: Der Zuschauer schaut sich auch das Bild auf dem Handy an.
  • Zwei Enthüllungen pro Einstellung, wenn möglich, und mindestens 1,5 s dazwischen. Zeilen, die zusammen erscheinen, zählen als eine Enthüllung.
  • Das Urteil eines muttersprachlichen Lesers zum Tempo geht über jedes Modell.
  • Das stärkste Bild und der Aufhänger-Text sind bei Frame 0 auf dem Bildschirm, ohne Einblendung aus Schwarz.
  • Vermeiden Sie eine plötzliche 3-fache Beschleunigung. Stattdessen sanft durch einen schlechten Moment rampen.

60 fps mit 0,5x abgespielt ergeben echte Frames bei 30 fps, daher ist keine Interpolation erforderlich. Eine 30-fps-Quelle hat keine Reserveframes, lesen Sie daher den Zeitlupenabschnitt von references/other-cases.md, bevor Sie eine verlangsamen. Stabilisieren Sie auf ein 60-fps-Zwischenprodukt, dann neu timen:

ffmpeg -ss S -t D -i raw.mp4 -vf "vidstabdetect=shakiness=6:accuracy=15:result=x.trf" -f null -
ffmpeg -ss S -t D -i raw.mp4 -vf "vidstabtransform=input=x.trf:smoothing=14:zoom=2:optzoom=0:interpol=bicubic,crop=W:H:X:Y,scale=1080:1920:flags=lanczos,fps=60" -an -c:v libx264 -preset veryfast -crf 10 -pix_fmt yuv420p im.mp4
python -I scripts/retime.py im.mp4 c1.mp4 --start 0.4 --frames 99 --keys 0:.5

Führen Sie scripts/-Pfade aus dem Ordner dieses Skills aus. ffmpeg benötigt die vidstab-Filter. Jedes Clip muss bei Zeit null beginnen, da ein Start ungleich null in Resolve als schwarze Frames am Kopf angezeigt wird. Fügen Sie setpts=PTS-STARTPTS hinzu, wenn Sie -ss mit einem Zeitfilter verwenden, und überprüfen Sie start_time mit ffprobe.

Eine Hand, die in die letzten Frames einer Standaufnahme driftet, kann versteckt werden, indem ein früherer Frame gehalten wird: trim=end_frame=N,setpts=PTS-STARTPTS,tpad=stop_mode=clone:stop_duration=0.6.

Farbe

Farbe bedeutet hier Korrektur: neutrale Weißabgleiche, natürliche Haut, echte Produktfarben, aufeinander abgestimmte Einstellungen. Ein kreativer Look kommt zuletzt und bleibt dezent, und die Produktfarben müssen danach immer noch stimmen.

Wählen Sie den Weg danach, was die Einstellung benötigt:

  • Nur Vollbild-Änderungen (Farbstich, Belichtung, Kontrast, Sättigung): scripts/grade.py. Es ist schneller und wiederholbar, und die Zahlen bleiben in einem Befehl, den Sie erneut ausführen können.
  • Ein Teil des Bildes benötigt eine eigene Korrektur (Haut unter unterschiedlichem Licht, ein Objekt): DaVinci Resolve für seine Power Windows.

Beide Wege verwenden dieselbe Messen-Anpassen-Messen-Schleife und dieselben Zielwerte unten.

Mit grade.py

python -I scripts/grade.py still c1.mp4 1.5 before.png
python -I scripts/measure_grade.py before.png --patch counter:40,60,200,220 --skin 100,1450,1000,1920
python -I scripts/grade.py make c1.cube --frame before.png --neutral 40,60,200,220 --white 205 --contrast 1.06 --pivot 0.4 --lift -0.02
python -I scripts/grade.py still c1.mp4 1.5 check.png --lut c1.cube --compare
python -I scripts/grade.py apply c1.mp4 c1g.mp4 --lut c1.cube

--neutral ist ein Bereich, der grau oder weiß sein sollte: eine Arbeitsplatte, eine Wand, Papier, ein weißer Deckel. make gleicht dessen R, G und B an, und --white legt den endgültigen Helligkeitswert fest. Wählen Sie einen Bereich, der gleichmäßig ausgeleuchtet und nicht überstrahlt ist. Betrachten Sie das --compare-Bild in voller Größe und messen Sie die gradierte Hälfte, bevor Sie anwenden. Eine LUT pro Einstellung, da jede Einstellung ihren eigenen Farbstich hat.

Fügen Sie --knee 0.85 hinzu, wenn eine Verstärkung Spitzlichter über 250 drückt. Verwenden Sie --denoise light nur bei sichtbar verrauschten Schwachlichtclips und --sharpen selten: Handys schärfen bereits, und mehr ergibt Halos an Kanten und Text.

Eine in Resolve erstellte Gradierung kann als LUT exportiert werden: Rechtsklick auf das Clip-Miniaturbild auf der Farbsseite, LUT erzeugen, 33-Punkt-Würfel. grade.py apply --lut wendet sie dann auf jedes Clip an. Eine LUT enthält nur Vollbild-Änderungen, daher sind Windows nicht darin enthalten.

In DaVinci Resolve Free

Kopieren Sie die Clips in einen einfachen Ordner, den Resolve sehen kann (es kann einige App-Datenordner nicht öffnen und meldet "Pfad existiert nicht"). Legen Sie sie auf einer neuen Timeline an und öffnen Sie das Parade-Oszilloskop.

Arbeiten Sie in dieser Reihenfolge, da jeder Schritt vom vorherigen abhängt:

  1. Balance-Node. Verstärkung für den Weißpunkt, Temp für den Farbstich. Positiver Temp erwärmt. Dieselbe Oberfläche in zwei Einstellungen muss übereinstimmen.
  2. Kontrast-Node. Kontrast und Pivot, Lift für tiefe Schwarztöne, eine kleine Sat-Bewegung von 5 oder weniger.
  3. Subjekt-Node, nur wenn eine globale Änderung etwas anderes beeinträchtigen würde. Verwenden Sie ein weiches Power Window. Im Test-Reel korrigierte ein Window die Haut einer Hand und ließ die Produktfarben unberührt.
  4. Rendern, messen, anpassen und wiederholen. Zwei Durchgänge waren ausreichend.
python -I scripts/measure_grade.py frame.png --patch counter:40,60,200,220 --skin 100,1450,1000,1920

Zielwerte

  • Neutrale Oberflächen: R, G und B innerhalb von etwa 3 bis 5. Weiß um 195 bis 215 für einen hellen Look.
  • Hautfarbton nahe 123 Grad. Bleiben Sie natürlich, denn die Vektorskoplinie ist eine Referenz, kein Zielwert.
  • Helligkeit der Haut: Richtwerte liegen je nach Haut und Szene zwischen 40 % und 70 %. Verwenden Sie diesen Bereich, um einen Fehler zu erkennen, nicht als zu treffende Zahl.
  • Spitzlichter: unter etwa 2 % der Pixel bei 250+.
  • Sättigung: Vergleichen Sie die chroma-Linie vorher und nachher. Eine Korrektur sollte p95 nahe dem ursprünglichen Wert belassen. Ein großer Sprung bedeutet, dass die Gradierung Farbe hinzufügt, die die Szene nicht hatte.
  • Produktfarben bleiben wahr, wenn das Video ein Produkt verkauft.
  • Zwei Einstellungen derselben Oberfläche messen gleich.

Was was bewegt:

  • Tint bewegte eine rote Handfläche kaum. Per-Kanal-Gamma behob es: G hoch, R und B etwas runter.
  • Temp +300 übertrieb einen Blaustich, wo +130 richtig war. Fangen Sie klein an.

Arabischer Text in Remotion

assets/reelTemplate.tsx ist eine funktionierende Vorlage. Sie hält jeden Textblock als Daten und hat eine Probe-Komposition für die Textprüfung. references/remotion-setup.md behandelt das Starten eines Projekts von Grund auf und das Registrieren der Kompositionen.

Regeln:

  • Eine schwere arabische Schriftart (die Vorlage verwendet Alexandria 800), weiß plus eine Akzentfarbe, keine Boxen, ein weicher Schatten.
  • Größen 62 bis 124 px auf einem 1080x1920-Frame. Ein Handy braucht sie so groß.
  • Zeilenbox 1,5 für Arabisch. Bei 1,22 berühren die Buchstabenenden die nächste Zeile.
  • Jeder Buchstabe innerhalb von x 110-950 und y 220-1475, damit die rechte Leiste und die untere Leiste von Instagram nichts überdecken.
  • whiteSpace: nowrap, damit eine Zeile nie unerwartet umbricht.
  • Aufhänger bei Frame 0. Spätere Zeilen etwa 1 s auseinander, mit einem 6-Frame-Auf- und Abbau.
  • Ein weiches, dunkles Band hinter dem Text sorgt dafür, dass das Motiv darunter sichtbar bleibt.
  • Kundenreferenzen bleiben wörtlich, ohne Namen oder Foto, es sei denn, der Kunde hat zugestimmt.
  • Sagen Sie, was der Zuschauer sieht. Lassen Sie kein Etikett implizieren, es sei die einzige Option.

Nach jeder Textänderung die Probe-Frames rendern und prüfen:

npx remotion still ReelProbe out/p0.png --frame=0
python -I scripts/check_text.py out/p0.png out/p1.png out/p2.png out/p3.png

Es schlägt fehl, wenn die Tinte zweier Zeilen innerhalb von 14 px kommt oder ein Buchstabe die Sicherheitsbox verlässt. Ein Block fasst maximal sieben Zeilen.

Dann den Text gegen das echte Bild prüfen. Rendern Sie den letzten Frame jeder Einstellung, wenn jede Zeile auf dem Bildschirm ist, und übergeben Sie diese Frames in derselben Reihenfolge:

npx remotion still Reel out/r0.png --frame=119
python -I scripts/check_text.py out/p0.png out/p1.png --real out/r0.png out/r1.png

Jede Zeile erhält einen Kontrastwert gegen den hellsten Teil des Bildes um ihre Buchstaben, und unter 3,0 gilt als Fehlschlag. Im Test-Reel erzielten die Akzentfarbzeilen 3,2 bis 4,6 und die weißen Zeilen 5 und mehr. Ein niedriger Wert bedeutet ein stärkeres Band hinter dem Text oder ein Verschieben des Blocks.

Die Standardbox ist die von Instagram. Für ein Reel, das auch auf TikTok oder Shorts geht, --platform all hinzufügen. Diese beiden Boxen stammen aus Drittanbieter-Anleitungen, daher den Upload in jeder App in der Vorschau ansehen.

Dann Full-Size-Frames am Ende jeder Einstellung betrachten. Eine Miniaturansicht verdeckt Kollisionen, und sich hinter dem Text bewegende Dinge zeigen sich nur in voller Größe. Im Test-Reel kreuzte ein Löffel eine Zeile. Ein kleiner Zoom mit einem Eckursprung bewegte ihn frei und beschnitt auch einen wandernden Finger.

Rendern und Ton

npx remotion render Reel out/reel.mp4 --codec=h264 --crf=15 --muted --color-space=bt709
python -I scripts/beat_offset.py music.ogg --cuts 3.3,6.5,10.3 --length 13.5 --from 0 --to 40

--color-space=bt709 ist wichtig. Ohne es schreibt Remotion volle bt470bg mit unbekannten Primärfarben.

Schneiden Sie die Musik vom besten Offset aus, blenden Sie die letzten 1,2 s aus, fügen Sie mit -c:v copy zusammen, dann master:

sh scripts/master.sh in.mov out.mp4 -14 0.4 0.75

Die letzte Zahl ist die Limiter-Decke. AAC fügt Überschwinger darüber hinzu, und der Betrag hängt vom Track ab, daher misst das Skript die geschriebene Datei und gibt ihre Lautstärke und den True Peak aus. Wenn es TOO HOT ausgibt (True Peak über -1 dBTP), führen Sie es erneut mit 0,7 aus.

Handylautsprecher verlieren den meisten Ton unter 300 Hz, daher dieses Band überprüfen:

ffmpeg -hide_banner -nostats -i out.mp4 -vn -af "highpass=f=300:poles=2,highpass=f=300:poles=2,lowpass=f=12000,ebur128" -f null - 2>&1 | tail -12

Zielen Sie auf -20 LUFS oder lauter in diesem Band bei einem -14 LUFS-Master ab. Ein basslastiger Track maß -23,9 und klang auf Handys dumpf. Zeichnen Sie auch die Wellenform und das Spektrum, da die Zeitstempel eines Prüfmodells nicht immer damit übereinstimmen.

KI-generierte Musik oder Stimme benötigt das KI-Label der Plattform. Generieren Sie Musik etwas länger als das Reel, da ein zu kurz geschnittener Track nicht sauber verlängert werden kann.

Checks vor Fertigstellung

  • ffprobe zeigt yuv420p, tv, bt709, bt709, bt709 sowie die richtige Dauer und Framecount.
  • check_text.py gibt PASS aus, mit --real-Frames eingeschlossen.
  • master.sh hat einen True Peak bei oder unter -1 dBTP ausgegeben.
  • Ein Cover-Frame existiert, wenn das Reel auf einem Profilraster angezeigt wird (references/other-cases.md).
  • Betrachten Sie die Full-Size-Frames selbst, einschließlich des ersten und letzten Frames sowie des Frames vor jedem Schnitt.
  • Wenn ein Prüfmodell das endgültige mp4 ansieht, geben Sie ihm die bereits getroffenen Entscheidungen, damit es sie nicht wieder aufgreift.
  • Geben Sie an, was nicht geprüft wurde. Ein Agent kann das Audio nicht hören oder die Datei auf einem Handy sehen.
  • Nach dem Ersetzen einer Datei, die bereits irgendwo hochgeladen ist, laden Sie sie erneut hoch, überprüfen Sie sie über den öffentlichen Link und aktualisieren Sie alles Geplante, das auf die alte Datei verweist.

Die Veröffentlichung benötigt die Zustimmung des Kunden.

Verwandte Skills