RYA · production mapcraftsound

Sound

Кто говорит — до сборки. Голос — из целого исходника петлички 32-bit float, уровень — по речи, варианты — на слух до рендера, музыка — настроение блока, тишина — приём. Мастер −14 LUFS.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

«Петли у нас пишутся на 32 bit float, и очень важно править именно исходник»Роман, 03.10.2026
SOURCE · 32-BIT FLOAT · PEAKS ABOVE 0 dBFS ARE FINE 0 dBFS Levelby speech −30 LUFS Cleanisolator + lav By earRoman chooses Master−14 LUFS · −1 dBTP v1 Orig v2 Soft 60 % v3 Clean v4 Warm · recipe C voice ladder: one piece at −16 LUFS, before render

Chain

Source → Speakers → Level → Clean → Compare → Assemble → Music & SFX → Master. Кто говорит и выбор голоса решаются до сборки — дальше ничего не угадываем.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

🎙
01

Source

целый TX##_MIC###_orig.wav · float 32 · 48 кГц; петличка под каждый клип

⇒ 01_Source_Sound✓ not _edit, not _timeline, not camera
🗣
02

Speakers

кто говорит: петлички, физика звука, отпечаток голоса, лица

⇒ words.json with roles✓ read-through check
📏
03

Level

speech_level: K-блоки, выбросы срезаны

⇒ f32 stem✓ speech −30 LUFS in
🧹
04

Clean

voice_isolate + живая петличка; DeepFilterNet — где нет исходника

⇒ raw · soft · clean · warm✓ offset ≤ 48 samples
👂
05

Compare

A/B на одном куске, одна громкость; выбор — умолчание канала

👤 Roman chooses⇒ sound.speech
✂️
06

Assemble

по сэмплам, стыки в тишине, слово и мысль до конца

⇒ dialog.wav✓ speech = list
🎵
07

Music & SFX

Epidemic по смыслу блока, стем без ударных, тишина на тяжёлом

⇒ −20…−22 dB to speech
📦
08

Master

−14 ±1 LUFS, пик ≤ −1 dBTP, LRA ≤ 8

⇒ master WAV✓ sync ≤ 20–40 ms
machineRoman decidesST1 approach code · opens the card

Approaches

Голос, кто говорит, края реплик, сравнение, тишина, музыка и уровни — подходы с примерами из фильмов.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

32-bitfloat · whole _orig.wav
SO1Soundcanon

Voice from the lav source, voices on one line

  • речь — из петличек 32-bit float, а не со звука камеры: YTCH14 — 11 файлов
  • голоса разных людей и сцен — к одной громкости (v4, просьба Романа)
  • кто говорит — по петличке, а не по ТЗ: фраза «её голосом» для тизера оказалась куратора из комнаты
  • перед работой — ffprobe sample_fmt: съёмка YTFP S1 — 24 бит; сведённые TX*_timeline.wav бывают короче сцены — брать из _orig
YTUVI01 build_v5.py audio · 999_extra/bin/voice_isolate · YTUVI01 src_master.py enh (editor Adobe Enhance tracks found by waveform; check windows 8+ dB louder) · 05_editing/0514_teaser/master.py (voice.lav, voice.lav_t0, voice_level) · _tools/loud_pieces.py · 05_editing/0511_doc_cut/voices.py measure|plan · ffprobe codec_name = pcm_f32le
YTCH14 · Звук: чиним исходник · шортсы YTUVI01 v5 16.10: голос с петличек исходников цепочкой фильма + изолятор, а не звук готового фильма; речь над шумом: студия 50 дБ (было 36), SSEF 33, машина 29 · тизеры и трейлер YTAgeFree S3 06.10: каждый кусок к −20 LUFS, мастер −14 («звук выравнял») · YTUAE02 15.10: Анжела у камеры громче на 8–11 дБ — выровнено · YTFP02 04.10: исходник 24 бит, не float
±1–7 sthe shared transcript lies
SO2Soundcanon

Line edges by sound, checked on the assembly

  • время слов общей расшифровки врёт на 1–7 с: кусок расшифровывается заново, край — по огибающей речи
  • звук режется точнее кадра
  • сверка Whisper-ом готовой сборки: 67 из 79 реплик слово в слово, 12 разобраны
  • текст у края выравнивают по звуку микрофона куска (CTC MMS_FA): рез — в тишине до слова и в первой настоящей паузе после
  • хвост — двумя порогами: пол + 10 дБ находит слово, пол + 5 дБ — где хвост ушёл в тишину («license» без «s»)
  • повторное распознавание дописывает срезанное слово — мерило края выравнивание и огибающая, а не Whisper
05_editing/0513_lesson_cut/lc.py (qc_seams, qc_src): pauses > 0.9 s outside screen windows, lone short sounds at seams, repeated phrase within 2 min · 05_editing/0511_story_cut/sc_align.py edges|show|audit (MMS_FA) · 05_editing/0511_doc_cut/align.py export|memex|merge, story.py resolve · 05_editing/0510_headless_cut/solo.py verify|letters|edges · 05_editing/0514_teaser/verify.py, edges_pick.py · 999_extra/forced_align/forced_align_words.py (environment/.venv_whisperx)
YTCH14 · Правила: звук и рез · уроки YTUVIE01 с 13.10: скан швов собранной речи · YTCR04 02.10: 0 резов вне паузы из 458 краёв (до того ~45 кусков из 229 теряли слово) · YTCG39 05.10: 41 плохой край из 122 · YTEVO03 27.09: ~40 % краёв плохие → 183 по звуку · YTEVO02 v6: обрывы на 11:29 и 15:07 · YTAgeFree16 12.10: verify поймал чужой отрывок
voice
Katyaauthor: questionKatyaKatyaKatyaMasha, curator
music
Safe and Sound · Anna LandstSafe and Sound · Anna LandstCovered in Snow · Martin Lan
screens
chapter question cardher words
8:208:409:009:20
8:15–9:20 · music is silent under I cried and I'm afraid to lose the children; on the second, only her words on screen
SO3Soundcanon

Silence as a device

  • самые тяжёлые слова — без музыки: «Я ревела», «Боюсь детей потерять»
  • «Я ревела» — ещё и без экрана: только её голос
  • первая фраза фильма — в тишине; музыка обрывается перед тяжёлой фразой, а не после неё
  • в конце не обрывать в полную тишину (P4.11); под каждым планом — живой звук или музыка: план без звука Роман отмечал 5 раз
999_extra/ytfp02_music_preview.py · 05_editing/0511_story_cut/sc_sound.py
YTCH14 v3: 7 мест тишины на 16 кусков · YTCR04 v7.1 03.10: письмо и «90 %» в тишине удлинённой паузы · YTFP02 04.10: крючок «Он глухой» · YTEVO03 v7–v10: пик фразы и вдох после него — в тишине
−20 dBmusic under speech
SO4Soundcanon

Music per chapter: a track by meaning

  • кусок музыки — глава или её поворот; энергия 0–4 по главам
  • трек — по смыслу и замерам: тревога — под рассказ о побеге, гитара — под главу, где она «раньше детям играла»
  • подъём — на «больших» словах: «сотни людей по чуть-чуть поверили в тебя»
  • под речью — не громче −20 дБ к речи
  • блок описывают словами по его тексту (теги mood с весами), а не по жанру канала; по 3 трека на главу, трек — один раз на фильм
  • 13 похожих треков делают главы одинаковыми — разные треки под смысл
Epidemic MCP SearchRecordings, EditRecording · 05_editing/0511_story_cut/sc_music.py plan · 999_extra/story_map/story_music_fit.py --project P · 05_editing/0510_autocut/audio_music.py
YTCH14 v3 · все 16 кусков — вкладка «Кейс» · Музыка и звуки · YTCR04 v7.2: 7 треков по главам, 21 блок с треком, входом и энергией · YTUVI02 v7 22.10: свой трек на каждую главу ровно под её длину · YTCH10 05.10: 13 фрагментов · YTEVO03 · YTEVO02 02.10: «Музыка нужна»
tick · whooshsound on a screen event
SO5Soundlive

Sound on screen events

  • звуки на событиях (цифра встала, экран сменился) подбирают и показывают вместе с музыкой
  • звук на заставки глав YTCH14 — ждёт решения Романа
  • звук встаёт своим пиком или атакой на кадр события (sync_ms в наборе), а не началом файла; переходы — к доле ±80 мс
  • громкость — по слышимости над фоном в главных полосах; шина звуков проходит тот же вырез под голос
  • звук на слове глушит слово (ΔSII −0,12); мягкий низкий вуш под речью не слышен — нужен яркий свип выше 4 кГц
  • плотность: два звука ближе 0,35 с — второй не ставится; при 35–50 экранах min_interval_s 45 с (≈ раз в 70 с)
05_editing/0510_headless_cut/sfx_events.py (job key music.sfx_events) · 05_editing/0513_lesson_cut/lc.py sfx (YTs/YTUVIE/sfx_kit.json) · 05_editing/0511_story_cut/sc_music.py plan (chapter and map stings) · Epidemic MCP SearchSoundEffects -> DownloadSoundEffect
Звуки, которые показываем · YTCR04 v6–v8: удар на заставке каждой главы, свист на входе в карту · YTLAB01: stinger на плашках глав · уроки YTUVIE с 05.10 (1.1.1 — 110 событий) · RSC004 06.10: 147 событий по кадрам · YTUVI02 v6–v7 · YTAgeFree16 v4: 4 новых звука · YTTRBM03 v6 25.10: штамп на ответе блица
…|cuta swallowed syllable = a fix
SO6Soundcanon

Never cut early: finish the word and the thought

  • все края tight / dip — на слух по петличке говорящего; съеден слог — край по тишине
  • фраза перед вырезом закончена, после — с начала; вопрос — с ответом; вопрос ведущей — до последнего слова
  • острова звука в вырезанных паузах — Whisper по каждому (islands.py)
  • «изменили|сь», «конфиденциальност|ью» — край съел слог
  • край ищут между соседними словами: тишина, иначе провал глубже 14 дБ; нет ни того ни другого — подрезка отменяется, слова остаются
  • чужая реплика внутри единицы: кусок кончается концом мысли того же человека
05_editing/0510_headless_cut/islands.py --job J --edl edl_audio_<tag>.json (via 999_extra/mlx_queue.py) · 05_editing/0510_headless_cut/edl.py audio (rejected trims) · 05_editing/0511_story_cut/sc_qc.py joins (listen to the seams)
25.10 · Tanya · YTTRBM03 · YTTRBM03 v2: ≈ 15 правок из 37 — «рано обрезал» · YTAZ09 v3 04.08: на 0:13 отрезано «не» → «Надо бороться с самим человеком» · YTTRBM03 v3 25.10: сжатие паузы съело «Вот.» (P2.28), найдено ещё 12 швов · YTTRBM03 v1: 19 из 54 подрезок отменены — нет паузы · YTEVO02 02.10: 19 краёв на прослушивание · трейлер YTCG39 07.10: 5 резов голоса · YTEVO02 02.10: реплика Дарьи между фразами Анастасии
−54 → −20speech dBFS: peak → speech
SO7Soundcanon

Level by speech, not by peak

  • речь к −30 LUFS на входе изолятора; копии для распознавания — RMS −20 dBFS
  • в float пик выше 0 dBFS — не брак: один удар по капсюлю задаёт пик всему файлу
  • нормировка «пик → −1 dBFS»: речь уходит на −54 dBFS, pyannote слышит ноль
  • копия для распознавания: gain = −20 − RMS в пределах −6…+20 дБ, alimiter limit 0,85 · attack 1 · level=disabled
  • гейт: рабочая копия не тише исходника; симптом ошибки — диаризация пустая при живом тексте
17_audio/standard.py (gates) · 01_prepare/0120_day_ingest/s2_audio.py · 01_prepare/0121_studio_day/audio.py · 05_editing/0512_reversion/inserts.py target|probe|audio
03.10 · Roman · stage canon · YTEVO03: пики +10…+31,9 dBFS · YTEVO03 18.09: медиана речи −20,2 дБ по 105 дублям · YTUVIE 23.09: потолок усиления 20 → 34 дБ для тихого второго · YTAgeFree12–14: громкость врезки — по речи героев этого мастера, а не по −14 LUFS
f32until the last step
SO8Soundcanon

Float only until the limiter

  • чтение float32, декод pcm_f32le, alimiter везде level=disabled
  • s16 и s24 до лимитера срезают всё выше 0 dBFS
  • оригинал не перезаписывать — правка живёт копией рядом
  • alimiter limit 0,95 при attack 5 мало — нужно 0,85 и attack 1; старые триммеры 0103/0105 пишут s24, 0104 — s16: для float не годятся
05_editing/0510_autocut/audio_io.py · 17_audio/standard.py
03.10 · Roman · stage canon · мастера headless, solo, story_cut — f32
4 variantsOrig · Soft · Clean · Warm
SO9Soundcanon

Voice by ear before render: a four-step ladder

  • один кусок на −16 LUFS: Orig · Soft 60 % · Clean · Warm (рецепт C) — на странице версии
  • выбор Романа → sound.speech в задании; без ответа — объявленное умолчание
  • «голос — эхо» на готовом YTCG37 стоил пересборки речи, экранов и рендера
  • уровни вариантов выровнены (level-match) — иначе громче кажется лучше; имена словами (_v2_Soft), не буквами рецептов
05_editing/0510_headless_cut/sound_ladder.py --job J · solo.py sound_ab · 05_editing/0510_autocut/audio.py ladder --what sound,music,edges + audio_page.py · 999_extra/adobe_podcast_enhance/make_variants.py, make_chooser.py · 999_extra/ytfp02_sound_ab.py
03.10 · Roman · YTCG37 · YTCG37 v1 → v3 · 12.07: лестница Adobe Enhance по клипам дня · YTCG37 02.10 и YTUVI01 05.10: v1_Orig…v5_RecipeC · YTFP02 04.10 · YTEVO02 v4: лестницы звука и музыки
−14LUFS integrated
SO10Soundcanon

Master −14 ±1 LUFS, peak ≤ −1 dBTP

  • лимитер −1,5, LRA ≤ 8; паспорт YouTube −14 ±2
  • синхрон: autocut ≤ 20 мс, headless ≤ 40 мс, doc_cut 0 ± 2 мс
  • собранная речь = лист: расшифровка готового звука сверяется словами
  • мастер: замер ebur128 → статическое усиление → лимитер с передискретизацией → повторный замер; динамический loudnorm не применяется
  • резать в плеере нельзя: подрезка дала звук позже на 30,5 мс (YTEVO02 v5); неудачную выдачу не удалять — _qcfail_sync до слова Романа
17_audio/standard.py (MASTER['youtube']) · 05_editing/0510_headless_cut/sound.py master · 05_editing/0511_story_cut/sc_sound.py master · engine qc (qc loud, sync.py measure, av_check)
03.10 · 17_audio/standard.py · одно место чисел для всех движков · YTEVO02 v7 02–03.10: выдача не прошла синхрон — ракурс B на −35 мс → _qcfail_sync, лишнее кодирование всего фильма
193cuts in YTEVO03
SO11Soundlive

Fillers and 'uh' as a stage, with a second pass

  • fillers_v9 вырезал 193 места: «вот» 130, «ну» 33, «как бы» 17
  • второй проход нашёл ещё «вот» и «ну»; «э-э» по тексту не ищется — нужна акустика
  • кандидаты: GigaAM v3 (WER 8,4 % против 25,1 %), подсказка Whisper с паразитами
  • есть ли паразит в звуке — только по выравниванию MMS (Whisper ставит «вот» на 0,3–1,7 с раньше); «слышат обе» модели — надёжно
  • после прохода каждый рез проверять по звуку готового фильма: не задето ли соседнее «не / ни»
  • «вот этот камень» не резать — решение по смыслу, а не по списку; не стерилизуем
YTEVO03 project 00_Setup/08_Cut/v9/_tools/fillers_v9.py and v10/_tools/hesit/ (Whisper turbo prompt + wav2vec2 XLSR ru, environment/.venv_whisperx) · 07_shorts/0701_finished/edges.py · planned stage 05_editing/0517_fillers
14.10 · YTEVO03 · decision 26 · YTEVO03 v6 → v10 · Take now №26 · YTEVO03 v9 14.10: 193 реза в круге 3 по просьбе Романа · v10 15.10: 105 пауз с голосом → 14 надёжных · YTEVO02 v9 15.10 · YTUVIE01 2.1.2–2.1.4 16.10 · YTRF05 v5: лист монтажёру 30 «точно» + 14 «на усмотрение»
who speaksword roles before the cut
SO12Soundcanon

Who speaks: resolved before the cut, from the lavs

  • роли слов — по уровням петличек: у каждого своя, разница в окне слова, уверенно за ±6 дБ (YTLAB01: 146 путаниц расшифровки → 0)
  • петлички без закрепления — по физике звука: полоса DJI-N — не человек, носителя искать по блокам; решать по куску речи, не по слову
  • отпечаток голоса (pyannote wespeaker) — только где петлички не решили; лица YuNet + SFace — кто в кадре (плашки, рамка шортса)
  • роль «по ТЗ» или по самому громкому лицу: «её голосом» для тизера оказалась куратор (YTCH14)
  • pyannote слепил двоих на одной дорожке — прогон с поиском на одного диктора больше и переразметка только его реплик
  • имена по --speaker-names раздаются по времени речи — это догадка, сверять глазами
05_editing/0511_story_cut/sc_color.py probe (hero) · 03_speaker_id/00_process_all.py (early: names from content by LLM) · 999_extra/name_transcript_speakers.py --map · 999_extra/wordrole_transcribe.py (mlx-whisper + pyannote, under mlx_queue.py) · transcript_roles.txt check · --rebuild-only · pyannote + agents for disputed lines · 999_extra/wordrole_transcribe.py (mlx-whisper large-v3 + pyannote 3.1) · YTLAB01 08_Cut/subs_v5 (stem_env.py, word_sp.py, cue_sp.py) · 01_prepare/0120_day_ingest/split_track.py · 999_extra/civ_meeting_diarize.py · YTEVO04 08_Cut/_tools (lav_map.py, speakers_v2.py)
03.10 · 19.10 · YTLAB01 · YTEVO04 · слова с ролями — вход Cut, плашек, субтитров и шортсов · YTCR04: −7…−9 дБ на петличке героя — он сам, −21…−27 дБ — человек поодаль · YTCG37, YTCR04: ранний этап — имена SPEAKER_XX по содержанию реплик · YTTRBM01 02.10: роли субтитров RU/EN — pyannote + агенты по тону, роду глаголов и кадрам; «Гость» вместо «Семён» — шортсы без плашек: имена ролей = ключи hosts и people · YTLAB01 v5 03.10: 146 путаниц → 0, исправлено 99 титров из 1 064 · YTUVIE день 1 24.09: 361 сегмент по уровню петличек · YTEVO04 19.10: о. Аркадий и Ростислав · YTEVO03: склеенный голос на TX03 (144 реплики) переразмечен · YTCG48 05.10
A / Bone piece, one loudness
SO13Soundcanon

A/B before render: the choice becomes the channel default

  • несколько вариантов на одном показательном куске, на одной громкости (−16 LUFS), подряд
  • выбор Романа — умолчание канала: следующие фильмы берут его без нового выбора
  • правка готового — пара «было → стало» одним куском (звук Сони → v7)
  • выбирать профиль самому; «громче» всегда кажется «лучше»
  • музыку и звуки Роман выбирает до рендера вместе с голосом и цветом: вариант — кусок фильма с треком на уровне мастера
  • «сейчас» / вариант 1 / вариант 2 переключаются на той же секунде; у звука — его момент в фильме; свой совет отмечен и выбран
~/YTAI/_work/YTCH13/site/gen_screen_plan.py (music group) · 999_extra/ytfp02_music_preview.py · 999_extra/story_map/story_music.py · 05_editing/0510_autocut/audio.py ladder --what music
12.07 · 26.10 · Roman · рецепт C выбран A/B 12.07 · YTUVI01 v7 «звук офиса» · музыка: YTCH12 06.10 — страница замены музыки («мне всё понравилось») · YTEVO03 04–11.10: по 3 трека на главу на странице структуры · YTFP02 04.10: трек куском фильма на уровне мастера · YTCG37 v1 02.10: эхо — варианты на одном куске
≈ 0.9correlation = same microphone
SO14Soundcanon

Transmitter file ≠ that person's lav: verify

  • до замены — корреляция записи TX с приёмником камеры на одной фразе: ≈ 0,9 — тот же микрофон, 0,3–0,4 — другой
  • ближний микрофон — быстрее спад после слова и ярче верха
  • ставить запись TX «по номеру»: вышла комната (офис SSEF, TX02 не на Наталье)
  • хозяин петлички громче чужого голоса минимум на 6 дБ; во второй части съёмки петличка могла переехать на другого человека
  • не её петличка — ближний микрофон часто канал 0 камеры
05_editing/0511_doc_cut/voices.py measure|plan · 05_editing/0511_story_cut/sc_sound.py (mic_force)
16.10 · Roman · YTUVI01 · шортсы YTUVI01 v5 · YTUVI02 v7 · YTCH14: реплика с петлички — только если хозяин громче чужого голоса ≥ 6 дБ, иначе фраза «через комнату»
12–25 mscrossfade
SO15Soundcanon

Voice without splices

  • стык — встык с перекрёстным затуханием 12–25 мс; резать в смычках и паузах, не внутри слитной согласной
  • длинная пауза — вырезать середину с затуханием; дыхание приглушать по выравниванию текста, не гейтом
  • ноль между кусками и экспандер на паузах — «очень обрезана»
  • левый кусок кончать до начала следующей буквы записи; правый начинать внутри нужной буквы, когда переход от соседа закончен
  • длинная пауза: оставить 0,2 с + 20 % остатка; дыхание между словами −10 дБ, вдох в начале −6 дБ (запас 35/30 мс от букв)
~/YTAI/YTs/YTUVI/dobro/voice_cut.py --short (glide, pjoin) · torchaudio MMS_FA
22.10 · Roman · Stepan's voice · страница «Добрые дела» · voice_cut.py
1 clip = 1 wavfloat, frame-accurate
SO16Soundcanon

Lav per clip: float, frame-accurate

  • каждому клипу — файл на петличку: float32, сэмплы 1:1 из _orig, длина = кадры клипа (01_Source_Sound)
  • петлички не нашлось — сказать, где искали и почему не взято (опись nolav)
  • в лайте первая дорожка — сведение петличек в два канала, за ней звук камеры
  • сдвиг — по середине клипа (уход часов не пересэмплируется); счёт «раз-два-три» даёт ложные связи — перепроверка GCC
16_proxy/1605_sound/sound.py plan|cut|check|status · 05_editing/0514_teaser/clip_sound.py map|cut|check · 16_proxy/1604_light/light_audio.py (light.py audio) · 01_prepare/0121_studio_day/lavcut.py
16.10 · Roman · step E2 · YTEVO03: 213 файлов бит в бит · YTAgeFree16: 232 · YTCR04 v8 16.10: петличка 32 бит float под каждый клип (01_Source_Sound) · лайт YTEVO03 v10f 15.10 со звуком петличек · YTUVIE01: петличка урока одним непрерывным куском
SO17Sound
SO17Soundcanon

Subtitles proofread on the word list against three transcripts

  • вычитка — по плоскому списку слов до нарезки субтитров: фраза, разорванная будущей границей реплики, чинится целиком
  • агент вычитывает реплики по трём независимым расшифровкам (петличка автора, петличка героини, звук камеры): правит распознавание по смыслу
  • не пересказывать; число реплик = вход, время то же, SRT валиден; отчёт «было → стало» и сомнительные места — Роману
  • дефисные слова у mlx — два токена («что-то» = что + -то); сегмент, из которого правка вынесла все слова, выбрасывать
999_extra/subs_wordfix.py ([{from, to, why}]) -> agefree_subs_build.py -> agefree_subs_translate.py; 05_editing/0512_reversion/subs.py; Whisper large-v3 per cue window
17.08 · Roman · YTAgeFree03 V3 (август): 22 правки — «жилая» → «пожилая» · YTCH14 v4 03.10: отчёт субтитров
SO18Sound
SO18Soundcanon

Subtitle cues by words: two lines of 42, breaks at pauses

  • реплика ≤ 84 знаков (две строки по 42) и ≤ 6,5 с; рвётся на паузе > 0,6 с, по концу предложения, на смене говорящего
  • при переполнении — по последней запятой; скорость чтения ≤ 20 знаков/с; предлог не отрывается от слова
  • вычитка меняет только текст, не время; без libass субтитры вжигаются PNG-оверлеями Pillow
05_editing/0512_reversion/cues.py split | srt; 999_extra/readable_subtitles.py, build_youtube_captions.py --glossary, srt_burn_overlay.py
03.10 · stage canon · YTAgeFree12–14 · YTCR
SO19Sound
SO19Soundcanon

A human names the voices on an acceptance page

  • ночь довозит кластеры голосов, имя ставит только человек на странице приёмки: у голоса — отрывок, где слышен только он, кадр и улики
  • спорное — блоком «Надо решить» со звуком прямо там; спрашиваем один раз — показанная пара считается принятой
  • отрывок: чистота важнее длины (solo → clean → mostly); минуты человека — по стенным часам, а не суммой по файлам
01_prepare/0120_day_ingest/s12_decisions.py, s15_voice_cards.py, s14_review_page.py, s13_apply_decisions.py, s16_day_passport.py
20.09 · stage canon · YTEVO03 приёмка 20.09: 5 людей со сквозными ID, 0 нерешённого, паспорт дня
SO20Sound
SO20Soundcanon

Course lesson: no music, quiet screen sounds, start from silence

  • в уроке музыки нет ни в главах, ни в начале и конце — только тихие звуки на появление экранов и ключевых элементов
  • набор и уровни — в наборе звуков курса: окно, карточка, панель, шаги, лупа, свайп, разгадка, следующий урок
  • урок начинается из тишины: до первого слова — ни звуков студии, ни обрывков
  • музыка мешает слушать объяснение
05_editing/0513_lesson_cut/lc.py sfx (YTs/YTUVIE/sfx_kit.json)
05.10 · Roman · YTUVIE 1.1.1 05.10: звуки экранов, 110 событий · 2.1.3 v3 15.10 и 3.1.1 v3 23.10: «у тебя в начале звук слышен»
SO21Sound
SO21Soundcanon

Trailer music cut to the story arc, an ending built if missing

  • музыка трейлера монтируется под дугу истории: бит на доказательстве, брейк на боли, возврат на повороте, удар на названии
  • нужная секунда трека (вход бита, дроп) ставится на событие ленты, следующая часть клеится на ближайшую долю — ритм не рвётся
  • у трека нет концовки — собрать: драйв → вдох 0,3 с → удар на посадку букв + «бум» → хвост ≈ 3 с → чёрное 0,8 с
  • название держится 4–5 с; последний сэмпл — тишина
05_editing/0514_teaser/trailer.py (music_edit, final_hit) · Epidemic MCP EditRecording
07.10 · Roman · трейлер YTCG39 v1 07.10 (у «MECCA» нет концовки) · трейлер YTCG42 07.10
SO22Sound
SO22Soundlive

Track re-edited to the exact length of the block

  • Epidemic EditRecording пересобирает трек ровно под главу, блок или шортс (до 300 с) с естественным концом — не обрыв фейдом
  • targetDurationMs = длина главы, forceDuration; нахлёст 1 с на картах глав; сменилась длина — пересобрать (допуск 0,5 с)
  • ролик до ~5 мин — один трек под длину программы (YTCG37: 282 с); граница «один трек / трек на блок» — решает Роман
  • два закреплённых куска ближе 2,5 с — решения нет; подписанные ссылки скачивания живут ~90 с — качать сразу
Epidemic MCP EditRecording -> PollEditRecordingJob -> DownloadRecordingEdit · 05_editing/0510_autocut/epidemic.py edit <id> --duration-ms · 07_shorts/0701_finished/music.py (shorts.py music --track)
02.10 · YTCG37 · YTCG37 02.10: «Brighter» под 282 с · RSC004 03.10: 124 → 132,8 с · YTUVI02 v7 22.10: трек под каждую главу · шортсы: S{NN}.wav под длину куска
SO23Sound
SO23Soundlive

Track climax pinned right after the key phrase

  • кульминация трека — сразу после последнего слова ключевой фразы; подъём — на поворот сцены
  • кульминацию находят по превью: громкость в окне 4 с впервые в пределах 1,5 дБ от максимума, не раньше 20 с
  • EditRecording с requiredRegionsAtOffsets: кульминация −1,5…+5 с на секунде после слова; тихое начало — закрепить на offset 0
  • закреплённый кусок встаёт на сетку тактов — добивать общим сдвигом; точки синхронизации проверять по ударам: сетка фраз ошибается на такт
Epidemic MCP EditRecording (requiredRegionsAtOffsets, forceDuration) · ~/YTAI/YTs/YTUVI/dobro/voice_music.py · YTCR04 v7_tools/music_v7.py + music/sync_check.py
03.10 · Roman · YTCR04 v7.1 03.10: главный подъём на чеке · YTCH12 06.10: подъём на 36:25 · RSC004 06.10: дроп сдвинут на −0,89 / −0,54 с · «Добрые дела» 22.10: Monuments
SO24Sound
SO24Soundcanon

Music under speech ducked by the sheet, lifted in pauses

  • под речью музыка на 20–22 дБ тише речи и не ближе 18 дБ; в паузах от 1 с поднимается, под главной фразой — тишина
  • бит с голосом — трек приседает, бит без голоса (воздух, заставка, карта) — подъём; паузы внутри реплики музыку не качают
  • уход музыки заканчивается до первого слова (story_cut — за 0,35 с), вход мягкий 0,3–2,5 с
  • вторую систему громкости (ffmpeg-normalize, sidechaincompress) не вводить: наш даккинг знает о речи заранее
17_audio/standard.py · 05_editing/0514_teaser/master.py (music.duck_by: beats, music_dips) · 05_editing/0511_story_cut/sc_sound.py music · 05_editing/0511_doc_cut/sound.py music · 05_editing/0510_headless_cut/music.py
03.10 · stage canon · YTCH14 v3: медиана −26,5 дБ к речи · YTAgeFree16 v3 18.10: по битам листа · YTUVI02 v6–v7: ~17 LU под голосом, подъёмы в паузах до +8 дБ
SO25Sound
SO25Soundcanon

Voice guard: voice above music in every speech window

  • в каждом окне речи проверяется запас голоса над музыкой и звуками; где запаса нет — музыка опускается точечно
  • запас: не меньше 8 дБ (Роман, YTCR04 v9); YTUAE01 — 18 дБ и 700 мс отпускания; в трейлере ≥ 15 дБ по репликам
  • тихая ровная музыка −31…−35 LUFS в паузах — слабо: нужна драматургия (YTAgeFree16 v2)
05_editing/0511_story_cut/sc_sound.py (voice_guard, music_voice_margin_db) · 05_editing/0514_teaser/master.py (keep_voice_on_top: voice_over_music_db, release_ms)
16.10 · Roman · YTUAE01 v7 16–17.10: «не громче голоса Игоря» · YTCR04 v9 17–19.10: 14 дБ · RSC004 06.10: ≥ +8 дБ по фразам · YTAgeFree17 19.10: ~22 дБ
SO26Sound
SO26Soundlive

Track arranged from its stems on a bar map

  • сервис не нашёл пересборку — трек собирают сами из выровненных дорожек оригинала: DRUMS, BASS, INSTRUMENTS, FULL
  • сетка долей по барабанам, карта «такт ролика → такт оригинала»; барабаны и бас выключают на нужных кусках
  • концовку подклеивают по сильной доле целым числом тактов
  • DownloadRecording со stemType отдаёт MP3 одной длины, выровненные по сэмплу
Epidemic MCP DownloadRecording (stemType) · RSC004 sound_2026-10-06/music_v2/trap_arrange.py · ~/YTAI/_work/YTCG39/hook/mix_v1.py music
05.10 · YTCG39 · YTCG39 05.10: хук под секции трека · RSC004 06.10: трэп AGAIN под 138 с
SO27Sound
SO27Soundlive

Music shortlist scored by code from preview measurements

  • запрос — словами блока и фильтрами Epidemic (mood, жанр, BPM, длина, без вокала), затем превью меряют кодом
  • мерки: громкость и LRA, атаки в минуту, вступление (до 55 % энергии), развитие, доля 2–4 кГц и голоса по изолятору
  • штрафы не выкидывают трек, а опускают в списке; «простая» музыка — variation < 0,15; Роману — 3–4 разных варианта
  • название трека не должно спорить с посылом фильма: «Theme of Uncertainty» под манифест не взяли
05_editing/0510_autocut/audio_music.py scout|show · 05_editing/0510_autocut/epidemic.py search|similar|preview · 999_extra/story_map/story_music.py --workers 32
02.10 · YTEVO02 · YTEVO02 autocut 02.10: 37 тем и 43 подложки · RSC004 03.10: отбор v3.1 · YTEVO03 04.10: 148 превью
SO28Sound
SO28Soundcanon

No vocal tracks under speech

  • трек с вокалом под речь не берём: поиск vocals=false, вокал в тегах −10 к оценке, доля голоса по изолятору > −8 дБ — ещё −4
  • подложки шортсов — поиск ≥ 45 с без вокала
  • открыто: допустить ли вокал на финальной карточке и в шортсе без речи — решает Роман
05_editing/0510_autocut/audio_music.py scout · epidemic.py search --no-vocals · Epidemic MCP SearchRecordings vocals=false
2026 · stage canon · autocut YTEVO: scout по 10 запросам · подложки шортсов
SO29Sound
SO29Soundlive

Music from the editor's project: palette and curve reused

  • как монтажёр ставил музыку, переводится в палитру: треки, отбивки и энергия 1–4 на блок; движок укладывает музыку по ней
  • энергия 1–4 = −26 / −20 / −11 / −2 дБ к файлу при программе −16 LUFS, затем пересчёт под громкость собранной речи
  • кривая музыки из .prproj (треки, места, гейн, ключи громкости) пересобирается и дополнительно уходит под слова
  • сверка с мастером монтажёра — по разностному каналу L−R
05_editing/0511_story_cut/sc_music.py plan (08_Cut/music_palette.json) · 05_editing/0511_doc_cut/music_import.py + sound.py music|check|page
02.10 · YTCR04 · YTCR04 v6–v7.2 02–04.10: 45 кусков и 23 отбивки на 27 мин по палитре монтажёра · YTCH12 v8: кривая монтажёра
SO30Sound
SO30Soundcanon

Point music: hook drop on the title frame, outro under the farewell

  • открытие тихо под хуком и растёт, дроп — ровно в первый кадр заставки, потом уходит под первые слова; подложка на 17–27 LU тише речи
  • финал входит под последние слова прощания и поднимается на финальной карточке; мягкий удар на плашке каждой главы со 2-й
  • фильм из нескольких дней: тема — открытие, карточки глав, финал; подложка — блоки других дней
  • под разговором музыки нет — кроме каналов с подложкой на весь выпуск
05_editing/0510_headless_cut/music.py build --job J --edl edl.json (music.track: drop_s, outro_card_at_s; music.sting; hook_track) · 05_editing/0510_autocut/audio.py assemble --theme --bed
2026 · stage canon · YTLAB01 · YTTRBM02 · YTTRBM03 (0510 headless, 10.2026) · YTEVO autocut: тема и подложка
SO31Sound
SO31Soundcanon

Music bed under a whole talk episode, by sections

  • в разговорном выпуске музыка идёт фоном весь выпуск по разделам или словам: приседает под речью, поднимается в паузах
  • под крючком — свой трек, в игре — интригующий; на главах трек начинается заново, короче отрезка — по кругу с переходом 2 с
  • «музыка на фоне будто слишком общаковая» — нужна мелодия канала, «не слишком лёгкая» (Таня, YTTRBM03 v2)
05_editing/0510_headless_cut/music.py (music.bed, hook_track) · 05_editing/0511_story_cut/sc_sound.py music · 05_editing/0511_doc_cut/sound.py music
25.10 · Tanya · YTTRBM03 v2 25.10: круг 1 Тани · подложка по разделам — YTFP02, YTCR04
SO32Sound
SO32Soundcanon

Claimed track replaced by scene emotion, one per placement

  • замену трека (претензия Content ID) подбирают по эмоции сцены, а не по звучанию старого трека
  • монтажёр ставил один трек в три места — у каждого места своя замена
  • громкостная арка трека замерена кодом: подъём ровно на повороте сцены; сведение тем же алгоритмом, что фильм
  • детство с пожаром — колыбельная грусть; домогательства — сдержанная хрупкая; смерть мамы → слова сына — грусть, светлеющая
YTCH12 00_Setup/08_Cut/music_v9/_tools/ · YTCH12_music_v9.json · Epidemic MCP
06.10 · Roman · YTCH12 06.10 v9: «We Are Ready» в трёх местах → Quiet Dawn · Fragile Moments · Rose-Colored Faith, подъём на 36:25
SO33Sound
SO33Soundcanon

Promo music: four directions, beats from the first second

  • музыка промо — с битами и динамикой с первой секунды: задаёт ритм и мотивирует, не ровная и не пугающая
  • показывать 4 разных направления; «слишком простая» — тоже отказ, нужна динамика
  • отвергнуто по раундам: synthwave, epic, dark — пугающая; funk и happy pop — простая; indie и big beat — деловая
Epidemic MCP SearchRecordings (moodSlugs, bpm) + preview measurements (analyze_music.py, RSC004 scratchpad)
03.10 · Roman · RSC004 03–06.10: 4 раунда, выбран трэп AGAIN
SO34Sound
SO34Soundcanon

Promo sound design: the world of the frame, checked by buses

  • звук промо — мир кадра: что видно, то звучит; природа слоями, птицы точками, персонажи своим делом, а не «фон плюс щелчки»
  • у события есть последствие: волна, вспугнутые птицы, капли; каждый звук — пиком на событие кадра
  • баланс шин — графиком громкости: музыка −19 LUFS, эффекты ≈ −17, атмосферы ≈ −31, а не только на слух в конце
  • клики на 12 дБ ниже музыки тонули — Роман услышал «бедный саунд-дизайн»; «деловую» стоковую музыку отверг
RSC004 sound_2026-10-06/ (cues_v4.py, mix.py) · Epidemic MCP SearchSoundEffects
06.10 · Roman · RSC004 06.10 v1 → v3: 147 событий по кадрам → 368 слоёв, атмосферы и ноты в тональности
SO35Sound
SO35Soundcanon

A word hidden by a bleep or a silenced stressed vowel

  • бранное слово или имена родных: отсчёты слова по выравниванию CTC заменяются тоном 1 кГц на уровне речи с мягкими краями
  • чтобы смысл остался, а площадка не резала за слово, — тишина вокруг ударной гласной (70–150 мс) и знак в субтитре «ум*р»
  • мат — одним «бипом»; решение принимает этап Story, а не сведение
  • Whisper угадывает слово по смыслу и при вырезанной гласной — решать, не вырезать ли слово целиком
05_editing/0510_headless_cut/sound.py (apply_beeps) · 05_editing/0511_doc_cut/sound.py (bleeps) · 05_editing/0514_teaser/master.py (voice.censor = [{a, z, word, mode}])
03.10 · Roman · YTCH11 v3 03.10: имена родных героини · YTTRBM02 v3: одно бранное слово · YTAgeFree16 v4 18.10: «ум*р»
SO36Sound
SO36Soundcanon

After cleaning, words re-heard: isolation must not eat speech

  • после чистки речь распознают заново и сверяют с листом и со словами до изолятора; шипящие на месте, сдвиг ≤ 1 мс
  • своё слово на краю пропало после изоляции — 45 %, не помогло — без изоляции; остаётся лучший вариант
  • изолятор роняет громкую речь и ест согласные и тихие края; ответ внахлёст на 98 % стал другим словом — там 75 %
05_editing/0514_teaser/master.py (iso_check) + speech.py · YTUAE01 08_Cut/_tools/qa_iso_words.py (Memex mlx)
02.10 · stage canon · YTCG37 02.10: 951 слово из 951 · трейлер BTS v2 07.10: при 85 % пропало «…и он умирает» · YTUAE01 16.10 круг 3
SO37Sound
SO37Soundcanon

Room tone under the voice; dead air hunted in the master

  • под речью — тон места: «исходник − голос» из пауз без всплесков, сшитый кроссфейдами, ровным слоем около −50 дБ
  • пауза листа — тишина студии с петлички (nat_clip) или тон места; под очищенный голос подмешивается исходник
  • готовый мастер проверяют кодом: silencedetect n=-60dB:d=0.4, мёртвый канал тише −50 дБ, блоки 0,25 с с нулевой энергией
  • изолятор wet 0,9 даёт «вакуум» в паузах; с макро-клипов, где в звуке разговор, тон брать нельзя
05_editing/0510_autocut/audio_mix.py (build_bed_reel, tile) · 05_editing/0511_story_cut/sc_sound.py nat · 05_editing/0511_doc_cut/sound.py · 05_editing/0510_headless_cut qc detect (silencedetect)
02.10 · stage canon · YTEVO02 autocut v4–v7: тон сада −50 LUFS · YTEVO03 v4s 10.10: 2 с тишины в хуке · YTUVI01: сухо 53 % → 0 % · YTUVI03: паузы глав — тон студии
SO38Sound
SO38Soundlive

Camera audio channels measured per file, never blindly downmixed

  • каналы камеры классифицируют замером каждого файла: corr ≥ 0,98 — дубль; corr < 0,10 и разница ≥ 4 дБ — два микрофона, врозь
  • пустой канал — живой канал в оба (моно −3 дБ); клипы с двумя разными микрофонами не трогают
  • -map 0:a:0 теряет второй поток Pocket (свой микрофон), -ac 1 смешивает двух людей; канал −91 дБ — цифровой ноль
  • для Premiere Synchronize — канал 1 (петличка моно)
01_prepare/0120_day_ingest/s2b_camera_sources.py · 01_prepare/0121_studio_day/audio.py · 05_editing/0500_uxp/tools/audio_fill_plan.py -> panel_job.py audio_fill
18.09 · Roman · YTEVO03 18.09: 172 клипа, замер по трём окнам · YTUVIE01 23.09: ZV-E1 ch2 −91 дБ · YTCH05: Fill на лайте (панель v2.33.0)
SO39Sound
SO39Soundlive

DeepFilterNet3 for noisy speech and speech taken from a mix

  • шумодав речи DeepFilterNet3 локально (48 кГц, ~19× реального времени, кусками по 60 с с нахлёстом): пол в паузах −39 → −53 дБ
  • исходника нет — речь чистят прямо из микса (источник MIX_DF); шумную тихую петличку — отдельным файлом с эквалайзером C
  • для голоса со стыками — без постфильтра; дыхание он оставляет — приглушать отдельно; далёкое пение глушит
~/YTAI/environment/.venv_audio (deepfilternet) · 05_editing/0511_story_cut/sc_sound.py (extra_clips) · 17_audio/1702_voice_dataset/voice_dataset.py build
13.10 · YTUVI01 · YTUVI01 v7 13.10 · YTUVI02 v7 22.10 · «Добрые дела» 22.10 · YTUVI03: TX02 на −49 дБ · датасет голоса
SO40Sound
SO40Soundcanon

Camera audio cleaned in batch by Adobe Podcast Enhance, recipe C

  • звук камеры и пушки — пачкой через Adobe Podcast Enhance: токен из браузера, загрузка, опрос, стемы сводятся своими весами
  • рецепт C «тёплый с телом» (A/B Романа 12.07): речь 100 % + фон 10 %, +4 дБ 120 Гц, +1,5 240, +1,5 3,5 кГц, −1,5 9,5 кГц
  • только звук камеры: петличке float не нужен; не для гулкой маленькой комнаты и айфона — там низ и так +4…6 дБ
  • лимиты: 4 ч в день, 2 ч и 1 ГБ на файл, токен ~24 ч; спикеров не разделяет; голос может «повредить» — только лестницей
999_extra/adobe_podcast_enhance/ (get_token.py -> enhance.py --in <dir> --recipe C; make_variants.py, make_chooser.py)
12.07 · Roman · YTUVI Office_Gem_Commentary 12.07: 30 клипов FX3A (~70 мин) · YTUVI01 v7 13.10 · YTUVI03 v6 17.10: пол −35…−38 дБ против −24…−33 у afftdn
SO41Soundcanon

Room echo on a lav: 90 percent isolation plus 10 percent raw lav

  • петличка пишет комнату — голос выделяет изолятор Apple (AUSoundIsolation), к нему 10 % живой петлички: речь не «в вате»
  • эхо — числом: на сколько дБ падает уровень через 0,1 / 0,2 / 0,3 с после фразы; сухая речь — 35…50 дБ
  • вход −30 LUFS, отрезки с запасом 2 с; вне студии wet 1,0; шумное окно с чужим голосом — 60–75 %, интервьюер — 55 %
  • компрессор поднимает хвост комнаты на 2–3 дБ — эхо им не лечится; лишняя изоляция глушит голос («голос как-то убил»)
999_extra/bin/voice_isolate in.wav out.wav --wet 90 --quality high --pregain DB · 999_extra/story_map/story_isolate.py · 05_editing/0510_headless_cut/solo.py (speech_stems, tail_db, sound_ab)
02.10 · Roman · YTCG37 v1 → v2 02–03.10: хвост 24/28/31 → 32/35/42 дБ · YTFP02 04.10: коридор −16 → −45 дБ · YTEVO03 v2 06.10 · YTUVIE блоки 2–3
SO42Sound
SO42Soundlive

Cleaning chain chosen by microphone type

  • стемы делятся по микрофону — петличка, приёмник в камере, Pocket, машина, людное место, — у каждого своя цепочка
  • приёмник в камере ярче студийной петлички: срез верхов −7,5 дБ от 3 кГц + де-эссер; гостю — срез гула у груди 60–150 Гц
  • петличка 24 бит клиппует от подъёма +20 дБ, рассчитанного на тихий float: pregain −3; срезанная речь — adeclip до изоляции
  • канал 1 приёмника DJI в камере — тот же сигнал на −20 дБ (запасной)
05_editing/0511_story_cut/sc_sound.py dialog (CHAINS) · 05_editing/0511_doc_cut/sound.py (sound.pregain_db, sound.declip) · 05_editing/0510_autocut/audio.py stems
05.10 · stage canon · YTCR04 (story_cut) · YTEVO03 05–06.10 и лайт 15.10 · YTTRBM02: гул петлички гостя · YTCG42 05.10: петлички 24 бит
SO43Sound
SO43Soundcanon

Mic for each piece chosen by measurement, and the choice reported

  • «float или камера», «какая петличка», «какая чистка» Роману не задаём: выбираем замером (запас по пикам, пол, чужая речь)
  • из клипов на месте ленты — канал с лучшим отношением речь/пол; из надёжных петличек (пик GCC ≥ 12) — ближняя к говорящему
  • у человека без своей петлички — ближайшая чужая петличка, не камера: свой голос на своей громче ≥ 2,5 дБ
  • «float» ≠ «её микрофон» — проверять корреляцией; приёмка ставит ⛔ «другой текст» при сходстве слов < 0,45
05_editing/0511_story_cut/sc_listen.py mics + sc_sound.py dialog (tape_extra, mic_force, speech_clean) · 05_editing/0514_teaser/master.py + verify.py
17.10 · Roman · YTUVI03 v5 17.10: 278/278 кусков — тот же микрофон · YTEVO03 08.10 рилсы: float 87 кусков, PCM камеры 46, AAC Pocket 4 · YTAgeFree17 19.10
SO44Sound
SO44Soundcanon

Several lavs automixed by power share, no gate

  • все петлички режутся одними сэмплами листа, уровни говорящих — по речи; автомикс по доле мощности (не ниже −15 дБ) убирает просачивание
  • в живом диалоге второй источник открывается, только когда первый молчит: вопрос из-за камеры слышен, голос героини не двоится
  • doc_cut: второй источник −16 дБ, пока говорит первый; герой −24, автор за кадром −26,5 дБFS
05_editing/0510_headless_cut/sound.py dialog --job J --edl edl_audio.json (Dugan automix) · 05_editing/0511_doc_cut/sound.py dialog
2026 · stage canon · YTLAB01 (headless, две петлички) · YTCH14 (doc_cut, вопросы из-за кадра) · YTTRBM03
SO45Sound
SO45Soundcanon

Speakers matched in timbre: one EQ per voice after the chain

  • тембр подгоняют по говорящему: средний спектр всех его кусков после всей цепочки → к общей цели одним EQ
  • цель — разница голосов двух людей не больше ~2 дБ по полосам
  • подгонять каждый кусок — переучиваться: EQ упиралась в ±9 дБ; компрессор сам двигает спектр — мерить после него
  • firequalizer по умолчанию — КИХ 10 мс: delay=0.05:zero_phase=1
05_editing/0514_teaser/trailer.py dialog · ~/YTAI/_work/YTCG39/hook/trailer_audit.py
07.10 · stage canon · трейлер YTCG39 07.10: Хади ↔ Уэсли — было до 8 дБ, стало ≤ 2 · трейлер YTCG42 07.10: разница 1,4 дБ
SO46Sound
SO46Soundlive

Voice timbre matched to the approved voice of the same person

  • эталон — голос этого человека в одобренном фильме у места вставки (дорожка, почищенная монтажёром), тоже через изолятор
  • средний спектр речи по 1/3 октавы → FIR-фильтр; громкость по фразам, после мягкого компрессора — отдельная нормализация
  • сырая петличка не эталон, если монтажёр обработал голос (разница 9 дБ); EQ «к студии» сделал глухими выездные сцены
  • экспандер давал провалы внутри фраз («перепады») — не ставить
05_editing/0510_headless_cut/solo.py sound_ab · scipy firwin2 (4097 taps) · YTUVI01 07_Shorts build_v9.py + _audio9/ref_enhance9.json · 0514 job voice_eq
05.10 · Roman · YTUVI01 05.10: ответ Натальи с айфона — тембр 2,2 дБ против 6–6,9 · шортсы YTUVI01 v9 18.10: провалов 0, было 70 · YTUAE01 16.10 → к YTUAE02
SO47Sound
SO47Soundcanon

Voice keeps its body: depth chain, one soft compression

  • голос из лучшего источника: тело 250–630 Гц не резать, верха не задирать, де-эссер, одна мягкая компрессия 2:1, громкость по фразам
  • тонкому голосу из телефона у эпичной музыки: +3 дБ 160 Гц, −2 дБ 450 Гц, +2,5 дБ 3,2 кГц и лёгкая комната RT60 0,6 с на −18 дБ
  • компрессия 3:1 поднимает паузы — держать 2:1
YTUVI01 07_Shorts/v5/build_v9.py (audio, revoice) · ~/YTAI/YTs/YTUVI/dobro/voice_cut.py
18.10 · Roman · шортсы YTUVI01 v9–v10 18–19.10: «ушла глубина» → тело вернули · «Добрые дела» 22.10: «нужна глубина голоса»
SO48Sound
SO48Soundlive

Lav dropped: voice from the best remaining mic, matched to the lav

  • петлички нет или она выключилась — голос с лучшего оставшегося микрофона: ноутбук в записи экрана или основная камера
  • сдвиг и дрейф к опоре — окнами 16 с; тембр петлички — кривой по общему отрезку, где писали все; затем изолятор и громкость
  • пути сравнить на слух на одном отрезке до сборки; стык — в паузе между кусками
  • изолятор 95 % ноутбук / 100 % камера; ноутбук SNR 33–35 дБ против камеры 23–26
05_editing/0513_lesson_cut/sc_voice.py measure|curves|build --switch|audition · 05_editing/0513_lesson_cut/lc.py cam-strip
10.10 · Roman · YTUVIE01 15.10: TX01 выключилась на 51 мин (уроки 2.1.2–2.1.5) · YTUVIE 10.10: 2.1.3–2.1.5, 4.5.x, 4.6.x, 5.1.1–5.1.2 — со звука камеры
SO49Sound
SO49Soundlive

Speech swapped inside the editor's finished mix

  • речь в готовом миксе заменяют без пересборки: новый = микс + g(t)·(чистая речь − её дорожка), g по блокам 0,1 с — МНК
  • места дорожки — из графа проекта Premiere; громкость чистой речи — по BS.1770, края кусков 20 мс
  • проверка: в остатке связь огибающей с речью ≤ 0,12; вне заменённых кусков результат бит в бит прежний
  • пробы Роману: одно место «звук Сони → v7» подряд
05_editing/0515_editor_rerender/prgraph.py · YTUVI01 08_Cut/v7_review/v7_audio.py df|check|build|ab · 05_editing/0510_autocut/audio.py (sound only -> mix_v4.wav)
13.10 · Roman · YTUVI01 v7 13.10: звук офиса SSEF, g ровно +5,5 / +3,5 дБ · YTEVO02 (autocut): выдача только звука
SO50Sound
SO50Soundlive

Faster read by time-stretch, not by cutting pauses

  • просят, чтобы герой «быстрее читал», — темп ускоряют растяжкой времени без смены тембра: rubberband -3 -T 1.07
  • не вырезать паузы до обрыва речи
rubberband · ~/YTAI/YTs/YTUVI/dobro/voice_cut.py · 07_shorts dyn speech_speed · 05_editing/0510_autocut/post.py
15.10 · Roman · «Добрые дела» 22.10 · шортсы YTUVI01 v7 17.10 (круг 2) · YTEVO02 v9 15.10
SO51Sound
SO51Soundlive

Unchanged pieces keep their approved edges from the last version

  • на кусках, которые не менялись, края берут из прошлой версии; новые края ставят явно по огибающей (tape_a / tape_b в листе)
  • автоматика MMS и метки Whisper на этих кусках ошибаются — прошлые края надёжнее
  • слово, разнесённое Whisper по двум источникам, — кусок по словам одного клипа
999_extra/story_map/story_carry_edges.py · 05_editing/0510_headless_cut/solo.py --ver v1 --tag v2 (EDGES)
02.10 · YTCG37 · YTCG37 02.10 v2 · YTEVO03 05.10 v2 и 15.10 v3
SO52Sound
SO52Soundcanon

Butt joins of one clip: the tail must not sound twice

  • за куском идёт соседнее слово того же клипа — лента продолжается с конца прежнего куска (cont_overlap), хвост не ставится
  • проверка после сборки: у кусков одного клипа начало следующего не раньше конца предыдущего; лечение — один общий рез
  • края ищутся независимо и без пауз перекрываются до 0,36 с — доля секунды звучит дважды
05_editing/0511_story_cut job key cont_overlap · sc_qc.py asr · YTUVI03 08_Cut/_tools/edges_fix.py + sc_build.py
14.10 · stage canon · YTUVI03 v1 14.10: 8 мест · YTCR04 v8: 5 стыков до 0,53 с
SO53Sound
SO53Soundcanon

Smart padding: up to 0.3 s of air, never the next word

  • tc_in = начало первого слова, tc_out = конец последнего + min(пауза до следующего слова, 0,3 с)
  • transcript куска — склейка слов words[first..last]; слово посередине не резать
  • при зазоре 0 даже +0,01 с захватит следующее слово; соседние куски не перекрываются по исходнику больше 0,2 с
05_editing/0501_brief/INSTRUCTIONS.md · 05_editing/0502_assembly/snap_to_words.py · 999_extra/selection_part_build.py · 05_editing/0509_review_cycle/montage/build_montage.py
2026 · stage canon · Assembly-брифы YTCR · montage_tz YTEVO02 11.09 · YTUVI05: текст звучал дважды при перекрытии
SO54Sound
SO54Soundcanon

Reply edges by three witnesses, speech cuts with air

  • рез речи не ближе 60 мс к следующему слову и 50 мс к прошлому; пауза оставляет 0,16 с; фейд краёв 20 мс
  • край реплики решают три свидетеля: огибающая голоса 98 %, Whisper, MMS; рез — в тишину или в ложбину между своим и чужим словом
  • MMS на слитной речи сжимает слова (4 слова в 0,46 с), Whisper тянет начала к тишине — одному не верить
YTUAE01 _tools: edges_env_v5.py, edges_whisper_v5.py, qa_joins.py, qa_iso_words.py
16.10 · Roman · YTUAE01 v5 16.10: «100K», «Do you have…» без «Do» — нашлось после выкладки
SO55Sound
SO55Soundcanon

Long pauses compressed, filled pauses cut, with a veto

  • промежуток длиннее pause_max сжимается до pause_keep; «заполненная» пауза 0,6–2 с (тишина · «э-э», вдох · тишина) вырезается
  • Whisper ставит соседнее слово внутрь выреза — вырез отменяется (vetoed_pauses); длинный звук без слов остаётся и идёт в отчёт
  • каждый вырез потом слушает Whisper (islands): остров звука бывает словом без расшифровки
05_editing/0510_headless_cut/edl.py audio --job J (pause_max, pause_keep, vetoed_pauses, unheard)
2026 · stage canon · YTLAB01: 16 с ответа под одним словом-галлюцинацией · YTTRBM03
SO56Sound
SO56Soundlive

Seams checked by a second ear and by loudness at the edge

  • у каждого шва — громкость первых и последних 30 мс собранной речи: громче −38 дБ — на краю звучит слово; --fix уводит край в тишину
  • второе ухо — другая модель (GigaAM v3 или CTC) на коротком куске 1,4 с: на месте · срезано · проглочено · хвост · лишнее слово
  • флаги краёв по громкости исходника разбирают до черновика: огибающая 10 мс + слова исходника, правка pin_in / pin_out с причиной
  • распознавание собранной речи «читает» срезанное как целое («Ин|деюсь» → «Надеюсь»); короткие «но», «а» Whisper роняет сам
05_editing/0510_headless_cut/verify.py --words-only + align_text.py --engine qwen|giga · 05_editing/0513_lesson_cut/qa/seam_sound.py --fix · lc.py qc-src
13.10 · Roman · YTTRBM03 v5 → v6 25.10: 179 стыков, срезано на деле 4 из 49 помеченных · YTUVIE 1.1.2 13.10, 3.2.1 24.10, 3.1.3 25.10 · YTEVO03 v10
SO57Sound
SO57Soundcanon

Every cut-out audited: no lost words, no mid-word cut

  • граница каждого выреза — по выравниванию букв (MMS) по исходнику; слова внутри выреза, которых нет рядом в оставленном тексте, — ошибка
  • самопроверка до показа: рез внутри слова, оборванная фраза, вход в середину фразы, повтор-дубль (оставляем последний)
  • уверенное — правкой в задание, спорное — листом с вопросом; проверять и ручные, и автоматические вырезы
  • вырез ставить от начала повторяемой фразы, а не от «самого тихого места»; MMS растягивает слово брошенного дубля на паузу
05_editing/0513_lesson_cut/pravki.py selfcheck · MMS forced alignment (torchaudio)
07.10 · Roman · YTUVIE 1.1.1 v1.3 07.10: вырез съел «канала» (14:30) и слова на 15:24
SO58Sound
SO58Soundlive

Whisper prompted with disfluencies keeps fillers and retakes

  • Whisper подражает стилю подсказки: с «Э-э, ну… м-м, вот» на коротком окне вокруг паузы пишет паразиты, которые без неё выбрасывает
  • собранную речь режут по паузам на куски до 20 с, каждый — с подсказкой с запинками и повтором: видны второй дубль и обрывки
  • для выдохов («фух») не годится — на коротких окнах выдумывает слова; каждое «э» проверять акустикой
  • контроль: 25 пустых пауз — ни одного выдуманного «э-э»
Whisper turbo initial_prompt (YTEVO03 v10/_tools/hesit/) · 05_editing/0513_lesson_cut/asr_chunks.py <wav> <out.json> (via mlx_queue.py) · asr_windows_v3.py --prompt
15.10 · stage canon · YTEVO03 v10 15.10: паразиты · YTUVIE01: без подсказки 20 ложных «повторов» на длинном файле
SO59Sound
SO59Soundcanon

Whisper run rules: language flag, no loops, model per source

  • известный язык — флаг --language en/ru; смешанный EN+RU — флаг опускается; значения «auto» нет: с ним падает вся стадия
  • на начитке и дублях — condition_on_previous_text=False, no_speech_threshold 0,5; галлюцинации и фразы-призраки отбраковывать
  • петлички — large-v3 (монтажный текст), камеры — turbo (якоря для графа часов); на Mac — mlx-whisper, одна MLX-модель за раз
  • длинная запись — кусками ~10 мин по тихим местам с очисткой кэша MLX: иначе 27–29 ГБ и своп
run_pipeline.py --only transcribe --language · 01_prepare/0120_day_ingest/s3_transcribe.py · 01_prepare/0121_studio_day/asr.py · 999_extra/chunk_whisper.py (via mlx_queue.py) · 999_extra/ytch_ru_transcribe/ctl.sh
30.05 · stage canon · YTCR03 30.05: «Unsupported language: auto» уронил Phase 2 · YTCH 25.07: 498 файлов ≈ 45 ч за ~4 ч · YTTRBM02 07.10: 27 ГБ, своп 23 ГБ
SO60Sound
SO60Soundcanon

Zoom recordings: speech-gated tracks or the mix, never raw tracks

  • дорожки Zoom Whisper не отдают как есть: каждую режут по кускам речи, склеивают подряд и распознают; слова — обратно на ось записи
  • нет нарезки — общий микс через Whisper, говорящий сегмента — по RMS-огибающей его дорожки
  • на длинных тишинах трека одного человека Whisper сыплет галлюцинациями («Спасибо за внимание!» ×1602)
  • то же для любой разреженной речи: рация, интерком
999_extra/zoom_gated_words.py · 999_extra/transcribe_zoom_multitrack.py --mode mix+diar · 999_extra/zoom_script_doc.py
2026 · stage canon · созвон YTUVI: 5 840 «сегментов», настоящих 12 · RSC004 30.09: первое применение нарезки
SO61Sound
SO61Soundcanon

English straight from the audio, kept apart from sync

  • английский текст — Whisper task=translate по самому звуку каждого клипа и петлички ({stem}_en.json), а не LLM-перевод русской расшифровки
  • герой переключается RU ↔ EN посреди клипа: английские субтитры — переводом со звука, русские — как сказано
  • перевод ломает пословный синхрон (279 слов → 236): синхрон — только по родным расшифровкам, перевод — деревом transcripts_en/
  • строго один mlx-джоб за раз; проверка — missing_en = 0
999_extra/translate_caption_sources.py -> 999_extra/timeline_transcript.py --lang en|ru · 999_extra/translate_dir.py (mlx_whisper task=translate) · 01_prepare/0110_batch_transcribe_dji_tx.py
31.05 · Roman · YTCR03 31.05: Влад — 27 клипов ru, 10 en и смешанные · архив DJI-TX · ингест проектов 2026
SO62Sound
SO62Soundcanon

Timeline transcript from one assembled best-track audio

  • по каждой ленте собирают один сплошной звук из лучшего источника в каждый миг (петличка > основная камера > другие) по раскладке билдера
  • этот звук расшифровывают целиком: 100 % сказанного, таймкоды сразу во времени таймлайна, говорящий — по карте источников
  • не проекцией слов из всех источников с дедупом
999_extra/timeline_audio_build.py -> 999_extra/timeline_audio_transcribe.py -> 999_extra/timeline_transcript.py (mlx_whisper)
2026 · Roman · YTCR03 · YTCR05 · ингест UXP 2026
SO63Sound
SO63Soundcanon

Channel voice registry: one person, one ID across projects

  • у канала один реестр голосов: постоянные ID (A — ядро, B — гости, C — команда) и отпечатки, по которым человек узнаётся сам
  • голоса всех дублей дня кластеризуют глобально; порог — по парам из данных: склеить свою пару, не склеить разных
  • в реестр — только имена, подтверждённые человеком: ошибочное имя отравит узнавание во всех будущих проектах
  • ≤ 0,326 — тот же человек, ≥ 0,377 — другой; отпечатки текущего проекта из сравнения исключаются
01_prepare/0120_day_ingest/voice_registry.py --enroll|--match|--list|--forget · YTs/{CH}/{CH}_voices.json · 01_prepare/0120_day_ingest/s5_voices.py -> s15_voice_cards.py · 999_extra/ytfp_transcript_doc/s3b_cluster.py
22.08 · Roman · YTEVO 20.09: 7 людей, 4 отпечатка · YTCH 24.08: 202 голоса, 0 ложных — Роман во всех 14 выпусках · YTFP 22.08: 5 героев из 5
SO64Sound
SO64Soundcanon

Speaker names come from a person, never from diarization

  • имена спикеров — только от Романа или из видео; обезличенная диаризация даёт метки, а не имена
  • за большими столами диаризация дробит людей — метки Speaker N переназначают по содержанию
  • агенты приписывали день другому человеку по имени, звучащему в подводке; интервьюера не выбирать «самым широким голосом»
voice_overrides.json (names set by a person) · 999_extra/ytch_transcript_doc/s3d_names.py
14.06 · Roman · YTAgeFree S1 14.06 · YTUAE01/02 21.06 · YTAgeFree 07.2026: спикеров не по догадкам агентов
SO65Sound
SO65Soundcanon

Four lavs into both cameras as discrete channels

  • 4 передатчика DJI Mic 3 → приёмник в MI-башмаке каждой камеры через адаптер: CH1..CH4 = TX1..TX4, 48 кГц / 24 бит
  • оба приёмника слушают одни передатчики — звук в файлах камер одинаковый, синхрон по волне точен и бесплатен; TX пишут float
  • только при выключенном таймкоде DJI: A-OUT склеивает TX1+TX2; мик-джек камеры пустой; XLR-ручка FX3 и адаптер взаимоисключающи
  • Shoe Audio Set = 48 kHz/24bit 4ch, приёмник в режиме Q; 4ch не работает в S&Q и таймлапсе
DJI Mic Series Camera Adapter · shoot-day checklist (kb shootday)
23.08 · Roman · чек-лист съёмки 2026 (FX3A, ZV-E1) · адаптер куплен 23.08 · схема проверена по первоисточникам DJI и Sony
SO66Sound
SO66Soundcanon

Speakers' speech is only cut, never re-recorded or synthesized

  • работаем с записанным: речь спикеров можно только резать — не перезаписывать и не синтезировать
  • закадровый диктор от лица компании («мы») — можно дописывать
kb /kb/manifest/ (section 1.5)
2026 · YTRF manifest · YTRF: манифест монтажа (1.5)
SO67Sound
SO67Soundlive

ElevenLabs v4 voice-over: delivery by tags, every take checked

  • подача — тегами в [скобках] свободным текстом, ЗАГЛАВНЫЕ — ударение, многоточие — пауза с весом, произношение — IPA в тексте
  • по 3 дубля на фразу с контекстом соседних (previous_text / next_text, seed); темп — тегами, пунктуацией и выбором дубля
  • каждый дубль: Whisper — бренд и термины прочитаны верно, MMS — пауза внутри аббревиатуры ≤ 0,1 с, хвост после слова +0,15 с
  • аббревиатуры — обычным написанием (SQL, JDBC): через дефис — пауза на каждой букве; модель может дочитать next_text вслух
ElevenLabs API eleven_v4 (key only in ~/.config/ytai/elevenlabs.env) · RSC004 sound_2026-10-06/vo/el_make.py, el_fix.py, vo_qc.py
02.10 · RSC004 · RSC004 02–07.10: голос Mark, 14 фраз × 3 дубля, «DBeaver» выходил «DataBeaver» · суфлёр YTUVI с ударениями · YTTRBM03 25.10: проба ведущего-ИИ
SO68Sound
SO68Soundlive

Voice dataset for a clone: only that person's voice

  • набор — с дорожки рекордера целиком: слово берут, только если его петличка громче соседней на 8+ дБ; чужой голос — огибающими 150 мс
  • выбросы — отпечатком голоса; края — только в зазоре между словами; два файла: выровненный (−20 LUFS) и исходник
  • опись → слова → диаризация → эталон → фразы → замеры (SNR, спонтанность) → живые первыми, части ≤ 30 мин; страница со звуком
  • PVC нужно минимум 30 мин чистой речи (строгие фразы дали 16); клон голоса реального героя — только с письменного согласия
17_audio/1702_voice_dataset/voice_dataset.py inventory|asr|diar|ref|phrases|measure|select|build --job J · report.py · pyannote wespeaker
06.10 · Roman · YTLAB01 06.10: голос Романа, 36 мин, 503 куска · YTUVIEN 23.10: голос Натальи, 702 фразы, 81,5 мин
SO69Sound
SO69Soundcanon

Voice fitted to the animation, not the animation to the voice

  • анимация главная: голос режут на фразы с якорями на события и подгоняют под неё; темп меняют не дальше 0,87
  • голос звучит только в сценах с текстом, карточки-вопросы — без голоса; нужна пауза без знака — запятая только в тексте для модели
  • смена голоса после синхронизации — перестройка анимации и отдельные деньги: на «звучит как ИИ» заранее готовят 3–4 голоса
  • естественный темп v4 ≈ 2,3–2,5 слова/с
RSC004 sound_2026-10-06/vo/ (vo_windows.py, vo_fit.py, el_make.py)
06.10 · Roman · RSC004 06–07.10: 14 фраз, якоря до −2 мс · 16.10: клиент «похож на ИИ, хочется человечнее» · 21.10: «смена голоса — не быстро»
SO70Sound
SO70Soundcanon

Language version: translate, AI voice, lipsync last on approved shots

  • языковая версия — цепочка: оригинал → перевод → синтез голоса → липсинк поверх оригинального футажа
  • липсинк самый дорогой — последним: версия без липсинга → «ок» в комнате → липсинг только утверждённых планов → 4K
  • каждый этап — Source и сохраняется, не «дубль» и не архив
  • своё английское чтение в клон не добавлять — v4 копирует акцент; Voice Changer — только multilingual sts v2
ElevenLabs PVC / eleven_v4 · sync.so sync-3 · YTs/YTUVIEN/dub_plan/ · 999_extra/ytmsen01_screen_plan.py
23.10 · Roman · YTMSEN S1: 4 эпизода EN (ElevenLabs «Arthur») · YTUVIEN 23.10: план дубляжа, голос Натальи
SO71Sound
SO71Soundcanon

B-roll keeps its natural sound under the voice

  • голос из одного видео, кадры из другого: показываемое сверху со своим живым звуком, голос-источник снизу (видео скрыто); оба слоя в миксе
  • живой звук перебивок — тихим слоем nat под рассказом: перебивки −30 дБ, укрытия −38 дБ
  • живого мало — подложка места: двор осенью, треск печи
UXP opening-assembly JSON (keep_audio, role, audio_track) · 05_editing/0511_story_cut/sc_sound.py nat · Epidemic SFX
23.06 · Roman · YTCR04 открытие 23.06 и v6–v8 · YTAgeFree17 v1 19.10: деревня, треск печи
SO72Sound
SO72Soundcanon

Mastering by stems before showing, not only loudness

  • перед рендером версии для показа звук проходит мастеринг по стемам (голос, живой звук, музыка): тембр между микрофонами, плотность
  • проверяют музыку под голосом, шипение, эхо; числа приёмки — LUFS, пик, LRA и что поправлено — в сообщении Роману
  • попадание в −14 LUFS ещё не мастеринг
05_editing/0511_story_cut/sc_sound.py master · kb /kb/stage/claude-sound/
06.10 · Roman · YTEVO03 v2 06.10: мастер −14,1 LUFS / −1,5 dBTP сдан без мастеринга — правка Романа
SO73Sound
SO73Soundlive

Ingest tapes levelled to -23 LUFS in a loop until within 1 LU

  • основная речевая полоса каждой сцены мерится ebur128 и получает gain = −23 − I в пределах −10…+15 дБ
  • уровень — эффектом Hard Limiter на клипах ленты, исходник 32 float не трогают; петля: экспорт → ebur128 → поправка, пока ±1 LU
  • уровень и Auto-Match — только на клипах ленты, на вложениях никогда (двойной гейн); тише −45 LUFS — не речь
  • единственный писатель плана — audio_level_plan.py, прошлый план — в _backup
17_audio/1701_level/audio_level_plan.py --project P --main TX01 · 05_editing/0500_uxp/tools/panel_job.py audio_prep --gain --apply|loudness_check
28.09 · stage canon · YTUVIE01 уроки 1.1.1–1.1.3, 28–30.09 · пилот: TX02 −49…−51 LUFS опознан как «не речь»
SO74Sound
SO74Soundcanon

Voice in the lips: chain latency compensated, each shot aligned

  • лимитер и шумодав сдвигают звук: задержку цепочки меряют пачкой всплесков и снимают (alimiter latency=1, afftdn 25 мс)
  • картинку каждого плана с речью подгоняют к собранному голосу: GCC-PHAT голоса фильма против звука камеры в кадре
  • мерить «звук фильма ↔ звук камеры в кадре»; ненадёжный пик (ветер, музыка) — план не трогать; готовый файл — conf ≥ 6
  • SyncNet на профилях, бороде и с микрофоном в кадре: уверенность < 3, разброс ±500 мс — его числам не верить
999_extra/story_map/story_lipsync.py --project P [--min-conf 6] [--max-shift 0.25] · 05_editing/0511_story_cut/sc_sound.py (chain_latency, ffmpeg_filter_aligned) · 05_editing/0510_headless_cut/solo.py unlag
05.10 · Roman · YTEVO03 05.10: губы отставали на ~30 мс → v2 медиана +29 → −3 мс; v4s 10.10: 129 из 166 планов 0,0 мс · YTCG37: afftdn сдвигал на 25 мс
SO75Sound
SO75Soundcanon

English cut: subtitles first, dubbing later on its own track

  • в английском фильме русская речь героя идёт с английскими титрами; дубляж (ElevenLabs) — потом, отдельной дорожкой
  • звук сдаётся стемами голос / M&E — дубляж ложится без пересборки фильма
project 08_Cut/subs/*_en.srt
04.10 · Roman · YTCR03 05.10: 81 EN-титр к русской речи

Registry · 13

every other approach we used, compact: code, rule, where it is seen, tool

SO76

Music carved under the voice by SII bands, not ducked whole

YTTRBM03 v6 25.10: анекдот SII 0,879 → 0,950, крючок 0,899 → 0,974 · в композициях HyperFrames — carve.mjs⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

музыка уступает речи только в полосах и моментах, где глушит её: 18 полос 1/3 октавы 160 Гц – 8 кГц с весом важности SII
05_editing/0510_headless_cut/carve.py (job key music.carve; without the key the film sounds as before)⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

live
SO77

Music bed kept even: quiet intros and breaks lifted

YTCG37 v2 03.10: музыка пропадала на полминуты — исправлено level_bed · autocut держит пол подложки −26…−28 дБ к речи⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

тихие вступления и брейки трека подтягивают к обычному уровню: не ниже «обычный − 3 дБ», подъём ≤ 10 дБ, сглаживание 3,5 с
05_editing/0510_headless_cut/solo.py (level_bed)⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

live
SO78

Picture rendered without music, music muxed afterwards

RSC004 v2 03.10: рендер только со звуками, три пересборки музыки наложены mux.py⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

ролик рендерится без музыки, музыка накладывается отдельным шагом — варианты трека и тишину сравнивают без пересчёта кадров
RSC004 mux.py (render without music, then ffmpeg mux)⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

live
SO79

Voice rebuilt from lav sources over the editor's cut

YTUVI02 v7 21–22.10: голос Натальи из петличек по монтажу Сони, голос над музыкой 13 дБ⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

музыка вшита под речь в миксе монтажёра — голос собирают заново из петличек по его монтажу и кладут свою музыку
YTUVI02 05_Review/work/v2/claude_edit/tools/v7_voice.py (map -> refine -> retake -> split -> fix -> find/set -> build)⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

live
SO80

Finished sound retimed to a re-animated cut by a time-warp

RSC004 21.10 v5: сцены длиннее на +10,5 с (YouTube) и +7 с (конференция) — новый звук за ~2 ч⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

аниматор перерисовал сцены — звук не собирают с нуля: функция времени «старый → новый» по событиям кадра (клики, штампы, склейки)
RSC004 sound_2026-10-21/ (align.py, anchors.py, events.py, warp.py, trap_v7.py, vo_v7.py)⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

live
SO81

Splice by pitch: same intonation, PSOLA glide, spectral seam audit

«Добрые дела» 22.10: стык «что лучик» — шесть заходов после «всё равно слышу склейку»; слышимая склейка давала 390–520⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

слово для стыка берут из места с той же интонацией, сверяя F0 с шагом 20 мс; где такого нет — высоту ведут кривой Praat PSOLA
~/YTAI/YTs/YTUVI/dobro/psola_glide.py (praat-parselmouth) · voice_cut.py (glide, pjoin)⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

live
SO82

Whisper timing artifacts fixed in the tape: retakes, stretched words

YTUVI03 v2 → v3 15.10: 15 мест

ведущий перечитал фразу, а в расшифровке одна строка (текст одного дубля, время другого): признак — слово > ~1,5 с или пауза 3–7 с
YTUVI03 00_Setup/08_Cut/_tools/takes_align.py + 05_editing/0511_story_cut/sc_align.py · sc_build.py · 999_extra/story_map/story_to_storycut.py⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

live
SO83

Leaked word fragment at a seam muted in place, time unchanged

YTEVO02 рилс S05 и фильм 8:04 11–12.10: «…действия [саду]. Поэтому» · YTEVO02 v4 (autocut mutes)⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

на стыке, где в съёмке вырезана фраза, у каждого шва распознают окно ≥ 1,3 с с обеих сторон по собранной речи
05_editing/0510_autocut/autocut.py (directives -> mutes) · ffmpeg aeval⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

live
SO84

Whisper window drops filled from a second source

YTUVIE01 23.09: дыры 295,7–324,7 и 459,6–488,7 с · YTUVIE 2.1.2 v4 16.10: добор asr_gapfix⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Whisper large-v3 на петличке теряет целые окна по 15–30 с посреди речи: дыры > 8 с сверяют со словами камеры (turbo) и заполняют
13_preprod/1304_visual_tz/lesson_spine.py (fill_holes) · asr_gapfix.py (lesson round tools)⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

live
SO85

Language of each segment by its script, not by detect_language

архив DJI-TX: 343 WAV, 102 ч (Дубай 2025–26)

язык сегмента — по доле письменностей (кириллица, арабская, латиница) в родной расшифровке large-v3, мусор — гейтом галлюцинаций
01_prepare/0113_language_map.py · 01_prepare/0114_build_manifest.py · 01_prepare/0115_translate_reference.py⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

trial
SO86

Voice slate: lesson and take number spoken into a TX

YTUVIE, студийные уроки

в студии продюсер голосом называет номер урока и дубля на TX02 перед дублем — номер дубля живёт в звуке
TX02 as a voice slate · 01_prepare/0121_studio_day/ (day.json)⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

live
SO87

Each lav diagnosed where its person speaks

YTTRBM03

разбор каждой петлички там, где говорит её человек: уровень речи и пол, клиппинг, баланс полос (гул, бубнение, свист шипящих)
05_editing/0510_headless_cut/sound_qc.py --job J [--master <cut.mp4>]⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

live
SO88

Singing and services: live sound from the nearest mic, no denoiser

YTEVO03 v10 14.10: молитвы на освящении −11,6 / −11,5 LUFS с FX3-1258

молитва, пение, служба — живым звуком с ближнего микрофона (канал камеры рядом), а не шумодавом; музыка под ними тише на 9 дБ
05_editing/0511_story_cut/sc_sound.py⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

live

Код подхода постоянный — по нему подход называют в плане фильма и хэндоффе. new — решения Романа и Тани 02–26.10 из хэндоффов и памяти: раньше их не было ни на одной странице. Пунктир — open: в фильм только после решения Романа. Как добавить новый подход — Edit · Add.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Speakers

Распознавание участников: по петличкам, физике звука, отпечатку голоса и лицам. Делается один раз на ингесте — им пользуются Cut, плашки, субтитры и шортсы.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

🎙

Lav map

cast.json → mics

кто на каком передатчике: задание съёмки, проверка фразой известного говорящего

live
📊

Word by lav level

YTLAB01: 146 → 0 errors

у каждого своя петличка: разница уровней в окне слова; уверенно за ±6 дБ, между — наложение речи⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

live
🧲

Physics relabel

YTEVO03 · YTEVO04

петлички без закрепления: полоса DJI-N собрана из разных TX, Pocket a1 − a0, решать по куску речи⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

live
🧬

Voice print

Roman · Pavel YTLAB01

pyannote wespeaker — только где петлички не решили; реестр голосов канала — затравка, не ответ⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

live
🙂

Faces

shorts YTFP01 · YTUAE01

YuNet + SFace по эталонам: кто в кадре (плашка только на своём); SyncNet — кто говорит в кадре (рамка шортса)⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

live
📖

Read check

YTEVO03: a line given to the wrong person

читать ленту по смыслу: кто кому отвечает — последняя проверка до сборки

live
⇒

Выход — слова с ролями ({base}.words.json, имена = ключи hosts и people): по ним режет Cut, ставятся плашки и субтитры, выбираются шортсы. Сделано до сборки — дальше никто не угадывает, кто говорит.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Порядок — сверху вниз: следующий способ включается, только где не решил предыдущий. Подход SO12, проверка петлички SO14.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Compare

Варианты на одном куске и одной громкости; выбор Романа становится умолчанием канала — следующие фильмы проще.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Voice ladder

Orig · Soft 60 % · Clean · Warm (рецепт C) — один кусок, −16 LUFS, подряд на странице версии⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

SO9 live

EQ A/B

рецепт C против «срез низа + минус каша 200–500» — на одной громкости

SO13 trial

Source check

запись TX против приёмника камеры на одной фразе: ≈ 0,9 — тот же микрофон

SO14 live

Before → after

одно место «было → стало» подряд, подпись картинкой — для правки готового микса

SO13 live

Music pick

три трека на блок с плеером на странице версии; без ответа — объявленное умолчание⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

SO4 live

Выбор Романа записывается в YTs/{CH}/sound_profile.json (с 26.10, заведены 12 каналов, все ждут A/B): speech.by_engine — вариант лестницы, доля голоса, EQ; следующий фильм канала берёт его без нового A/B, задание фильма главнее. Читают 0510 solo.py dialog и 0511 sc_sound.py; проверка — python3 ~/YTAI/scripts/17_audio/sound_profile.py check. Музыка — в журнал музыки.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Сравнивают до рендера: выбор один раз на канал или на микрофон упрощает все следующие фильмы. Подход SO13. Проба 26.10 — Proof · Voice EQ A/B ↗: ждёт вашего выбора.⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

Choose

Сначала — правильный исходник, потом симптом → подход.

Source

voice only from the speaker’s own lav

SourceWhat it isUse
DJI TX lav · whole _orig.wavfloat 32 · 48 kHz · mono · ~30 minvoice source, alwayslive
Recorder with lavs (headless)WAV in 01_Source/Audio/source; film time follows itlive
_edit.wavprocessed by the recorder, some takes shorternot a sourceskip
*_timeline.wavcompressed Premiere sequence timenot a source: cut accuracy ≤ 0.67 sskip
Camera audio24-bit via the MI adapter: more roomsync onlyskip
DJI camera AACrecorded clipping; -ac 1 merges two peoplenot a sourceskip

If something is off

symptom → approach

Echoey voice: the lav records the room

изолятор 90 % + 10 % живой петлички; чистить до компрессора

SO9 · YTCG37 v1

Muffled speech, dead silence in pauses

подмешать сырой: wet 0,9 (solo) · 0,72 (doc_cut) · soft 60 %

SO9 · doc_cut · solo

Loudness jumps between people

голоса разных людей и сцен — к одной громкости

SO1 · YTCH14 v4

Music fights the voice

стем INSTRUMENTS, −20…−22 дБ к речи; частотный вырез — проба

SO4 · Carve #31

Fillers: well, so, uh

стадия паразитов + второй проход; «э-э» — акустикой

SO11 · YTEVO03

The voice is dull

срез низа ~80–100 Гц, убрать кашу 200–500 Гц, сравнивать на равной громкости

SO9 · reel @whereismydelay

Clicks at the joins

резы только в тишине, кроссфейд 20 мс (headless) · 12 мс (story_cut)

SO2 · headless

A quiet channel, zero in L

silencedetect −55 дБ / 2 с; канал тише −50 — мёртв, полосу тише −45 LUFS не брать⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

SO1 · FX3 · TX02

The transcript mixes up who speaks

роли по уровням петличек, а не по диаризации; петлички без закрепления — по физике звука⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

SO12 · YTLAB01 · YTEVO04

The transmitter file sounds like the room

проверить корреляцию с приёмником камеры: ≈ 0,9 — тот же микрофон

SO14 · YTUVI01 shorts

Editor's finished mix, poor speech

заменить речь в миксе, не пересобирая: g(t) по блокам, чистая речь DeepFilterNet⁠​‌​‌​​‌​​‌​‌‌​​‌​‌​​​​​‌​​‌​‌‌​‌​‌​​‌‌​‌​‌​​​​​‌​‌​‌​​​​​​‌​‌‌​‌​‌​‌​​‌‌​‌​​‌‌‌‌​‌​‌​‌​‌​‌​​‌‌‌​​‌​​​‌​​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​‌​​‌​‌‌​‌​‌‌‌​‌‌​​​‌‌‌​​​⁠

SO13 · YTUVI01 v7

Picture redrawn, the sound no longer fits

перенос звука функцией времени по опорам кадров и событий

SO13 · RSC004 21.10

A splice in the voice is audible

стык в смычке или паузе, перекрёстное затухание, высота и спектр через стык

SO15 · Stepan's voice 22.10

Voice EQ

Наш рецепт против совета из рилса, который прислал Роман. Решает ухо — на одной громкости.

501002005001k2k5k10k+6+3+0-3-6mud 200–500
our recipe C, warm with body: +4 dB 120 Hz · +1.5 240 · +1.5 3.5 kHz · −1.5 9.5 kHzreel advice: low cut ~80–100 Hz, remove mud 200–500, the top appears by itself
W@whereismydelay24.10.2026
Roman: «Вот это для голоса»

Voice EQ: what did not fit in the reel

100 Гц — ориентир, не закон: у низкого голоса основной тон уходит к 80–90 Гц — вести фильтр вверх, пока голос не «худеет», и чуть вернуть. Глухо — не крутить верх: в девяти случаях из десяти это каша 200–500 Гц. Сравнивать с выключенным EQ на той же громкости — громче всегда «лучше».

Take: проба на одном куске: рецепт C против «срез низа + минус каша» — обе версии на одной громкости (−16 LUFS) в лестнице голоса; выбирает Роман на слух (SO9). Рецепт C поднимает 120 и 240 Гц — ровно там, где совет режет: спор решает ухо.

Music & SFX

Музыка — настроение и динамика блока, не фон; звуки — показ события на экране.

Describe the block in words

  • настроение — из слов речи и места блока: хук — эмоция, глава — вопрос, финал — выход; в коде — теги mood с весами (hopeful +2, dark −3)
  • динамика — темп речи и роль блока: энергия 1–4, как в палитре монтажёра (1 едва слышно … 4 почти в голос: −26 / −20 / −11 / −2 дБ к файлу)
  • где пик и где пауза: заставка, карта, финальная карточка — там музыка поднимается; под словами — ровная
  • блок описывает сессия по его тексту, не по жанру канала
YTCR04: 21 блок с треком, местом входа и энергией — 08_Cut/music_palette.json

What we search in Epidemic

  • term словами («hopeful piano strings slow build») + фильтры: moodSlugs, taxonomySlugs (жанр), featuredInstrumentSlugs, bpm, duration, vocals=false
  • SearchSimilarToRecording — похожее на понравившийся трек; SearchExternalReferences — референс из Spotify
  • превью меряются: громкость, LRA, нарастание, где пик, атаки в минуту, доля 2–4 кГц, доля голоса
  • стемы FULL · INSTRUMENTS · BASS · DRUMS; под речью звучит INSTRUMENTS — без ударных, баса и мелодии
autocut: 10 запросов → 37 тем и 43 подложки в scout.json

What we don't take

  • вокал под речью: vocals=false в поиске, −10 за вокал в тегах, −4, если изолятор слышит голос (доля > −8 дБ)
  • трек громче речи и «дышащий» на паузах: вне заставок пауза даёт не больше 30 % подъёма
  • много резких ударов (> 60 атак/мин), неровная подложка (LRA > 10), тема вне 140–300 с, жанр «медитация»
  • название, которое спорит с посылом фильма (см. грабли)
YTEVO · music/choice.json, поле why

Music changes with the structure

  • тема — открытие, карточки глав, финал; подложка — блоки других дней; под разговором музыки нет (autocut, headless)
  • трек на блок по палитре монтажёра: 45 кусков и 23 отбивки на 27 минут (story_cut)
  • внутри блока: тихий вход, «тело» записи и дроп — на заставку, уход под первые слова; нарастание — на название; финальный удар — на финальную карточку
  • один трек на всю программу — только короткий ролик канала (solo, 4:42); подложка одним уровнем на весь фильм — фон, которого канон не хочет

SFX we show

an on-screen event gets a hit, whoosh or click

EventWhere in the filmIn code todayNeeded
Chapter cardкарточка или плашка главыstory_cut: Ping Boom −12 дБ из палитры монтажёра; headless: stinger Epidemic −2 дБ RMS к речи с главы 2solo, doc_cut, autocut — построить
Entering the mapmap_route, map_place, map_worldstory_cut: свист whoosh −20 дБ, удар за 0,48 с до кадраостальные — построить
A number landsэкраны number, counter; выноска viz считает 0,8 снетклик или тик на остановке счётчика — 💬 моё мнение
A plate appearslower third, имя, плашка шортсовнеткороткий мягкий свист на кадр появления
The map drawsлиния маршрута, точкинет (только вход)шелест на длину рисования, тише отбивки
Piece change in a shortстык двух репликнет; клиент music.py умеет sfx(), команды неткоманда shorts.py sfx — открыто

Откуда: SearchSoundEffects (term, ≤ 3 с) → DownloadSoundEffect WAV (02.10 пришёл 96 кГц); похожее — SearchSimilarToSoundEffect. Уровни как у отбивок: удар −2…−12 дБ к речи, клик тише; звук — на кадр события, не в слово. Список событий утверждает Роман.

Numbers

Одно место чисел — 17_audio/standard.py; уровни музыки — из движков и проверок.

Master loudness
−14LUFS ± 1
−24−8
паспорт YouTube −14 ± 2; пик ≤ −1 dBTP; LRA ≤ 8
Music under speech
−21dB to speech
−32−14
не ближе −18; без речи подъём до −9, не выше −6
Isolator input
−30speech LUFS
−50−10
громкую речь модель роняет; потолок −1; сдвиг ≤ 48 сэмплов (1 мс)
A/V sync
≤ 20ms · autocut
060
headless ≤ 40 мс; doc_cut 0 ± 2 мс; камера ↔ петличка ≤ 2,4 мс
Room tone · nat
−50LUFS
−70−30
«источник − голос» под речью; перебивки story_cut −30, укрытия −38
Tape ingest (Premiere track)
−23LUFS ± 1
−30−14
EBU R128; 9 LU запаса до мастера

Полоса — допуск, чёрная метка — цель, цветная — эталон или граница, о которой говорится в подписи.

Toolbox

Изолятор, стемы, синхрон, роли, музыка и голос.

voice_isolate

live

системный AUSoundIsolation офлайн, ×80 реального времени, float32 той же длины

~/YTAI/scripts/999_extra/bin/voice_isolate --wet 100 --quality high

audio.py stems · clean · assemble

live

стемы f32, четыре варианта голоса, сборка речи по сэмплам

$V $AC/audio.py stems

sync.py measure

live

сдвиг петлички к камере по огибающей, MAD ≤ 12 мс

$V $DC/sync.py measure

17_audio/standard.py

live

одно место чисел мастера для всех движков

~/YTAI/scripts/17_audio/standard.py

Epidemic Sound MCP

live

музыка и SFX: поиск словами, похожие, правка под длину; канал — в safelist

SearchRecordings · EditRecording

ElevenLabs v4

live

голос с ударениями — суфлёр YTUVI

MCP / API

pyannote · mlx-whisper

live

кто говорит и слова со временем

wordrole_transcribe.py

fillers_v9

trial

паразиты: «вот», «ну», «как бы»; «э-э» — не ищет

YTEVO03 _session_tools

Adobe enhance speech

trial

второй вариант чистки речи

Adobe MCP

Next

Решения с GitHub и из сети под звук: паразиты, доли, саунд-дизайн, чистка речи.

Кандидат попадает в фильм только через пробу на кадре настоящего фильма и «ок» Романа — тогда он становится подходом с кодом. Звёзды, лицензия весов и Mac проверены у каждой строки (исследование 14.10).

Take now

first to try · 5 of 25

Filler and hesitation stage for RussianMLX Whisper + MMS_FA + Silero VAD + F0 + Claude по тексту
Take now#26K04effort M

Filler and hesitation stage for Russian

Четыре слоя: лексика (вот/ну/как бы/типа/это самое/короче), хезитации «э-э/м-м» акустикой, второй ASR для полноты, Claude решает «паразит или смысл».

Where: Вынести fillers_v9.py в общий этап (05_editing/0517_fillers) для story_cut, doc_cut и shorts.py.

method · our codesource ↗
our proof
Take now#27K05effort S

Beat This! (CPJKU/beat_this)

Трекер долей и сильных долей (ISMIR 2024), лучший открытый без DBN-постобработки; отдаёт секунды beats и downbeats.

Where: 0510_autocut/audio_music.py, 0514_teaser/trailer.py (вместо автокорреляции темпа), HyperFrames audiomap; общий 17_audio.

★ 421MIT (code and weights)source ↗
author demo
Take now#28K06effort S

pyannote speaker-diarization-community-1

Новая открытая модель диаризации: лучше 3.1 на 10 из 12 наборов; режим exclusive — один говорящий в момент, удобно для слов с ролями.

Where: 01_prepare/0120_day_ingest/s4_diarize.py и split_track.py (MODEL), 999_extra/agefree01_diarize.py, wordrole_transcribe.

★ 10.6kMIT · model CC-BY-4.0source ↗
mlx-audio (Blaizzy)MLX
Take now#29K07effort S

mlx-audio (Blaizzy): MLX runtime for audio models

Один пакет: Silero VAD, Sortformer, Whisper, Parakeet, Qwen3-ASR и ForcedAligner, Mel-RoFormer, MossFormer2-SE, DeepFilterNet, SAM-Audio, Chatterbox.

Where: Общий рантайм для 17_audio и 0701_finished/edges.py; один venv вместо россыпи torch-окружений.

★ 8kMITsource ↗
SFX on eventsNumPy + Epidemic MCP + beat_this
Take now#30K08effort M

SFX on events: sync point + beats

Событие (экран, цифра, свайп, склейка, метка GSAP) → класс звука → звук встаёт своим пиком или атакой на событие, а не началом файла; по желанию — на долю.

Where: Вынести sfx_events/cmd_sfx из 0513_lesson_cut/lc.py в 17_audio; события — screens JSON, лист монтажа, метки композиций HyperFrames.

Epidemic (subscription) · our codesource ↗

Proofs

proofs on our own footage · 1

our proof

Motion on the beat: a grid instead of raw beats

Трек Epidemic «For Everyone» из YTEVO03, 3,5 мин, CPU. Темп модели по шагам в одну долю — 125,0 = Epidemic 125, но в 45 % мест она шагает через долю. Во вступлении без ударных (0–50 с) на сетке ±1 кадр только 15 % долей, в части с ударными — 99 %. Акценты ставим на сетку: темп Epidemic + фаза и такт модели. № 27 beat_this

Take nowfor T10 · moushnfor T5 · RSC004

Try

trial on a film frame · 9

#31

Carve: frequency cut of music under the voice ↗

Вместо общего −16 дБ под речью — провалы только в полосах, где звучит голос (цепочка peaking по анализу речи), плюс выравнивание уровня.
Приём уже есть в нашем стеке и проверен в HyperFrames; дешёвый способ поднять музыку в фильмах.

Tryeffort M
#32

GigaAM v3 (Sber, salute-developers/GigaAM) ↗

Русский ASR: средний WER 8,4 % (v3_rnnt) против 25,1 % у Whisper на пяти доменах; e2e-версии с пунктуацией; таймкоды слов с 04.2026.
Лучшая открытая русская модель под MIT и локально: дешёвая страховка полноты для T1 и точности субтитров для T3.

Tryeffort M
#33

ElevenLabs Scribe v2: verbatim − no_verbatim ↗

STT с таймкодами слов, русским, диаризацией и keyterms; по умолчанию пишет паразиты и фальстарты, а no_verbatim=true их убирает.
Самый быстрый путь к verbatim-русскому при оплаченном аккаунте; проверить на 10 минутах YTEVO03 против ручной разметки.

Tryeffort S
#34

Whisper prompt with fillers (initial_prompt) ↗

Whisper подражает стилю подсказки: если в ней «Ну, э-э, вот… как бы, м-м», он чаще оставляет паразиты (OpenAI: сохранение filler words).
Эксперимент на полчаса; если сработает на русском — локальная замена облачному Scribe для чувствительных фильмов.

Tryeffort S
#35

Qwen3-ForcedAligner-0.6B ↗

Ставит таймкоды словам по готовому тексту для 11 языков, включая русский, кусками до 5 минут.
Уже на диске и на MLX, закрывает известные промахи MMS; без замены основного выравнивателя.

Tryeffort S
#36

python-audio-separator (RoFormer, dereverb, de-echo) ↗

CLI и библиотека для 100+ моделей UVR: голос/музыка (BS-RoFormer SDR 12,9), dereverb, de-echo, denoise, crowd.
Единственный путь на Mac к SOTA-разделению и dereverb одной командой; Demucs внутри есть — отдельно не ставить (жив форк adefossez).

Tryeffort M
#37

NARA-WPE (fgnt/nara_wpe): classic dereverberation ↗

Линейное предсказание с задержкой: вычитает поздний хвост комнаты и ничего не выдумывает; работает и на одном канале.
Дёшево, детерминированно и хорошо складывается с нашей изоляцией; если tail_db не вырастет заметно — выбросить.

Tryeffort S
#38

ElevenLabs Sound Effects API ↗

Звук по тексту длиной 0,5–30 с, бесшовная петля (loop), prompt_influence, выход pcm_48000.
Дёшево и уже оплачено; дополняет Epidemic там, где нужен конкретный звук бренда или предмета.

Tryeffort S
#39

ACE-Step 1.5: music generation ↗

Музыка 10 с – 10 мин по описанию с контролем BPM, тональности и размера; правка кусков, стемы, LoRA на своих треках; коммерция разрешена.
Единственная открытая музыкальная модель с коммерческой лицензией и MLX; пробовать точечно в промо, не в фильмах.

Tryeffort M
Later 3 · Skip 8
#40

All-In-One: track sections (intro, verse, chorus) ↗

Одной моделью: темп, доли, сильные доли, границы и метки частей трека (intro/verse/chorus/bridge/outro), обучено на Harmonix.
Полезно, но не сейчас: на Mac ставится с боем, а кульминацию мы уже ставим через Epidemic. Вернуться после влития PR #39.

Latereffort M
#41

SAM-Audio (Meta*): sound by text and frame ↗

Выделяет звук по описанию («speech», «church bells», «crowd»), по маске объекта в кадре или по отрезку времени; модели small/base/large.
Новая возможность, но голос и музыку уже закрывают RoFormer и AUSoundIsolation. Брать, когда понадобится «убрать конкретный звук».

Latereffort M
#42

Sidon: speech restoration ↗

Чистит признаки w2v-BERT и синтезирует речь вокодером заново; по авторам сравним с Google Miipher, многоязычный, очень быстрый на GPU.
Сильный кандидат на случай «звук безнадёжен», но не для основных дорожек: честность голоса героя важнее.

Latereffort M
#43

CrisperWhisper 2.0 ↗

Verbatim-Whisper: пишет [um]/[uh], повторы, обрывы; v2.0 многоязычный, границы слов 29,6 мс (TIMIT).
Лицензия закрывает путь, а Scribe v2 на английских паразитах не хуже (95,5 против 94,3) и уже оплачен.

Skipeffort S
#44

madmom / essentia / aubio / librosa ↗

Классический MIR-пакет: доли RNN+DBN, онсеты, аккорды — эталон до 2024 года.
beat_this точнее без DBN и под MIT; остальные дают либо лицензионный риск, либо хуже доли. Держать один трекер.

Skipeffort S
#45

Parakeet v3, WhisperKit, lightning-whisper, Apple SpeechTranscriber ↗

Быстрые альтернативы нашему MLX Whisper: Parakeet-TDT 0.6B v3 (25 языков, русский есть), WhisperKit (Whisper на CoreML), SpeechTranscriber macOS 26.
Ни одна не точнее Whisper на русском; второй русский ASR — это GigaAM v3, а не ещё один быстрый Whisper.

Skipeffort S
#46

ClearerVoice, Resemble Enhance, VoiceFixer ↗

Шумодав MossFormer2_SE_48K, AV-выделение диктора по губам (16 кГц); Resemble — генеративный «студийный» энхансер; VoiceFixer — 2021 год.
Дублируют то, что уже есть и выбрано на слух; держать в уме только AV-выделение диктора.

Skipeffort M
#47

ffmpeg-normalize, pyloudnorm, sidechaincompress ↗

Готовая нормализация по EBU R128 и даккинг музыки компрессором с внешним ключом (голос).
Свои инструменты точнее и откалиброваны с Романом; добавлять вторую систему громкости вредно.

Skipeffort S
#48

MMAudio, HunyuanVideo-Foley, ThinkSound ↗

Генерация шумов (фоли) синхронно с картинкой — шаги, ветер, посуда — по видео и тексту, клипы около 8 с.
Лицензии и железо закрывают путь; синтетический шум в архивном кадре документалки ещё и этически спорен.

Skipeffort L
#49

Open Russian TTS: Chatterbox, Silero, F5, XTTS ↗

Локальная озвучка и клон голоса по образцу; Chatterbox V3 (MIT) знает русский среди 23 языков.
Коммерчески чист только Chatterbox, но по русскому он уступает ElevenLabs, который оплачен и настроен на голос Романа.

Skipeffort S
#50

Seed-VC, RVC, OpenVoice: voice conversion ↗

Речь → речь: начитать досъёмку своим голосом с нужной интонацией и перекрасить в тембр героя.
ElevenLabs делает то же лучше и уже оплачен; главное ограничение здесь этическое, а не техническое.

Skipeffort M

References

Сохранённые Романом посты о голосе, музыке и звуке.

W@whereismydelay24.10
Roman: «Вот это для голоса»

Voice EQ: what did not fit in the reel

Срез низа ~100 Гц — ориентир: у низкого голоса основной тон 80–90 Гц, фильтр ведут вверх, пока голос не «худеет». Глухо — убрать кашу 200–500 Гц, а не крутить верх. Сравнивать с выключенным EQ на той же громкости.

Take: проба в лестнице голоса: рецепт C против «срез низа + минус каша», обе на −16 LUFS — выбирает Роман на слух (раздел «Эквалайзер голоса»).
E@elevenlabs25.10

Chimera: Eleven v4 + Seedance, a character speaks in a written voice

Голос режиссируют тегами перед строкой: [whisper], [shout]; видео синхронизирует губы.

Take: теги v4 — для закадра и суфлёра YTUVI (голос v4 у нас в бою); синхрон губ генерацией — не для фильмов.
C@chingizkhan_yt11.10

Claude videos all look alike: 4 ways to make your own

Эффекты с GitHub (p5.brush, Rough.js, частицы) · главное движение — в бит музыки · бренд-файл: цвета, шрифт, правила движения · разбор чужих роликов.

Take: разобрано на пробах: p5.brush, rough-notation и сетка долей Beat This (Take now №27); бренд-файл — это наша ДНК канала.
E@elevenlabs08.10

Eleven v4: direct the voice like an actor

Эмоции и подача голоса тегами, v4 бесплатно на время.

Take: у нас в бою: голос v4 с ударениями — суфлёр YTUVI.
have itpost ↗
V@visionaryclown.tv03.10

A product video made entirely from prompts

Каждая анимация и каждое число — Claude, ни кадра в After Effects.

Take: есть: RSC004 — клиентский ролик кодом с саунд-дизайном.
have itpost ↗

Чужие ролики на сайт не кладём — только описание, вывод и ссылку на пост. Файлы, расшифровки и листы кадров — на SSD: /Volumes/T9-Black-2-RYA/_refs/2026-10-25_roman_saved/. * Instagram (Reels) принадлежит компании Meta Platforms Inc., признанной экстремистской организацией; её деятельность в России запрещена.

Channels

Звуковая цепочка движка каждого канала; мастер у всех один.

ChannelLatest filmSound chain
YTCGConnect GroupYTCG39 · Review v2solo: петличка задания, wet 0,9, EQ lav_warm, один трек под длину
master −14 LUFS for all
YTCRCore Realty DubaiYTCR04 · Review v11story_cut: группы к −20 дБFS, музыка по энергии 1–4, отбивки
master −14 LUFS for all
YTCHGood Deeds BureauYTCH11 · Cut v12doc_cut: целые _orig, герой −24 / автор −26,5 дБFS, музыка по главам, тишина
master −14 LUFS for all
YTEVOEvolutionYTEVO04 · Review v10autocut: изолятор, 4 варианта, тема ≤ −20 / подложка ≤ −21 дБ к речи; YTEVO03 — story_cut
master −14 LUFS for all
YTLABThe LabYTLAB01 · Delivered v8headless: две петлички одними сэмплами, автомикс Дугана, отбивка на главах
master −14 LUFS for all
YTFPPravmir FoundationYTFP02 · Cut v3doc_cut (YTFP02) · шортсы с перебивками
master −14 LUFS for all
YTTRBMTaraborimYTTRBM04 · Delivered v16headless: петлички, заставка на дропе музыки
master −14 LUFS for all
YTUVIUVI GemstonesYTUVI01 · Shorts v10Premiere Сони + правки кодом: v7_audio
master −14 LUFS for all
YTUVIEUVI EducationYTUVIE01 · Review v8уроки 0513: петлички студии
master −14 LUFS for all
YTMSENMultiple Sclerosis (EN)YTMSEN01 · Shorts v7AE монтажёра (v3)
master −14 LUFS for all
YTAgeFreeAge FreeYTAgeFree20 · Delivered v11ре-версии 0512: звук исходного фильма
master −14 LUFS for all
YTUAEOn the Dotted LineYTUAE02 · Delivered v8doc_cut (YTUAE02) · 0514 (YTUAE01)
master −14 LUFS for all

Полностью — на странице Channels: ДНК, экраны, цвет, звук и шортсы каждого канала с примерами.

Add

Need → Search → Candidate → Proof → Roman's OK → Approach → Channel DNA
process, checks and commands → Edit · Add

Та же петля для всех ремёсел: без примера из настоящего выпуска и «ок» Романа кандидат кодом не становится.

Files

Where it lives · 6
~/YTAI/scripts/17_audio/standard.py

числа мастера для всех движков

~/YTAI/scripts/999_extra/bin/voice_isolate · adobe_podcast_enhance/enhance.py

изолятор голоса · рецепт C

~/YTAI/scripts/16_proxy/1605_sound/ · 0514_teaser/clip_sound.py

петличка под каждый клип (E2)

~/YTAI/scripts/999_extra/wordrole_transcribe.py · face_finder/

слова с ролями · лица

~/YTAI/scripts/999_extra/audio_finesync/

синхрон до миллисекунд

~/YTAI/environment/.venv_audio

DeepFilterNet3 — речь без исходника

$V $AC/audio.py stems · clean · assemble
~/YTAI/scripts/999_extra/bin/voice_isolate --wet 100 --quality high