סרטון פרומו או הסבר אפשר לבנות כקוד ולרנדר מקומית, בלי עורך וידאו ובלי שירות בתשלום. אבל בעברית ובווינדוס יש מלכודות שמייצרות סרטון שחור או שקט בלי שום שגיאה. ה-Skill מלמד את Claude לבנות קומפוזיציה, לצלם אתר, להוסיף מוזיקה ולרנדר, ומפרט כל מלכודת שכבר נמצאה ואיך עוקפים אותה. זהו Skill ל-Claude: תיקייה עם קובץ SKILL.md, שנטענת אוטומטית כשהמשימה מתאימה לתיאור שבראש הקובץ. בניגוד לפרומפט שמדביקים בכל פעם מחדש, Skill מותקן פעם אחת וממשיך לעבוד לבד.
קוד ואיכות · וידאו · HyperFrames · פרומו · רינדור · עברית
---
name: video-render-local
description: "Produce a finished promo or explainer MP4 locally with HyperFrames, including Hebrew RTL compositions, site capture, music and rendering on Windows. Carries the confirmed silent-failure traps that produce a black or silent video. Use when making a product video, promo, explainer or motion graphic, or when a render fails or comes out black or silent."
---
# סרטון מוגמר, מקומית, על ווינדוס
הצטבר מהפקה אמיתית שהגיעה עד MP4. כל אזהרה כאן מתעדת כשל שקרה, לא כשל תיאורטי.
בווינדוס רוב התקלות הן ב-PATH, ב-`npx` ובבינאריים, והפתרונות מופיעים בהמשך.
## המלכודת שעולה הכי ביוקר
```html
<html lang="he" dir="rtl">
```
**מייצר וידאו שחור לגמרי.** התצוגה המקדימה תקינה, הסנאפשוט תקין, וה-MP4 ריק.
הכיוון עובר ל-CSS על שורש הקומפוזיציה:
```css
#root {
direction: rtl;
}
```
הלינטר של HyperFrames תופס את זה (`html_dir_attribute_breaks_render`). **תמיד להריץ `npm run check` לפני `npm run render`**, רנדור לוקח דקות, בדיקה לוקחת שניות.
## סדר העבודה
```bash
npx hyperframes skills update product-launch-video
npx hyperframes init "videos/<name>" --non-interactive --example=blank
# BRIEF.md נכתב מיד אחרי init. לפני כן init מסרב לתיקייה לא ריקה
```
אחר כך: לכידה, סטוריבורד, קומפוזיציה, `check`, `render`.
## לכידת אתר כבד
לכידה של אתר PWA עם service worker **נכשלת בברירת המחדל**:
```
✗ Capture failed: Runtime.evaluate timed out
```
זה אותו שורש שמקריס חלוניות דפדפן מוטמעות: מטמון מקדים של עשרות קבצים ו-WASM.
```bash
npx hyperframes capture "<URL>" -o ./capture \
--skip-vision --max-screenshots 8 \
--timeout 240000 --capture-budget 300000
```
`--timeout` הוא לטעינת העמוד, `--capture-budget` הוא לכל מה שאחריה. שניהם צריכים הארכה.
## חוזה הקומפוזיציה
```html
<div id="root" data-composition-id="main" data-start="0"
data-width="1080" data-height="1920" data-duration="87">
<section class="clip" data-start="0" data-duration="6">…</section>
</div>
<script>
const tl = gsap.timeline({ paused: true });
tl.from("#x", { opacity: 0, duration: 0.6 }, 0.2);
window.__timelines = window.__timelines || {};
window.__timelines["main"] = tl;
</script>
```
- `data-start` הוא מה שהופך אלמנט לקליפ. `class="clip"` הוא מוסכמה לפריסה
- הטיימליין **חייב** להיות `paused` ורשום על `window.__timelines`
- **אין `Math.random` ואין `Date.now`.** רנדור חייב לתת אותם פיקסלים בכל הרצה. לפיזור אקראי למראית עין, פונקציה עם זרע:
```js
const seeded = (i, salt) => {
const x = Math.sin(i * 12.9898 + salt * 78.233) * 43758.5453;
return x - Math.floor(x);
};
```
## מה שהלינטר יתפוס, ומה לעשות
| ממצא | המשמעות |
|---|---|
| `html_dir_attribute_breaks_render` | וידאו שחור. חובה לתקן |
| `content_overlap` על טקסט | בדרך כלל טקסט קטן שממילא לא נקרא. **למחוק את הטקסט**, לא לעקוף עם `data-layout-allow-occlusion` |
| `duplicate_media_discovery_risk` | אותו `src` פעמיים. לתת לכל שימוש קובץ משלו |
| ניגודיות מתחת ל-4.5 | לרוב על טקסט זעיר. אותו פתרון: להסיר |
**טקסט מתחת ל-20 פיקסלים בפריים של 1080 אינו מידע, הוא רעש.** פס כתום נקרא כבאנר פרסומת בלי המילה "פרסומת".
## רנדור
```bash
export PATH="$PWD/node_modules/ffmpeg-static:$PWD/node_modules/ffprobe-static/bin/win32/x64:$PATH"
npm run render
```
**בחזית, לא ברקע.** רנדור ברקע איבד את ה-PATH, החזיר `exit 0`, לא ייצר קובץ, ובגוף הפלט היה `✗ Render failed`.
87 שניות ב-1080×1920 לקחו כשתי דקות על 22 ליבות. תנועה מתמשכת מכפילה את זה, כי פחות פריימים ניתנים למיחזור.
## אודיו: מה עובד ומה לא
**שני מנגנוני התחברות נפרדים, וזה מבלבל:**
| | |
|---|---|
| `hyperframes auth login` | כותב ל-`~/.heygen`. **לא פותח קטלוג מוזיקה** |
| `heygen` CLI | נדרש ל-BGM, SFX ו-TTS דרך `media-use`. **לא רץ על ווינדוס בכלל** |
דף ההתקנה של HeyGen: macOS ולינוקס בלבד, ולווינדוס ממליצים WSL. אל תשלח משתמש לא טכני להתקין WSL.
**`hyperframes tts` הוא Kokoro מקומי, ואין בו עברית.** השפות: אנגלית, ספרדית, צרפתית, הינדי, איטלקית, פורטוגזית, יפנית, סינית.
### מוזיקה שכן עובדת
הריפו `Vincentwei1021/video-shotcraft` מגיע עם **חמישה קובצי BGM** ברישיון Mixkit חופשי מסחרית:
```bash
git clone --depth 1 https://github.com/Vincentwei1021/video-shotcraft.git
ls video-shotcraft/assets/audio/bgm/
```
**לקרוא את `assets/audio/ATTRIBUTION.md` לפני שימוש מסחרי.** אחד מהחמישה מסומן שם כדורש אימות, ולשאר יש URL מקור מאומת. בסרטון שמוכר, לא לוקחים את זה שמסומן.
לריפו הזה **אין TTS בכלל**. הוא פותר מוזיקה, לא קריינות.
### להשתיל אודיו
לא בקומפוזיציה אלא אחרי הרנדור. פשוט יותר ונותן שליטה מדויקת בפייד:
```bash
ffmpeg -i video.mp4 -i bgm.mp3 \
-filter_complex "[1:a]atrim=0:87,afade=t=in:st=0:d=1.5,afade=t=out:st=83:d=4,volume=0.72[a]" \
-map 0:v -map "[a]" -c:v copy -c:a aac -b:a 192k -shortest out.mp4
```
`-c:v copy` לא מקודד וידאו מחדש, ולכן זה לוקח שניות. עם קריינות, המוזיקה יורדת ל-`volume=0.25` בערך.
## סרטון שקט חייב תנועה מתמשכת
בלי קול, **פריים קפוא נקרא כתקלה**. כל סצנה סטטית מקבלת סחיפה איטית שממשיכה אחרי שהאנימציה הראשית נגמרה:
```js
tl.to("#grid", { scale: 1.06, duration: 8, ease: "none" }, 36);
tl.to("#mascot", { y: -22, duration: 8, ease: "sine.inOut" }, 79);
```
איטי מכדי לשים לב, מספיק כדי שהעין לא תעזוב.
## לאמת את התוצר, לא את הפלט
הרנדור מדווח הצלחה גם כשהתוכן שגוי. תמיד להסתכל:
```bash
ffprobe -v error -show_entries stream=codec_type,codec_name,duration \
-of csv=p=0 out.mp4
# גיליון מגע מכל הסצנות
ffmpeg -i out.mp4 -vf "select='eq(n\,90)+eq(n\,600)+eq(n\,1200)',\
scale=300:-1,tile=3x1" -frames:v 1 contact.png -y
# רמות שמע, כולל אימות שהפייד עובד
for t in 0 40 86; do ffmpeg -ss $t -t 1 -i out.mp4 -af volumedetect \
-vn -f null - 2>&1 | grep mean_volume; done
```
**ואז לפתוח את `contact.png` ולהסתכל.** כך התגלה שסצנה הראתה את דף הבית של המוצר במקום את הפלט שהכלי באמת מייצר, וזה היה שקר בסרטון שיווקי.
## דיוק לפני יופי
בסרטון שמוכר מוצר, כל טענה נבדקת מול הקוד לפני שהיא נכנסת:
- מספר כלים ← קובץ הנתונים
- מהירויות והגדרות ← הקוד עצמו
- מסלולי מנוי ← קובץ המחירים
- שם תכונה ← הממשק עצמו
סצנה שהראתה "עונים על שאלות ומקבלים אתר" הייתה שקר: הכלי מייצר **פרומפט**, ומי שבונה את האתר הוא כלי אחר. התיקון גם דייק וגם הסביר טוב יותר.
בקופי עברי: **בלי מקף ארוך.** `grep` לפני מסירה.
כליקס לא הצליח להיטען
נסו קודם לרענן את העמוד. אם בדיוק עלתה גרסה חדשה, רענון פותר את זה מיד.
אם הרענון לא עזר, ייתכן שהדפדפן ישן מדי: כליקס מריץ את הכלים על המכשיר שלכם ולא בשרת, ולכן הוא זקוק לדפדפן מ-2022 ומעלה. מה עושים: לעדכן את Chrome או את Firefox, ולפתוח שוב את klixtools.com.