Communitygithub.com

animated-voiceover-ad

מודעת וידאו אנכית (9x16, ריל/סטורי לממומן במטא) שבנויה כולה בקוד ב-Remotion מעל קריינות של בעל העסק: טקסט קינטי על כל מילה, טלפון עם התראות, מונה תוצאות, חותמות, כרטיס הצעה ו-CTA, עם מוזיקה ואפקטים. להפעיל כשמבקשים "מודעת אנימציה", "סרטון אנימציה לממומן", "מודעה עם הקריינות שלי", "מודעה בלי לצלם את עצמי", או כששולחים הקלטת קול ומבקשים ממנה סרטון. גם לתיקונים במודעה כזו: "המוזיקה חזקה", "השנייה הזו משעממת", "הטקסט לא מסונכרן", "תעשה עוד גרסה".

What is animated-voiceover-ad?

animated-voiceover-ad is a Claude Code agent skill that מודעת וידאו אנכית (9x16, ריל/סטורי לממומן במטא) שבנויה כולה בקוד ב-Remotion מעל קריינות של בעל העסק: טקסט קינטי על כל מילה, טלפון עם התראות, מונה תוצאות, חותמות, כרטיס הצעה ו-CTA, עם מוזיקה ואפקטים. להפעיל כשמבקשים "מודעת אנימציה", "סרטון אנימציה לממומן", "מודעה עם הקריינות שלי", "מודעה בלי לצלם את עצמי", או כששולחים הקלטת קול ומבקשים ממנה סרטון. גם לתיקונים במודעה כזו: "המוזיקה חזקה", "השנייה הזו משעממת", "הטקסט לא מסונכרן", "תעשה עוד גרסה".

Works with✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/chenmorr/animated-voiceover-ad/tree/main

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation


name: animated-voiceover-ad description: מודעת וידאו אנכית (9x16, ריל/סטורי לממומן במטא) שבנויה כולה בקוד ב-Remotion מעל קריינות של בעל העסק: טקסט קינטי על כל מילה, טלפון עם התראות, מונה תוצאות, חותמות, כרטיס הצעה ו-CTA, עם מוזיקה ואפקטים. להפעיל כשמבקשים "מודעת אנימציה", "סרטון אנימציה לממומן", "מודעה עם הקריינות שלי", "מודעה בלי לצלם את עצמי", או כששולחים הקלטת קול ומבקשים ממנה סרטון. גם לתיקונים במודעה כזו: "המוזיקה חזקה", "השנייה הזו משעממת", "הטקסט לא מסונכרן", "תעשה עוד גרסה".

מודעת אנימציה על קריינות

העיקרון

מה ששומעים = מה שרואים. הקריינות קובעת את הזמנים. מקליטים קודם, whisper נותן זמן לכל מילה, וכל טקסט, סצנה, התראה ואפקט נכנסים על מילה. בקוד אין מספרי פריימים: כותבים at: 'לקוחות' והזמן נשלף מ-public/words.json. הקלטה חדשה = npm run vo, והסרטון מתיישר לבד.

אף שנייה במסך לא עומדת. שנייה בלי תזוזה = הצופה גולל.

חוקי ברזל

  1. אתה לא שומע. בעל העסק הוא האוזן היחידה. כל בדיקת אודיו שלך היא מספרית (silencedetect, ffprobe, תמלול חוזר). אסור לכתוב "האודיו תקין" בלי לצטט פלט.
  2. קודם מנקים שקטים, אחר כך מתמללים. whisper טועה בזמנים ליד שקט. prep-vo.sh עושה את שניהם בסדר הנכון.
  3. אחרי שינוי באודיו מריצים npm run vo מחדש. בלי זה כל הסנכרון זז.
  4. הסרטון נגמר כשהקריינות נגמרת + 8 פריימים (DURATION ב-time.ts). render-all.sh מדפיס את האורך של כל קובץ מול הקריינות. אם הם שונים, משהו נחתך.
  5. טקסט רק בין y=260 ל-y=1570. מעל ומתחת אינסטגרם מכסה. validate() עוצר את הרינדור עם הסבר אם טקסט יוצא מהאזור או רחב מ-1000px.
  6. האפקטים מתחת לקול. קבועים ב-Ad.tsx: קריינות 1.15, מוזיקה 0.22, כל אפקט מוכפל ב-SFX = 0.38. "האפקטים חזקים" = משנים מספר אחד.
  7. stills לפני mp4. npm run check מרנדר 10 פריימים ל-out/stills. להסתכל על כולם (Read על ה-PNG) לפני רינדור מלא.
  8. רק תוכן אמיתי. מספרים, תשלומים והודעות של לקוחות: מה שקרה באמת. מותר להסתיר שמות, אסור להמציא תוצאות. גם בגלל מדיניות מטא וגם כי אנשים מריחים זיוף.
  9. עברית: הפונטים (Rubik, Heebo, וריאבליים, OFL) כבר בטמפלייט ונטענים עם delayRender. השורש ב-direction: rtl. מספרים בתוך תווית מקבלים direction: ltr.

התקנה ראשונה של פרויקט

cp -R ~/.claude/skills/animated-voiceover-ad/template ~/ads/<שם-המודעה>
cd ~/ads/<שם-המודעה>
npm install
npm run setup          # אפקטים ומוזיקה מ-Mixkit

צריך: Node 18+, ffmpeg, whisper-cli (brew install ffmpeg whisper-cpp) ומודל whisper ב-~/.whisper/models/ggml-large-v3-turbo.bin (אם חסר, words.mjs מדפיס פקודת הורדה).

ה-pipeline

שלבמה עושים
1. תסריטלפי references/script-formula.md. כל משפט ממופה מראש לסצנה. מראים לבעל העסק לפני שהוא מקליט.
2. הקלטהבטלפון או ב-QuickTime, קובץ אחד. טעה? עוצר שנייה ומתחיל את המשפט מחדש. אחר כך מוחקים את הטייק הרע (ראה references/audio.md).
3. ניקוי ותמלולnpm run vo -- recording.m4a. מדפיס את כל המילים עם זמנים. מראים לבעל העסק את התמלול ומתקנים מילים ש-whisper טעה בהן ישירות ב-public/words.json (רק את w).
4. בימויעורכים רק את src/Ad.tsx: KTS (טקסט קינטי), התראות, SCENES. כל זמן = מילה, ['עוד', 2] למופע שני. פירוט הקומפוננטות ב-references/scenes.md.
5. בדיקהnpm run check (tsc + stills). מסתכלים על כל still.
6. רינדורnpm run render. כל מוזיקה ב-MUSICS (Root.tsx) = קובץ נפרד ב-out/, לבדיקת A/B.
7. תיקוניםכל הערה של בעל העסק = שינוי קבוע אחד: מילה אחרת ב-at, ווליום, until. לא כותבים סצנה מחדש.

גרסאות לממומן

  • מוזיקה: כבר מובנה, 3 קומפוזיציות.
  • פתיחות שונות: 3 השניות הראשונות קובעות. מקליטים 2-3 הוקים שונים כקבצים נפרדים, מחברים כל אחד לגוף עם ffmpeg concat, מריצים npm run vo על כל חיבור ומרנדרים לתיקייה נפרדת. כל ה-Ad.tsx נשאר זהה כל עוד המילים בגוף זהות.
  • כתוביות מלאות: CAPTIONS = true ב-Ad.tsx. שורה אחת, נשברת לפי פיסוק. שימושי כי רוב הצפיות בממומן בלי סאונד.

תקלות מוכרות

תקלהפתרון
המילה "X" לא נמצאה בקריינותההודעה מציעה מילים קרובות. בעברית whisper מדביק או מפצל תחיליות (ו/ה/ל/ב). משתמשים במילה כמו שהיא ב-words.json.
הרינדור מראה קוד ישןbundle ישן ב-$TMPDIR/remotion-webpack-bundle-*. render-all.sh מוחק אותו.
TypeScript 7 מותקןRemotion צריך [email protected].
delayRender נתקע--timeout=180000 (כבר ב-render-all).
חותמת מתכווצת לפני שהיא נוחתתovershootClamping: true ב-spring שלה (כבר בפנים).
מילים נדבקות אחרי ניקוי שקטיםלהעלות stop_duration ב-prep-vo.sh ל-0.35.
שנייה "משעממת"להוסיף שם שורת KT, התראה או אפקט על המילה הזו. אף שנייה בלי אירוע.

הדמו שבטמפלייט

הטמפלייט מגיע עם קריינות דמו (קול TTS, public/vo.wav + public/words.json) ו-Ad.tsx שמסונכרן אליה, כדי שאפשר לראות הכל עובד לפני שמקליטים: npm install && npm run setup && npm run check. במודעה אמיתית: npm run vo -- recording.m4a דורס את שניהם, ואז כותבים את Ad.tsx מחדש לפי התסריט.

Related Skills