# פקודות מדיה וקול

> החלפת קולות, צריבת כתוביות, שכבות, עיבוד אודיו, תכנון עריכות והידוק פרקי פודקאסט עם הפקודות voice, media, audio ו-edit של ה-CLI של Nodaro.

Source: https://nodaro.ai/he/docs/developers/cli/media-commands

**פקודות המדיה והקול** של ה-CLI של Nodaro עובדות ישירות על אודיו, וידאו ותמונות. הקבוצה `voice` מחליפה קולות ברצועות ומעצבת קולות, הקבוצה `media` מייבאת, מקצצת, מוסיפה כתוביות ומרכיבה מדיה, הקבוצה `audio` מעבדת ומתמללת אודיו והקבוצה `edit` מתכננת ומחילה עריכות לפודקאסטים ולסרטונים ארוכים. כל פקודה מריצה את אותו מנוע כמו הרכיב המקביל בעורך.

כל פקודה שמתחילה משימה מקבלת את `--json`, את `--watch` כדי לחכות לתוצאה ואת `--poll-interval <ms>` כדי לקבוע כל כמה אלפיות שנייה לבדוק את הסטטוס. ראו את הדף [פלט וקודי יציאה](https://nodaro.ai/docs/developers/cli/output).

## קול
```bash
nodaro voice list [--clones] [--json]
nodaro voice changer --voice <id> --audio <url>|--video <url> [--model <id>] [--stability <0..1>] [--similarity <0..1>] [--style <0..1>] [--use-speaker-boost] [--seed <n>] [--remove-background-noise] [--watch] [--poll-interval <ms>] [--json]
nodaro voice recast --audio <url>|--video <url> --voices <v1,v2,...>|--voices-json <json> [--model <id>] [--output video|stems] [--analysis-json <json>|--analysis-file <path>] [--no-preserve-background] [--separation-quality fast|best] [--music-volume-mode match|normalize|manual] [--music-volume <0-200>] [--remove-background-noise] [--voice-fx <preset>] [--voice-fx-mix <0-100>] [--voice-fx-delay <20-2000>] [--voice-fx-decay <0-1>] [--watch] [--poll-interval <ms>] [--json]
nodaro voice analyze --audio <url>|--video <url> [--separation-quality fast|best] [--suggest-title] [--watch] [--poll-interval <ms>] [--json]
nodaro voice export --source <videoUrl> --tracks-json <json>|--tracks-file <path> [--voice-fx <preset>] [--voice-fx-mix <0-100>] [--voice-fx-delay <20-2000>] [--voice-fx-decay <0-1>] [--watch] [--poll-interval <ms>] [--json]
nodaro voice design --text <line> --description <desc> [--model <id>] [--loudness <-1..1>] [--guidance-scale <0-100>] [--seed <n>] [--quality <n>] [--enhance] [--user-prompt <text>] [--watch] [--poll-interval <ms>] [--json]
nodaro voice remix --text <text> --description <desc> [--user-prompt <text>] [--watch] [--poll-interval <ms>] [--json]
nodaro voice dub --audio <url> --target-language <code> [--source-language <code>] [--num-speakers <1-20>] [--disable-voice-cloning] [--drop-background-audio] [--watch] [--poll-interval <ms>] [--json]
nodaro voice clones list [--json]
nodaro voice clones delete <id> [--json]
```

| פקודה | מה היא עושה |
| --- | --- |
| `voice list` | מציגה את הקולות המוכנים מראש, או את שכפולי הקול שלכם עם `--clones`. את השמות או את המזהים שלהם מעבירים ב-`--voice` וב-`--voices`. |
| `voice changer` | נותנת קול אחר לרצועת אודיו אחת או לסרטון אחד עם דיבור, בקול יחיד, כמו רכיב [משנה קול](https://nodaro.ai/docs/nodes/audio/voice-changer). הפקודה `voice change` זהה לה. |
| `voice recast` | מחליפה בבת אחת את הקולות של כל הדוברים בהקלטה, כמו רכיב [משנה קול Pro](https://nodaro.ai/docs/nodes/audio/voice-changer-pro). הפקודה `voice pro` זהה לה. |
| `voice analyze` | מזהה את הדוברים בלי להחליף קולות, ומדפיסה את הרשימה עם `--watch`. ב-Nodaro Cloud בלבד. |
| `voice export` | מרנדרת את הסרטון הסופי ממיקס של רצועות. ב-Nodaro Cloud בלבד. |
| `voice design` | מעצבת קול סינתטי חדש מתיאור כתוב, כמו רכיב [עיצוב קול](https://nodaro.ai/docs/nodes/audio/voice-design). |
| `voice remix` | מקריאה טקסט בקול שתיארתם, בלי שכפול, כמו רכיב [רמיקס קול](https://nodaro.ai/docs/nodes/audio/voice-remix). |
| `voice dub` | מדבבת הקלטה לשפה אחרת ושומרת על הקול של כל דובר, כמו רכיב [דיבוב](https://nodaro.ai/docs/nodes/audio/dubbing). |
| `voice clones` | מציגה ומוחקת שכפולי קול שנוצרו לפני שהשכפול הוצא משימוש. |

### החלפת הקולות של כמה דוברים
הפקודה `voice recast` רצה ב-Nodaro Cloud. התקנה באירוח עצמי מריצה אותה דרך ה[חיבור ל-Nodaro Cloud](https://nodaro.ai/docs/self-hosting/cloud-connect) שלה.

- הדגל `--voices` ממפה קולות לדוברים לפי הסדר שבו Nodaro מזהה אותם. המילה `keep` משאירה לדובר את הקול המקורי שלו, כמו ב-`--voices Rachel,keep,Aria`.
- הדגל `--voices-json` מקבל במקום זאת את המערך הגולמי של ה-SDK: מזהי קולות, אובייקט הגדרות לכל קול או `null` לדובר שנשאר עם הקול המקורי.
- הדגל `--output stems` מחזיר רצועה יבשה אחת לכל דובר, למיקס אינטראקטיבי, במקום סרטון גמור. את המיקס מרנדרים עם `voice export`.
- הדגל `--analysis-file` משתמש שוב בתוצאה שמורה של `voice analyze`, כך שהדוברים לא מזוהים שוב.

### החלפת קולות אינטראקטיבית
בדרך של שלב אחד, הפקודה `voice recast` מרנדרת סרטון גמור בקריאה אחת. בדרך של שלושה שלבים אפשר לבדוק קודם את הדוברים ולערוך מיקס של התוצאה לפני שמרנדרים אותה:

```bash
# 1. Detect the speakers. Save the job's output_data for step 2.
nodaro voice analyze --video https://example.com/panel.mp4 --watch --json > analyze.json
jq .output_data analyze.json > analysis.json

# 2. Recast to dry stems, reusing the analysis (no second detection)
nodaro voice recast --video https://example.com/panel.mp4 --voices Rachel,keep,Aria \
  --analysis-file analysis.json --output stems --watch

# 3. Set the level and mute of each track, then render
nodaro voice export --source https://example.com/panel.mp4 --tracks-file mix.json \
  --voice-fx hall --voice-fx-mix 25 --watch
```

בשלב 3, כל רצועה ב-`mix.json` נלקחת מהסטמים של שלב 2, והיא אובייקט עם `url`, עם `gain` מ-0 עד 200, עם השדה הבוליאני `muted` ועם `kind` אופציונלי. הייצוא מעתיק את זרם הווידאו בלי שינוי, והזרם אף פעם לא מקודד מחדש.

## מדיה
```bash
nodaro media download <url> [--max-height <px>] [--section <a-b>] [--watch] [--json]
nodaro media metadata <url> [--json]
nodaro media trim-video --video <url> --start <sec> --end <sec>|--keep-first <sec>|--keep-last <sec> [--watch] [--poll-interval <ms>] [--json]
nodaro media trim-audio --video <url>|--audio <url> [--start <sec>] [--end <sec>] [--format mp3|wav|aac] [--watch] [--poll-interval <ms>] [--json]
nodaro media split-media --video <url>|--audio <url> --chunk-duration <sec> [--min-part-duration <sec>] [--format mp3|wav|aac] [--watch] [--poll-interval <ms>] [--json]
nodaro media add-captions <videoUrl> [options, see below]
nodaro media still-to-video --image <url> --audio <url> [--motion none|zoom-in|zoom-out|pan-left|pan-right|ken-burns] [--intensity <1-10>] [--resolution 720p|1080p|4K] [--aspect-ratio <W:H>] [--fps 24|30] [--fit cover|contain] [--pad-color <hex>] [--watch] [--poll-interval <ms>] [--json]
nodaro media slideshow --images <url...> [--audio <url>] [--durations "10,auto,auto"] [--per-image <sec>] [--transition <id>] [--transition-duration <sec>] [--motion none|zoom-in|zoom-out|ken-burns|alternate] [--intensity <1-10>] [--resolution 720p|1080p|4K] [--aspect-ratio <W:H>] [--fps 24|30] [--fit cover|contain] [--pad-color <hex>] [--watch] [--json]
nodaro media collage <imageUrls...> [--sizes <0-3,...>] [--numbered] [--label <text>...] [--badge-position top-left|top-right] [--layout smart|grid] [--resolution 2K|4K] [--aspect-ratio <W:H>] [--gap <px>] [--background-color <hex>] [--watch] [--poll-interval <ms>] [--json]
nodaro media overlay <imageUrl> [layerUrls...] [--layers-file <path>] [--anchor <anchor>] [--x <%>] [--y <%>] [--width <%>] [--opacity <0-1>] [--platform <id>...] [--qr-text <text>] [--mask-mode none|layers|around|outside] [--mask-spread <px>] [--canvas <WxH>] [--base-fit contain|cover] [--background-color <hex>] [--output-format png|jpg|webp] [--watch] [--poll-interval <ms>] [--json]
nodaro media overlay-placement <imageUrl> [--intent <text>] [--aspect <ratio>] [--safe-area <x,y,w,h>] [--json]
nodaro media video-overlay <videoUrl> [layerUrls...] [--at <start[-end]>...] [--preset card|corner-badge|full-frame] [--corner top-left|top-right|bottom-left|bottom-right] [--layers-file <path>] [--aspect 16:9|9:16|1:1|4:5] [--base-fit cover|contain] [--background-color <hex>] [--watch] [--poll-interval <ms>] [--json]
nodaro media generate-mask <imageUrl> <prompt> [--threshold <n>] [--watch] [--poll-interval <ms>] [--json]
nodaro media video-mask <videoUrl> <prompt> [--threshold <n>] [--model sam-3.1|sam-3] [--hold-last-mask] [--min-subject-height <pct>] [--max-subject-height <pct>] [--zone <L,R,T,B>] [--per-shot] [--redetect-every <sec>] [--watch] [--poll-interval <ms>] [--json]
nodaro media mask-composite <foregroundUrl> <backgroundUrl> <maskUrl> [--invert] [--feather <px>] [--grow <px>] [--background-fit cover|contain|stretch] [--audio foreground|background|mix|none] [--watch] [--poll-interval <ms>] [--json]
nodaro media mask-composite <backgroundUrl> <maskUrl> --fill pixelate|blur [--pixel-size-pct <pct>] [--blur-strength-pct <pct>] [--invert] [--feather <px>] [--grow <px>] [--watch] [--json]
nodaro media save <url> [--filename <name>] [--type image|video|audio] [--watch] [--poll-interval <ms>] [--json]
```

| פקודה | מה היא עושה |
| --- | --- |
| `media download` | מייבאת לאחסון שלכם את הסרטון שמאחורי קישור. הדגל `--section` מביא טווח זמן אחד, בשניות. הדגל `--watch` מציג את ההתקדמות בזמן אמת, ואין משימה שצריך לבדוק את הסטטוס שלה אחר כך. |
| `media metadata` | קוראת את האורך, את הממדים ואת הכותרת של קובץ מדיה לפי הכתובת שלו, בלי להוריד אותו. |
| `media trim-video` | מקצצת סרטון לפי זמן התחלה וזמן סיום, או משאירה את השניות הראשונות או האחרונות שלו. |
| `media trim-audio` | מקצצת את האודיו של סרטון או של קובץ אודיו, ושומרת אותו כ-MP3, WAV או AAC. |
| `media split-media` | חותכת סרטון, קובץ אודיו או את שניהם לחלקים של `--chunk-duration` שניות לכל היותר ושל `--min-part-duration` שניות לפחות. ברירת המחדל של המינימום היא 4 שניות. החלקים נמצאים ב-`videoUrls` וב-`audioUrls` של המשימה. ראו את הדף [פיצול למקטעים](https://nodaro.ai/docs/nodes/video/split-into-chunks). |
| `media add-captions` | צורבת כתוביות בסרטון. ראו את הסעיף [כתוביות](#captions). |
| `media still-to-video` | הופכת תמונה נייחת אחת וקובץ אודיו אחד לקובץ MP4, תמורת 0 קרדיטים. הסרטון ארוך בדיוק כמו האודיו, ולכן אין דגל שקובע את האורך שלו. הדגל `--motion` מנפיש את התמונה. |
| `media slideshow` | הופכת בין 2 ל-100 תמונות, עם אודיו אופציונלי, למצגת MP4, תמורת 0 קרדיטים. |
| `media collage` | מסדרת בין 2 ל-30 תמונות בתמונה גדולה אחת. |
| `media overlay` | מציבה עד 12 שכבות על תמונת בסיס, בדיוק ברמת הפיקסל, בלי AI. |
| `media overlay-placement` | שואלת מודל ראייה איפה למקם שכבה אחת. |
| `media video-overlay` | מציבה בין 1 ל-20 שכבות תמונה מתוזמנות מעל סרטון, בלי AI, תמורת 22 קרדיטים. |
| `media generate-mask` | מוצאת בתמונה נושא שמתואר בטקסט, ומחזירה תמונת מסכה בשחור־לבן, לבנה במקום שבו הנושא נמצא. הדגל `--threshold` מקבל ערך מ-0 עד 1, וברירת המחדל היא 0.3. המודל שרכיב יצירת מסכה משתמש בו היום מתעלם מהערך הזה, ולכן כדי לשנות את המסכה, שנו את הפרומפט. הפלט של המשימה כולל את `maskUrl`, המסכה, ואת `imageUrl`, המקור כפי שהוא. העבירו את שניהם לעריכת השלמה. הפקודה עולה 55 קרדיטים. ראו את הדף [יצירת מסכה](https://nodaro.ai/docs/nodes/image/generate-mask). |
| `media video-mask` | עוקבת לאורך סרטון אחרי נושא שמתואר בטקסט, ומחזירה סרטון מסכה בשחור־לבן, לבן במקום שבו הנושא נמצא. SAM 3.1 הוא ברירת המחדל, ו-`--model sam-3` עולה חצי. הדגל `--threshold` מקבל ערך מ-0.05 עד 0.95, וברירת המחדל היא 0.5. ערך נמוך יותר מוצא יותר. הדגל `--hold-last-mask` משאיר את המסכה האחרונה בפריימים שבהם הנושא אובד, לכל היותר שנייה אחת. הדגל `--min-subject-height` משמיט נושאים שהגובה שלהם נמוך מהאחוז הזה מגובה הפריים, והדגל `--max-subject-height` משמיט את אלה שגבוהים ממנו. הדגל `--zone 10,10,5,5` משאיר רק את הנושאים שהמרכז שלהם נמצא בתוך השוליים האלה משמאל, מימין, מלמעלה ומלמטה, מ-0% עד 49% כל אחד. הדגל `--per-shot` מוצא קודם את החיתוכים בין הסצנות, ומזהה את הנושא מחדש בכל שוט. הדגל `--redetect-every`, עם ערך מ-1 עד 10 (0, ברירת המחדל, פירושו כבוי), מזהה את הנושא מחדש גם כל מספר כזה של שניות, ועם `--per-shot` עושה זאת בתוך כל שוט. כך נתפס גם מי שנכנס לפריים או מסתובב למצלמה באמצע שוט. ההרצה איטית יותר, והמחיר לא משתנה. ראו את הדף [מסכת וידאו](https://nodaro.ai/docs/nodes/video/video-mask). |
| `media mask-composite` | מציבה את החזית מעל הרקע דרך המסכה, כשהלבן מסמן את החזית. הפקודה עולה 11 קרדיטים לכל 5 שניות של התוצאה, או חלק מהן. הדגל `--feather` מקבל ערך מ-0 עד 20 פיקסלים, והדגל `--grow` מ-`-10` עד 10. עם `--fill pixelate` או `--fill blur`, המסכה מתמלאת ברקע עצמו, ולכן הפקודה מקבלת שתי כתובות, של הרקע ושל המסכה, והתוצאה נקבעת לפי הרקע. הדגל `--pixel-size-pct` מקבל ערך מ-0.2 עד 10, עם ברירת מחדל של 1.25, והדגל `--blur-strength-pct` מ-0.1 עד 5, עם ברירת מחדל של 2. ראו את הדף [שילוב לפי מסכה](https://nodaro.ai/docs/nodes/video/mask-composite). |
| `media save` | שומרת באחסון שלכם קובץ מדיה לפי הכתובת שלו, כתמונה, כסרטון או כקובץ אודיו. |

### מצגות
עם אודיו, האודיו קובע את אורך המצגת. אורכים שקבעתם עם `--durations` מותאמים באופן יחסי, וה-CLI מודיע לכם על כך. בלי אודיו, המצגת שקטה, והאורך שלה הוא מספר התמונות כפול `--per-image`.

### קולאז׳ים
- הדגל `--sizes` נותן לכל תמונה רמז לגודל יחסי, לפי סדר התמונות: הערך `0` פירושו אוטומטי, `1` גדול (רחב בערך פי שניים), `2` בינוני ו-`3` קטן (בערך בחצי הרוחב). רמזי הגודל עובדים רק בפריסה החכמה.
- הדגל `--numbered` מטביע מספר סידורי, החל מ-1, בפינה של כל תמונה, לסטוריבורדים.
- הדגל `--badge-position` קובע את הפינה הזו: `top-left`, ברירת המחדל, או `top-right`. הוא קובע גם את המיקום של התוויות.
- הדגל `--label` מוסיף כיתוב אחרי המספר. חזרו עליו פעם אחת לכל תמונה, לפי הסדר; ערך ריק, `""`, מדלג על תמונה אחת.

### שכבות על תמונה
- כתובות של תמונות שמופיעות אחרי תמונת הבסיס הן שכבות תמונה. כולן חולקות את אותם `--anchor`, `--x`, `--y`, `--width` ו-`--opacity`, הגדרות משותפות שמתאימות לסימן מים.
- הדגל `--layers-file` מקבל במקום זאת את מערך ה-JSON המלא של השכבות: אפשרויות לכל שכבה, וגם שכבות מסוג טקסט, קוד QR וצורה.
- המיקום נמדד באחוזים מתמונת הבסיס, ולכן אותה פקודה מתאימה גם לתצוגה מקדימה ב-1K וגם לרינדור ב-4K.
- הדגל `--platform`, שאפשר לחזור עליו, מרנדר את התמונה המשולבת גם בגודל של הפלטפורמה הזו. רינדור הבסיס עולה 11 קרדיטים, וכל פלטפורמה מוסיפה למחיר. הפלט של המשימה מפרט את הרינדורים הנוספים ב-`variants`.
- הפקודה `overlay-placement` עונה באותן יחידות של אחוזים: נקודת עיגון, `x`, `y`, `width` ונימוק בשורה אחת. היא עונה מיד, בלי משימה שצריך לבדוק את הסטטוס שלה, ועולה כמו קריאה אחת מתמונה לטקסט.

### שכבות על וידאו
- תנו `--at` אחד לכל כתובת של תמונה, לפי הסדר. הערך `3` פירושו מ-3 שניות ועד הסוף, והערך `1.2-2.6` פירושו מ-1.2 עד 2.6 שניות.
- הדגלים `--preset` ו-`--corner` חלים על כל שכבת תמונה שניתנה ככתובת.
- הדגל `--layers-file` מקבל במקום זאת את מערך השכבות המלא, עם תיבה, אטימות, אנימציה וסדר שכבות לכל שכבה.
- הדגלים `--base-fit` ו-`--background-color` דורשים את `--aspect`.
- האודיו של סרטון הבסיס נשמר בלי שינוי.

אפשרויות השכבות מתוארות בדף של רכיב [שכבה על וידאו](https://nodaro.ai/docs/nodes/video/video-overlay).

## כתוביות
```bash
nodaro media add-captions <videoUrl> [--text <text>] [--captions-file <file.json>] [--style subtitle|word-highlight|karaoke|tiktok-words|word-pop|bouncy] [--look outline|clean] [--position bottom|top|center] [--position-y <pct>] [--font-size <px>] [--font-family <name>] [--font-weight <100-900>] [--color <c>] [--background-color <c>] [--stroke-color <c>] [--stroke-width <px>] [--highlight-color <c>] [--uppercase|--no-uppercase] [--max-words-per-line <1-20>] [--animate|--no-animate] [--no-auto-transcribe] [--transcribe-provider elevenlabs-stt|incredibly-fast-whisper|whisper] [--segments-file <file.json>] [--watch] [--poll-interval <ms>] [--json]
```

ל-`media add-captions` יש שני סוגים של סגנונות, כמו לרכיב [הוספת כתוביות](https://nodaro.ai/docs/nodes/video/add-captions):

| סגנון | מה הוא מציג |
| --- | --- |
| `subtitle` | כתוביות סטטיות, בלי אנימציה של מילים. |
| `word-highlight`, `karaoke`, `tiktok-words`, `word-pop`, `bouncy` | כתוביות מונפשות, מילה אחר מילה. הסגנונות `word-highlight`, `karaoke` ו-`bouncy` מציגים שורה אחת בכל פעם, שנשארת על המסך. |

### הטקסט של הכתוביות
- בסגנון `subtitle`, הטקסט של `--text` נצרב כגוש קבוע אחד לכל הסרטון. תמלול אף פעם לא מחליף אותו. כדי ליצור כתוביות מהדיבור, השמיטו את `--text`.
- בסגנון מונפש, הטקסט של `--text` הוא רק חלופה: משתמשים בו כשהתמלול לא מחזיר כלום, או כשאתם מעבירים את `--no-auto-transcribe`.
- הדגל `--captions-file` מקבל קובץ עם מערך JSON של רשומות עם תזמון לכל מילה, `[{ text, startMs, endMs }]`, רשומה אחת לכל מילה בסגנונות המונפשים. השדה `words` בתוצאה של `nodaro audio transcribe` מתאים לפורמט הזה כמו שהוא; העבירו את הקובץ יחד עם `--no-auto-transcribe`.
- הדגל `--segments-file` נותן לטווחי זמן סגנון, מראה ומיקום משלהם. אסור שהטווחים יחפפו זה לזה.

### עיצוב
- דגלי העיצוב חלים גם על הסגנון `subtitle`: `--look`, `--font-family`, `--font-weight`, `--stroke-color`, `--stroke-width`, `--uppercase`, `--position-y` ו-`--max-words-per-line`. כתובית `subtitle` עם עיצוב מתומחרת במחיר של כתוביות מונפשות; כתובית `subtitle` פשוטה נשארת במחיר הנמוך יותר.
- הדגלים `--highlight-color` ו-`--animate` עובדים רק בסגנונות מונפשים. בסגנון `subtitle` הם נדחים.
- הדגל `--animate` מופעל כברירת מחדל. הדגל `--no-animate` עוצר את התנועה של כל מילה, ושומר על הקיבוץ ועל צבע המילה הנאמרת.
- בלי `--look`, הסגנונות המונפשים מרונדרים כ-`outline`, והסגנון `subtitle` מרונדר כ-`clean`.
- הדגל `--max-words-per-line` מגביל את מספר המילים בשורת כתובית אחת, או בקבוצה אחת של `tiktok-words`, מ-1 עד 20. גם רוחב הפריים, סופי משפטים והפסקות של 0.5 שנייה ומעלה שוברים שורות. מילה אחת או שתיים נותנות כתוביות קצרות וקולעות שנקראות מהר; כדי למלא את הרוחב, השמיטו את הדגל. בכתובית `subtitle` עם `--text`, הוא קובע רק את שבירת השורות, ואין לו השפעה על `word-pop`.
- רינדור מונפש או מעוצב שומר על קצב הפריימים של המקור, כמספר שלם בין 15 ל-60 פריימים לשנייה. מקור עם קצב פריימים משתנה, או מקור ארוך מאוד, מרונדר ב-30 פריימים לשנייה.

### מנוע התמלול
הדגל `--transcribe-provider` בוחר את המנוע שמתמלל את הדיבור. סגנון מונפש צריך תזמון לכל מילה, מ-`incredibly-fast-whisper`, ברירת המחדל, או מ-`elevenlabs-stt`. הסגנון `subtitle` צריך רק תזמון ברמת המשפט, ולכן גם המנוע `whisper` עובד בו.

## אודיו
```bash
nodaro audio separate --audio <url> [--mode vocal_instrumental|stems] [--quality auto|fast|best] [--watch] [--poll-interval <ms>] [--json]
nodaro audio isolate --audio <url> [--watch] [--poll-interval <ms>] [--json]
nodaro audio fx --audio <url> [--preset <preset>] [--mix <0-100>] [--delay <20-2000>] [--decay <0-1>] [--eq-low <db>] [--eq-high <db>] [--watch] [--poll-interval <ms>] [--json]
nodaro audio mix --audio <url> --audio <url> ... [--volumes <csv>] [--duck-under <index>] [--duck-amount <0-100>] [--watch] [--poll-interval <ms>] [--json]
nodaro audio adjust-volume --audio <url>|--video <url> [--volume <0-200>] [--normalize] [--fade-in <sec>] [--fade-out <sec>] [--watch] [--poll-interval <ms>] [--json]
nodaro audio pitch-tempo --audio <url>|--video <url> [--semitones <-12..12>] [--tempo <0.5-2>] [--no-preserve-formants] [--watch] [--poll-interval <ms>] [--json]
nodaro audio combine --segment <url[@a-b]> --segment ... [--watch] [--poll-interval <ms>] [--json]
nodaro audio transcribe --audio <url> [--provider elevenlabs-stt|incredibly-fast-whisper|whisper] [--language <code>] [--diarize] [--tag-audio-events] [--word-timestamps] [--watch] [--poll-interval <ms>] [--json]
```

| פקודה | מה היא עושה | רכיב |
| --- | --- | --- |
| `audio separate` | מפרידה את השירה מהאינסטרומנטל, או מפצלת לסטמים. | [הפרדת אודיו](https://nodaro.ai/docs/nodes/audio/audio-separation) |
| `audio isolate` | משאירה את הקול ומסירה את כל השאר. | [מחלץ קול](https://nodaro.ai/docs/nodes/audio/voice-extractor) |
| `audio fx` | מחילה ערכת אפקט, עם הגדרות של מיזוג, השהיה, דעיכה ואקולייזר. | [אפקטי אודיו](https://nodaro.ai/docs/nodes/audio/audio-fx) |
| `audio mix` | משלבת כמה רצועות במיקס אחד, עם עוצמה משלה לכל רצועה. הדגל `--duck-under` מנמיך את שאר הרצועות מתחת לרצועה אחת, שמצוינת לפי האינדקס שלה, כשהספירה מתחילה מ-0. הדגל `--duck-amount` קובע בכמה, וברירת המחדל היא 75. | [מיקס אודיו](https://nodaro.ai/docs/nodes/audio/mix-audio) |
| `audio adjust-volume` | משנה את העוצמה, מנרמלת ומוסיפה עמעום כניסה או עמעום יציאה. | [כוונון עוצמה](https://nodaro.ai/docs/nodes/audio/adjust-volume) |
| `audio pitch-tempo` | מזיזה את גובה הצליל בחצאי טונים, או משנה את הטמפו בלי לשנות את גובה הצליל. עם `--no-preserve-formants`, האופי של הקול משתנה יחד עם גובה הצליל. | [גובה צליל וטמפו](https://nodaro.ai/docs/nodes/audio/pitch-tempo) |
| `audio combine` | מאחדת מקטעים ברצף, אחד אחרי השני. הצורה `url@a-b` לוקחת טווח זמן אחד מקובץ. | [שילוב אודיו](https://nodaro.ai/docs/nodes/audio/combine-audio) |
| `audio transcribe` | הופכת דיבור לטקסט. | [תמלול](https://nodaro.ai/docs/nodes/audio/transcribe) |

אלה אבני הבניין שרכיב משנה קול Pro משלב, וכאן כל אחת מהן זמינה בנפרד.

### מנועי תמלול
| מנוע | תזמון לכל מילה | תמיכה נוספת |
| --- | --- | --- |
| `elevenlabs-stt` | תמיד | `--diarize` (מי מדבר מתי) ו-`--tag-audio-events` |
| `incredibly-fast-whisper` | עם `--word-timestamps` | |
| `whisper` | אין, רק מקטעים ברמת המשפט; הדגל `--word-timestamps` נדחה לפני שנגבים קרדיטים | |

כשמשמיטים את `--provider`, רץ המנוע `whisper`. ציינו מנוע בכל פעם שאתם צריכים תזמון לכל מילה.

ב-`output_data` של המשימה שהושלמה נמצאים `text`, `words` (רשומה אחת לכל מילה, באלפיות שנייה) ו-`json` (התמלול המנורמל, גם הוא באלפיות שנייה). רשימת `segments` ברמה העליונה, בשניות, קיימת רק עם `whisper` ועם `incredibly-fast-whisper`; המנוע `elevenlabs-stt` לא מחזיר אותה, ולכן השתמשו ב-`words`. לרינדור מונפש, העבירו את `words` ל-`media add-captions --captions-file`.

## עריכה
פקודות העריכה הן אבני בניין עריכתיות לפודקאסטים ולסרטונים ארוכים. הפקודה `edit tighten-episode` מריצה עריכה שלמה של פודקאסט בפקודה אחת.

```bash
nodaro edit silence-detect <audioUrl> [--threshold-db=-35] [--min-silence-ms <ms>] [--pad-ms <ms>] [--watch] [--poll-interval <ms>] [--json]
nodaro edit audio-sync (--source <[id=]url> ... | --sources-file <file.json>) [--reference <id>] [--watch] [--poll-interval <ms>] [--json]
nodaro edit apply-edl --edl <file.json> [--transcript <file.json>] [--source <url> ...] [--output video|audio] [--quality proxy|final] [--crossfade-ms <ms>] [--clip-key <inMs-outMs>] [--watch] [--poll-interval <ms>] [--json]
nodaro edit plan --mode tighten|clips|chapters|trailer --plan-tier economy|standard|premium --transcript <file.json> (--source <[id=]url[@audio|@video]> ... | --sources-file <file.json>) [--silence <file.json>] [--offsets <file.json>] [--transcript-source <id>] [--instructions <text>] [--style-guide <text>] [--count <n>] [--target-duration-sec <n>] [--target-aspect 16:9|9:16|1:1|4:5] [--platform <name>] [--watch] [--poll-interval <ms>] [--json]
nodaro edit switch-cameras --edl <file.json> --transcript <file.json> [--speaker-map <file.json>] [--speaker-names <file.json>] [--min-shot-ms <ms>] [--lead-ms <ms>] [--max-shot-ms <ms>] [--wide-every <n>] [--layout-hints] [--watch] [--poll-interval <ms>] [--json]
```

| פקודה | מה היא עושה | רכיב |
| --- | --- | --- |
| `edit silence-detect` | מוצאת את קטעי השקט בהקלטה. | [זיהוי שקט](https://nodaro.ai/docs/nodes/audio/silence-detect) |
| `edit audio-sync` | מיישרת בין 2 ל-6 הקלטות, אודיו או וידאו, של אותו אירוע. | [סנכרון אודיו](https://nodaro.ai/docs/nodes/audio/audio-sync) |
| `edit plan` | מתכננת עריכה מתוך תמלול: הידוק הקצב, חיתוך קליפים, סימון פרקים או חיתוך טריילר. | [תוכנית עריכה](https://nodaro.ai/docs/nodes/video/edit-plan) |
| `edit apply-edl` | מרנדרת רשימת עריכה (EDL) כסרטון או כקובץ אודיו. | [החלת רשימת עריכה](https://nodaro.ai/docs/nodes/video/apply-edl) |
| `edit switch-cameras` | מעבירה כל חיתוך בעריכה למצלמה של האדם שמדבר. התמלול צריך לכלול תוויות דוברים. | [מחליף מצלמות](https://nodaro.ai/docs/nodes/video/camera-switch) |
| `edit tighten-episode` | מהדקת הקלטה אחת לפרק מוגמר: תמלול, תכנון ורינדור, עם כתוביות, מוזיקה ומסגור לפי ההגדרות. | [הידוק פרק](https://nodaro.ai/docs/nodes/video/tighten-episode) |
| `edit continue-use-case` | ממשיכה הרצה של רכיב הידוק פרק כמשימה חדשה. | [הידוק פרק](https://nodaro.ai/docs/nodes/video/tighten-episode) |

הפקודה `edit audio-sync` נותנת להקלטות את השמות `source-1`, `source-2` וכן הלאה, אלא אם נותנים מזהה בצורה `id=url`. ב-`output_data.json` שלה נמצאים שלושה שדות:

- השדה `reference`: ההקלטה שההקלטות האחרות מיושרות לפיה. בוחרים אותה עם `--reference`.
- השדה `offsets`: רשומה אחת לכל הקלטה, עם `sourceId`, `offsetMs`, `confidence` ו-`driftMsPerHour`.
- השדה `notes`: הערות על היישור.

זמן בהקלטה מומר לזמן בהקלטת הייחוס כך: `referenceMs = sourceMs + offsetMs`.

הפקודה `edit apply-edl --quality proxy` מרנדרת תצוגה מקדימה לבדיקה: היא פרטית ומתומחרת בתעריף הנמוך של תצוגה מקדימה. עם `--quality final`, הפקודה מרנדרת את גרסת המסירה. הדגל `--clip-key` מציין את הקליפ שהרינדור חותך מתוכנית במצב קטעים, בצורה `<first inMs>-<last outMs>`. בתוצאה הוא מופיע ב-`output_data.clipKey`, לצד `output_data.quality`.

בהקלטה מכמה מצלמות, הפקודה `edit plan --offsets` מקבלת את ה-`output_data.json` של משימת `edit audio-sync` שרצה על אותם מזהי מקורות. התוכנית מחילה את ההיסט של כל מקור לפני שהתכנון מתחיל. מקור שלא נמדד, או שההתאמה שלו חלשה, נדחה; במקום זאת, קבעו את ה-`offsetMs` שלו ב-`--sources-file`. עריכה מכמה מצלמות מריצה את הפקודות האלה לפי הסדר:

1. הפקודה `audio transcribe --provider elevenlabs-stt --diarize`, לתמלול עם תוויות דוברים.
2. הפקודה `edit audio-sync`, למדידת ההיסטים.
3. הפקודה `edit plan --offsets`, לתכנון העריכה.
4. הפקודה `edit switch-cameras`, להעברת כל חיתוך למצלמה של הדובר.
5. הפקודה `edit apply-edl --quality proxy` לבדיקה, ואז `edit apply-edl --quality final` למסירה.

### הידוק של פרק שלם
```bash
nodaro edit tighten-episode --media <url> [--music <url>] [--output video|audio] [--framing 16:9|9:16|1:1|4:5 [--layout auto|single|side-by-side|stacked|grid|pip] [--framing-source auto|static|tracking]] [--no-captions] [--review] [--plan-tier economy|standard|premium] [--instructions <text>] [--watch] [--poll-interval <ms>] [--json]
nodaro edit continue-use-case <jobId> --mode from-failed|render-final [--edit <file.json>] [--type tighten-episode] [--idempotency-key <key>] [--watch] [--poll-interval <ms>] [--json]
```

הפקודה `edit tighten-episode` מקבלת הקלטה אחת, וידאו או אודיו, של עד 3 שעות. היא מתמללת את ההקלטה, מתכננת את החיתוך המהודק ומרנדרת אותו, ומוסיפה כתוביות, מוזיקה ומסגור לפי ההגדרות. הדגלים `--layout` ו-`--framing-source` עובדים רק עם `--framing`. עם `--framing-source static`, ברירת המחדל, הפריים מתחלק באופן שווה בין הדוברים. הערך `tracking` עוקב אחרי פנים עם רכיב מסגרות דוברים, שמשלמים עליו לכל 1,000 פריימים דגומים, או חלק מהם, והוא נדחה כשרכיב מסגרות דוברים לא זמין לכם. הערך `auto` עוקב אחרי פנים כל עוד רכיב מסגרות דוברים זמין לכם, ואחרת מחלק את הפריים באופן שווה. בהרצה, כל שלב עולה לפי התעריף שלו, ובנוסף יש עמלה קבועה לכל הרצה. הדגל `--review` עוצר בתצוגה מקדימה, כדי שאדם יבדוק אותה.

הפקודה `edit continue-use-case` ממשיכה הרצה של רכיב הידוק פרק כמשימה חדשה, באחד משני מצבים:

- המצב `from-failed` שומר את השלבים שהסתיימו ומריץ את השאר. העמלה משוריינת שוב, כי על העמלה של ההרצה שנכשלה קיבלתם החזר.
- המצב `render-final` מרנדר את הפרק באיכות מלאה אחרי תצוגה מקדימה של `--review`, עם ההגדרות של התצוגה המקדימה ובלי עמלה. הדגל `--edit` מקבל את העריכה שהבודק עשה בתוכנית, כקובץ EDL.

ההרצה ממשיכה בנתיב של סוג הרכיב שלה. הדגל `--type` מציין את הסוג. בלי `--type`, ה-CLI קורא את המשימה כדי לברר את הסוג שלה. אסימון בלי ההרשאה `jobs:read` ממשיך בנתיב של רכיב הידוק פרק.

כשדחייה מציינת משימה אחרת, ה-CLI מדפיס את הקוד ואת המשימה ההיא. הקוד `already_running` פירושו: בדקו את המצב של המשימה ההיא. הקוד `continuation_superseded` פירושו: המשיכו את המשימה ההיא במקום זאת. הקוד `render_final_already_rendered` פירושו: התוצאה של המשימה ההיא היא זו שצריך להשתמש בה. עם `--json`, הדחייה נכתבת לפלט הסטנדרטי בצורה `{ "error": { "code", "message" }, "jobId" }`, עם קוד היציאה 1.

```bash
nodaro edit tighten-episode --media https://cdn.example.com/episode-12.mp4 --framing 9:16 --review --watch
nodaro edit continue-use-case <jobId> --mode render-final --watch
```

## שאלות נפוצות

### איך מחליפים מה-CLI את הקולות של כמה דוברים בסרטון?

הריצו את הפקודה nodaro voice recast עם ‎--video ועם ‎--voices, קול אחד לכל דובר, לפי הסדר שבו הדוברים מזוהים. לדובר שנשאר עם הקול המקורי, כתבו keep, למשל ‎--voices Rachel,keep,Aria.

### איזה מנוע תמלול נותן תזמון לכל מילה?

בפקודה nodaro audio transcribe, המנוע elevenlabs-stt תמיד מחזיר תזמון לכל מילה, והמנוע incredibly-fast-whisper מחזיר אותו עם ‎--word-timestamps. המנוע whisper מחזיר רק מקטעים ברמת המשפט. כשמשמיטים את ‎--provider, רץ המנוע whisper, ולכן ציינו מנוע בכל פעם שאתם צריכים מילים.

### האם הפקודות still-to-video ו-slideshow עולות קרדיטים?

לא. הפקודות nodaro media still-to-video ו-nodaro media slideshow מרנדרות את הסרטון בלי שום מודל AI, ועולות 0 קרדיטים.

### איך מוסיפים לסרטון כתוביות עם מילים שתיקנתי בעצמי?

תמללו את האודיו במנוע שמחזיר תזמון לכל מילה, ערכו את המילים בקובץ ה-JSON ששמרתם, ואז העבירו את הקובץ לפקודה nodaro media add-captions עם ‎--captions-file ועם ‎--no-auto-transcribe.

### אילו פקודות מדיה דורשות Nodaro Cloud?

הפקודות voice analyze ו-voice export רצות ב-Nodaro Cloud בלבד. הפקודות voice recast, edit plan ו-edit switch-cameras רצות ב-Nodaro Cloud, והתקנה באירוח עצמי מריצה אותן דרך החיבור שלה ל-Nodaro Cloud.
