AI-translated from English; not yet reviewed by a fluent editor.
# Превратите одно длинное видео с разрешённым использованием в пять проверенных вертикальных роликов
> Процесс на основе документации: пять сверенных с оригиналом клипов, исправленные субтитры, вертикальный кадр и проверка человеком.
By BIG CHANGE Editorial
Published: 2026-10-21T09:43:38.285Z
Updated: 2026-10-21T09:43:38.285Z
Canonical: https://bigchange.ai/blog/five-checked-video-shorts-claude-code-whisper-ffmpeg

AI-generated conceptual illustration by BIG CHANGE.
Из одной записи можно получить несколько коротких клипов, но расшифровка не определит, честно ли передан смысл фрагмента, а экспорт 1080 × 1920 не доказывает удобство просмотра. Здесь пять вручную вызываемых проектных навыков Claude Code организуют расшифровку, ранжирование, нарезку, субтитры и рендеринг. Редактор-человек утверждает каждый интервал исходника и целиком смотрит каждый готовый файл. Процесс предназначен для принадлежащего вам видео либо видео, которое вам прямо разрешено редактировать и распространять.
Это инструкция на основе документации для macOS Terminal с zsh. BIG CHANGE не запускал эти команды, не изучал частные записи и не создавал пять файлов. Сначала проверьте справку установленных инструментов и реальные медиафайлы. Главная иллюстрация концептуально показывает пять вертикальных видео, которые автор будет проверять. Это не реальные клипы, не результат работы программы и не тест документированного процесса, проведённый BIG CHANGE.
## Главное изменение
- **Что изменилось:** Проектные навыки Claude Code могут разделить локальный видеомонтаж на пять вручную запускаемых этапов. Предлагаемые записи передачи связывают таймкоды исходника, утверждённые вырезки, исправленные субтитры и итоговые файлы; документация инструментов не подтверждает успешное выполнение именно этой цепочки.
- **Почему это важно:** Автор с разрешённым исходным материалом может передать редактору конкретное решение на каждом этапе, включая вопрос, есть ли вообще пять разных подходящих фрагментов. Такая структура позволяет отклонить слабую или вводящую в заблуждение вырезку до экспорта с субтитрами.
- **На что обратить внимание:** Решение о распространении результата по-прежнему зависит от прав, политики данных выбранного аккаунта Claude и полного просмотра каждого сохранённого MP4. Успешная техническая проверка файла этих вопросов не решает.
## Перед началом
Вам нужны локальный `source.mp4` с пригодным звуком, достаточно места, доступ к Claude Code, работающий локальный whisper.cpp `whisper-cli` и совместимая с языком модель, а также FFmpeg и ffprobe с нужными кодировщиками и фильтрами. Нужен и редактор, способный проверить запись и все пять экспортов. Зафиксируйте аккаунт Claude Code и политику данных, версии установленных инструментов, commit или сборку whisper.cpp, SHA-256 и лицензию модели, лимиты использования. Claude Code может обращаться к размещённой удалённо модели, даже если расшифровка и рендеринг локальные. Предоставляйте доступ лишь к разрешённым вашими правами и политикой аккаунта расшифровкам и медиа. Его [инструкции навыков](https://code.claude.com/docs/en/skills) не ограничивают доступ. Отдельные [настройки разрешений инструментов](https://code.claude.com/docs/en/permissions) управляют вызовами; в зависимости от настроек обычные действия только для чтения могут выполняться без запроса. Осознанно проверьте, что навык может читать, а также что он предлагает записать или выполнить.
Поместите неизменяемую копию исходника и `rights.json` в новую доверенную локальную рабочую папку. В записи о правах укажите SHA-256 исходника, редактора, разрешённые фрагменты и последующее использование, разрешения на речь, музыку и визуальные материалы, правила хранения и сроков сохранения. При неопределённых правах не продолжайте. Откройте Terminal в этой папке, проверьте `pwd`, затем создайте рабочие папки:
```shell
mkdir -p transcript clips captions shorts probes .claude/skills/video-transcribe .claude/skills/video-rank .claude/skills/video-cut .claude/skills/video-caption .claude/skills/video-vertical
command -v claude
command -v ffmpeg
command -v ffprobe
claude --version
ffmpeg -version
ffprobe -version
ffmpeg -hide_banner -h encoder=libx264
ffmpeg -hide_banner -h encoder=aac
ffmpeg -hide_banner -h filter=subtitles
ffmpeg -hide_banner -h filter=scale
```
Задайте `WHISPER_CLI` и `WHISPER_MODEL` как реальные абсолютные пути в кавычках. Для `LANGUAGE` укажите проверенный код языка речи, например `en` только для английского звука. Убедитесь, что модель его поддерживает: модель `.en` только для английского не подходит для другого языка. Для смешанных или неподдерживаемых языков до продолжения нужен проверенный план. [Справочник CLI whisper.cpp](https://github.com/ggml-org/whisper.cpp/blob/master/examples/cli/README.md) описывает `-l`, `-m`, `-f`, `-osrt`, `-oj` и `-of`; сверьте их со справкой своей сборки. Не включайте опцию перевода.
```shell
WHISPER_CLI='/absolute/path/to/whisper-cli'
WHISPER_MODEL='/absolute/path/to/approved-model.bin'
LANGUAGE='en'
test -x "$WHISPER_CLI"
test -r "$WHISPER_MODEL"
"$WHISPER_CLI" --help
ffprobe -v error -show_entries format=duration:stream=index,codec_type,codec_name,width,height,sample_aspect_ratio -of json source.mp4
```
Перед любым запуском замените примеры путей и язык. Проверьте длительность исходника, потоки, ориентацию, звук и свободное место. Убедитесь, что установленный фильтр `subtitles` поддерживает libass, а `scale` принимает `force_original_aspect_ratio`, `force_divisible_by` и `reset_sar`. Если необходимой функции нет, следуйте инструкциям разработчиков по сборке и повторите проверки. Не убирайте субтитры молча.
## Создайте пять проектных навыков с чёткими границами
В доверенном проекте сохраните пять отдельных файлов `.claude/skills/<name>/SKILL.md` . Каждому нужны собственные `name`, `description`, `disable-model-invocation: true`, а также полные входные данные, действие, результат и правило остановки. Вызывайте вручную в таком порядке: `/video-transcribe`, `/video-rank`, `/video-cut`, `/video-caption`, `/video-vertical`. Не добавляйте `allowed-tools`: по документации Claude Code это поле разрешает перечисленным инструментам работать без запроса при вызове, а не ограничивает навык. Сохраните обычные настройки разрешений и отдельно проверьте доступ. Чтение может не запрашивать подтверждения, а запись и выполнение следуют реальным настройкам аккаунта.
Используйте полные тексты ниже вместе с общей записью запуска, описанной далее. Текст навыка — инструкция Claude Code, а не технически обеспеченная граница.
**`.claude/skills/video-transcribe/SKILL.md`**
```markdown
---
name: video-transcribe
description: Transcribe the authorized local source for the five-short workflow.
disable-model-invocation: true
---
Input: rights.json, immutable source.mp4, checked source probe, verified language and local whisper.cpp executable/model. Confirm matching source and model hashes, usable audio and permitted access before any command.
Action: From the checked run directory, confirm source.wav and both transcript output paths do not exist. Extract mono 16 kHz 16-bit PCM source.wav with explicit first-audio mapping and no overwrite. Continue to whisper-cli only after a zero exit and valid WAV readback; use the verified model and explicit language, SRT and JSON output, and translation off. Inspect both outputs, parse source-relative times, and compare representative passages and uncertain names or quotes against source audio. Record a nonzero exit or uncertain output as a manifest blocker before any next stage.
Output: transcript/source.srt and transcript/source.json, recorded hashes, corrections or marked uncertainties, tool and model identity in manifest.json.
Stop: Missing rights, changed inputs, absent audio, empty or malformed transcript, or unverified relevant speech. Do not upload, publish or overwrite accepted files; ask the editor to settle uncertainty.
```
**`.claude/skills/video-rank/SKILL.md`**
```markdown
---
name: video-rank
description: Suggest source moments for human selection of five distinct clips.
disable-model-invocation: true
---
Input: Checked source transcript and hash, immutable source hash and probe duration, rights.json, intended audience. Verify all identities and authorized transcript access.
Action: Suggest more than five moments with numeric source-second start/end, source words, surrounding context and editorial rationale. Treat ranking as a suggestion, never a viral forecast. Have the editor open each candidate in the original and check speaker, wording, facts, context and rights. Record exactly five distinct coherent approved intervals and a rejected-candidate log.
Output: approved-moments.json with order, source hash and five numeric bounds satisfying 0 <= start < end <= source duration.
Stop: Fewer than five permissible, meaningful moments, mismatched hashes, uncertain bounds or missing human approval. Do not invent a fifth excerpt.
```
**`.claude/skills/video-cut/SKILL.md`**
```markdown
---
name: video-cut
description: Cut the five approved source intervals into separate local clips.
disable-model-invocation: true
---
Input: Immutable source.mp4, source hash/probe and five human-approved intervals. Verify hashes and calculate each duration as end minus start.
Action: For each 01-05, confirm its unique output path is unused, then transcode the approved source-relative interval with input -ss, -t duration, explicit first video/audio mapping, libx264, AAC and -n. Continue only on zero exit and file readback. Probe streams and duration, inspect first and last frames, and have the editor watch each whole cut for boundaries, sync and context. Record the exact command and output hash. Any failure or uncertain write is a manifest blocker; never pass that clip to captioning.
Output: Five accepted numbered clips, individual probe records and links to approved intervals in manifest.json.
Stop: Wrong bounds, absent stream, drift, misleading context, output collision or uncertain command result. Read back the existing path first; correct bounds with human approval and use a new filename. Never overwrite or reuse an old clip hash.
```
**`.claude/skills/video-caption/SKILL.md`**
```markdown
---
name: video-caption
description: Create and check local captions from each accepted clip.
disable-model-invocation: true
---
Input: Five accepted clip hashes, verified language and local model identity. Reject stale clips or mismatched source links.
Action: For each actual numbered clip 01-05, verify its accepted hash and unused WAV/raw-SRT paths, then extract its own mono 16 kHz 16-bit PCM WAV with -n. Run whisper-cli only after zero exit and WAV readback, with the matching language and SRT output; translation stays off. Preserve raw SRT. Have the editor correct words, names, numbers, cue timing, overlaps and readability against the actual clip, then save a distinct .checked.srt. Use clip-local times, not source-offset cues. Record failures as blockers before rendering.
Output: Five checked SRTs with raw-ASR and exact clip hash links in manifest.json.
Stop: Any cue outside clip duration, uncertain speech, bad alignment or stale clip hash. Repair and replay before rendering; a recut requires matching new captions.
```
**`.claude/skills/video-vertical/SKILL.md`**
```markdown
---
name: video-vertical
description: Render and review five captioned 1080x1920 MP4s.
disable-model-invocation: true
---
Input: Five accepted clip hashes/probes, matching checked SRT hashes, rights record and a human-approved crop or framing plan for each clip.
Action: Check decoded orientation and sample aspect ratio. Choose even integer crop width, height and x/y for each clip; require positive dimensions, nonnegative offsets and a rectangle within the decoded frame. A fixed crop does not track motion. Verify unique output and probe paths are unused. From the established run directory, render each separately with crop, aspect-preserving scale, pad, clip-local subtitles, explicit video/audio mapping, libx264, yuv420p, AAC and -n. Continue only on zero exit and saved-file readback. Create probe JSON without clobbering an existing path, reopen the MP4 and have the editor watch its entire video and audio, checking cut context, every caption, framing, sync, facts and rights. Record any failure or uncertain output as a blocker.
Output: Five distinct accepted 1080x1920 MP4s, hashes, probe JSON, exact source/clip/SRT lineage and UTC human acceptance notes.
Stop: Unknown orientation, invalid crop, missing filter, collision, unreadable file, silent audio, cut-off text, wrong duration, bad context or failed full playback. Inspect uncertain existing outputs; revise to a new filename, probe and watch again. No upload or publishing.
```
Ведите один `manifest.json` на запуск. При каждой передаче записывайте документ о правах и SHA-256 неизменяемого исходника, версии инструментов, SHA-256/лицензию/язык модели, входы и выходы с SHA-256, утверждённые числовые интервалы исходника, точные команды и решения с временем UTC. При несовпадении имени файла или хеша остановитесь и разберитесь до следующего навыка.
Считайте каждый блок shell ниже отдельным этапом в новом скрипте zsh или контролируемой оболочке с `set -e` , чтобы ошибка команды останавливала этап. До запуска проверьте, что каждый выходной путь свободен; ненулевой код завершения, отсутствие файла или неопределённую запись зафиксируйте в manifest как блокировку. Следующий навык обязан прочитать статус и хеш результата: нельзя принять неудачную вырезку только потому, что остался старый клип.
## 1. Расшифруйте исходник
Согласно [README разработчиков whisper.cpp](https://github.com/ggml-org/whisper.cpp/blob/master/README.md) , текущему примеру CLI нужен 16-битный WAV. Подтвердив пригодность исходного звука, выполните следующее из проверенной папки проекта. `-n` не позволяет FFmpeg перезаписать существующий WAV.
```shell
set -e
test ! -e source.wav
test ! -e transcript/source.srt
test ! -e transcript/source.json
ffmpeg -i source.mp4 -map 0:a:0 -ar 16000 -ac 1 -c:a pcm_s16le -n source.wav
test -s source.wav
"$WHISPER_CLI" -m "$WHISPER_MODEL" -f source.wav -l "$LANGUAGE" -osrt -oj -of transcript/source
test -s transcript/source.srt
test -s transcript/source.json
```
Убедитесь, что оба файла `transcript/source.srt` и `.json` существуют, содержат речь с временными метками и не выходят за проверенную длительность исходника. Прослушайте характерные фрагменты, сверьте неясные имена, числа и цитаты с оригиналом. Сохраните исправленную расшифровку или явные пометки неопределённости. Если извлечение звука либо расшифровка пусты, сначала проверьте исходный поток, исполняемый файл, язык и совместимость модели, затем создавайте новый результат с уникальным именем.
## 2. Выберите пять моментов в оригинале
Вызовите `/video-rank` с проверенной расшифровкой и описанием аудитории. Запросите больше пяти кандидатов, чтобы редактор мог отклонить слабые. Для каждого требуйте числовые начало и конец в секундах от начала исходника, произнесённый текст, контекст до и после, причину самостоятельности отрывка. Откройте каждый интервал в оригинале. Редактор определяет, сохраняются ли говорящий, формулировки, визуальный контекст, факты и разрешения после вырезки. Сохраните ровно пять разных утверждённых интервалов в `approved-moments.json`; включите порядок, хеш исходника и `0 <= start < end <= source duration`. Текст расшифровки — только указатель места. Для более узкой задачи поиска таймкодов см. [Найдите момент речи перед монтажом видео](https://bigchange.ai/blog/find-spoken-moment-before-video-editing).
Если в записи нет пяти обоснованных моментов, остановитесь. Задание с пятью файлами остаётся незавершённым.
## 3. Вырежьте утверждённые интервалы
Вызовите `/video-cut`. Для каждого интервала вычислите `DURATION = END - START` по утверждённым числовым границам. Замените заполнители в угловых скобках ниже реальными числами; заполнители не являются исполняемыми значениями. Повторите для `clip-02.mp4` — `clip-05.mp4`. FFmpeg документирует поиск позиции во входе, длительность, явный выбор потоков и [вывод без перезаписи существующих файлов](https://ffmpeg.org/ffmpeg.html). Для заданных границ используйте перекодирование, а не копирование потока.
```shell
set -e
test ! -e clips/clip-01.mp4
ffmpeg -ss <START_SECONDS> -i source.mp4 -t <DURATION_SECONDS> -map 0:v:0 -map 0:a:0 -c:v libx264 -c:a aac -n clips/clip-01.mp4
test -s clips/clip-01.mp4
```
Проверьте потоки и длительность каждого реального клипа, осмотрите первый и последний кадры, затем посмотрите его целиком. Запишите хеш и утверждённый интервал исходника. Для неверной вырезки нужны заново утверждённые границы и новое имя результата. Если команда завершилась ошибкой или результат неопределён, изучите существующий файл и технический отчёт до повторного запуска; никогда не повторяйте запись в то же имя.
## 4. Исправьте субтитры по каждому реальному клипу
Вызовите `/video-caption`. Расшифруйте каждый принятый клип: нулевой отсчёт субтитров должен совпадать с его началом. Для клипа 01 команды такие:
```shell
set -e
test ! -e captions/clip-01.wav
test ! -e captions/clip-01.srt
ffmpeg -i clips/clip-01.mp4 -map 0:a:0 -ar 16000 -ac 1 -c:a pcm_s16le -n captions/clip-01.wav
test -s captions/clip-01.wav
"$WHISPER_CLI" -m "$WHISPER_MODEL" -f captions/clip-01.wav -l "$LANGUAGE" -osrt -of captions/clip-01
test -s captions/clip-01.srt
```
Повторите с соответствующими реальными двузначными номерами от 02 до 05 и отдельными путями. Сохраняйте каждый исходный `captions/clip-NN.srt`. Редактор сверяет каждую реплику с клипом, исправляет слова, имена и числа, проверяет время и читаемость, затем сохраняет `captions/clip-NN.checked.srt`. Реплика за пределами длительности клипа блокирует рендеринг. Записывайте хеш каждого SRT вместе с хешем клипа. При изменении вырезки пересоздайте или перепроверьте субтитры по новому файлу.
## 5. Измените кадр, выполните рендеринг и примите все пять
Вызовите `/video-vertical`. Для каждого принятого клипа изучите декодированное изображение, ориентацию, соотношение сторон пикселя и движение. Редактор выбирает для каждого клипа свои чётные целочисленные `CROP_W`, `CROP_H`, `CROP_X`, `CROP_Y`. Прямоугольник должен помещаться в декодированный кадр. Неподвижная обрезка не следует за движущимся объектом; если теряется важное, выберите проверенный план масштабирования с полями либо измените вырезку. Неясная ротация или координаты обрезки останавливают рендеринг. [Руководство по фильтрам FFmpeg](https://ffmpeg.org/ffmpeg-filters.html) описывает crop, scale, pad и фильтр subtitles на основе libass.
Из установленной рабочей директории задайте `CLIP` реальным двузначным номером, а четыре переменные обрезки — утверждёнными целыми числами для этого клипа. Команда — шаблон, а не проверенный пример. Сохраните показанный простой относительный путь субтитров: специальные символы в именах требуют отдельного экранирования filtergraph. Повторите независимо для 02–05.
```shell
set -e
setopt noclobber
CLIP=01
CROP_W=<CHECKED_EVEN_INTEGER>
CROP_H=<CHECKED_EVEN_INTEGER>
CROP_X=<CHECKED_EVEN_INTEGER>
CROP_Y=<CHECKED_EVEN_INTEGER>
test ! -e "shorts/short-${CLIP}.mp4"
test ! -e "probes/short-${CLIP}.json"
ffmpeg -i "clips/clip-${CLIP}.mp4" -map 0:v:0 -map 0:a:0 -vf "crop=${CROP_W}:${CROP_H}:${CROP_X}:${CROP_Y},scale=1080:1920:force_original_aspect_ratio=decrease:force_divisible_by=2:reset_sar=1,pad=1080:1920:(ow-iw)/2:(oh-ih)/2,subtitles=captions/clip-${CLIP}.checked.srt" -c:v libx264 -pix_fmt yuv420p -c:a aac -n "shorts/short-${CLIP}.mp4"
test -s "shorts/short-${CLIP}.mp4"
ffprobe -v error -show_entries format=duration:stream=index,codec_type,codec_name,width,height,sample_aspect_ratio -of json "shorts/short-${CLIP}.mp4" > "probes/short-${CLIP}.json"
test -s "probes/short-${CLIP}.json"
```
В каждом из пяти JSON-отчётов должны быть видеопоток 1080 × 1920 с соотношением сторон пикселя 1:1, аудиопоток и положительная длительность, соответствующая утверждённому клипу с учётом кодирования и округления кадров. Отсутствующее или неизвестное значение остаётся нерешённым. [JSON-вывод ffprobe](https://ffmpeg.org/ffprobe.html) проверяет свойства файла, а не качество монтажа. Откройте заново и посмотрите каждый MP4 целиком, сравнивая с исходным интервалом, принятой вырезкой и проверенным SRT. Проверьте границы предложений, субтитры и безопасное размещение, кадрирование при движении, синхронизацию звука, факты и права. Запишите принятие, доработку или отклонение с временем UTC в manifest. Задание завершено, когда приняты пять файлов и каждый связан с хешем исходника, утверждённым интервалом, хешем клипа, хешем проверенного SRT и JSON-отчётом. Четырёх принятых файлов недостаточно.
## Ограничения и восстановление
Доступ к Claude Code может оплачиваться по плану или API и иметь лимиты. Загруженная локальная модель, расшифровка, перекодирование и повторные правки расходуют место и вычислительные ресурсы. Записывайте реальные расходы, если аккаунт их показывает; неизвестная стоимость не равна нулю. Скорость, точность, качество субтитров, экономия или популярность для этой инструкции не измерялись.
Сохраняйте оригинал и принятые результаты. При отсутствии модели, неподдерживаемом параметре, плохой расшифровке, сбое рендеринга или неопределённой записи сначала проверьте точные хеши входов и существующий файл. Устраните конкретную причину, задайте правке новый путь, повторите техническую проверку и полный просмотр. Не загружайте и не распространяйте готовый ролик, пока редактор-человек не примет его содержание и права.
## Sources
- [Навыки Claude Code](https://code.claude.com/docs/en/skills) — Anthropic документирует проектный SKILL.md, ручной вызов и временное разрешение allowed-tools на использование инструментов без запроса. Это не устанавливает результат какого-либо видеопроцесса.
- [Разрешения Claude Code](https://code.claude.com/docs/en/permissions) — Anthropic описывает отдельную систему разрешений. Текст навыка не обеспечивает ограничения доступа к медиа или загрузки; пользователи должны проверить настройки аккаунта и проекта, включая чтение, возможное без запросов.
- [whisper.cpp README](https://github.com/ggml-org/whisper.cpp/blob/master/README.md) — Рекомендации разработчиков по сборке и моделям и текущий пример whisper-cli описывают требование 16-битного WAV и преобразование FFmpeg. Установленную сборку и модель проверяйте отдельно.
- [whisper.cpp CLI README](https://github.com/ggml-org/whisper.cpp/blob/master/examples/cli/README.md) — CLI разработчиков перечисляет -m, -f, -l, -osrt, -oj, -of и -tr. В инструкции задан проверенный язык и отключён перевод; локальная расшифровка не гарантирует верных слов или временных меток.
- [Документация командной строки FFmpeg](https://ffmpeg.org/ffmpeg.html) — Справочник по поиску позиции во входе, -t, явному -map, перекодированию и -n. Реальные границы и вывод требуют проверки; копирование потока не является предписанным режимом нарезки.
- [Документация фильтров FFmpeg](https://ffmpeg.org/ffmpeg-filters.html) — Справочник по crop, scale, pad и subtitles. Фильтру subtitles необходимы libass и вспомогательные библиотеки; проверьте наличие нужных параметров scale в установленной сборке.
- [Документация ffprobe](https://ffmpeg.org/ffprobe.html) — Справочник по машиночитаемому выводу потоков и формата. Техническая проверка не устанавливает контекст вырезки, читаемость субтитров, синхронизацию, точность фактов или права.
- [Найдите момент речи перед монтажом видео](https://bigchange.ai/blog/find-spoken-moment-before-video-editing) — Связанный материал BIG CHANGE находит фрагменты расшифровки с таймкодами. Этот процесс продолжается до пяти утверждённых вырезок, локальных субтитров, вертикального рендеринга и полной проверки; это отдельная задача, а не датированное продолжение той же истории.
Рассылка BIG CHANGE
Общая картина. В вашем темпе.
Свежие материалы об ИИ и робототехнике, важные перемены и практические идеи. Выберите ежедневную сводку, еженедельный дайджест или ежемесячный обзор.
Следующая запланированная отправка (UTC): . Первый выпуск придёт при следующей запланированной отправке после подтверждения подписки.
Ваша конфиденциальность — ваш выбор.
Необходимое хранилище помогает защитить сайт и запомнить ваши настройки. Необязательная Google Analytics отключена, пока вы её не разрешите. Все статьи доступны для чтения только с необходимым хранилищем. Подробнее о конфиденциальности