EL MUNDO NO SE DETIENE.RSS
BIG CHANGE.
BIG CHANGE, a un toque
BIG CHANGE, a un toque

Haz sitio para una visión amplia.

Agrega BIG CHANGE a tu pantalla de inicio o escritorio. Se abre en su propia ventana, con las historias más recientes cuando estás en línea.

iPhone y iPad
Abre bigchange.ai en Safari. Toca Compartir y luego Agregar a inicio. Activa Abrir como app web si aparece y después toca Agregar.
Android
Abre bigchange.ai en Chrome. En el menú del navegador, elige «Instalar aplicación» o «Añadir a la pantalla de inicio».
Escritorio
En Chrome o Edge, usa el icono de instalación de la barra de direcciones o el menú de aplicaciones del navegador. En Safari para Mac, elige Archivo → Añadir al Dock.

Edición en Markdown

AI-translated from English; not yet reviewed by a fluent editor.

# Convierte un vídeo largo autorizado en cinco cortos verticales comprobados

> Un proceso basado en documentación para cinco fragmentos contrastados con la fuente, con subtítulos corregidos, encuadre vertical y revisión humana.

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

![Conceptual charcoal illustration of five upright unbranded phones in a wall shelf, each showing a generic vertical image with a blank orange caption bar.](https://bigchange.ai/api/media/file/owned-video-five-shorts-hero-v1.png)
AI-generated conceptual illustration by BIG CHANGE.

Una grabación puede aportar varios fragmentos cortos, pero una transcripción no decide si un extracto respeta el contexto, y exportar a 1080 × 1920 no demuestra que se vea bien. Esta guía usa cinco habilidades de proyecto de Claude Code, invocadas manualmente, para organizar el trabajo: transcribir, clasificar, cortar, subtitular y exportar. Un editor humano aprueba cada intervalo de origen y ve cada archivo terminado. El proceso es para un vídeo propio o con derechos expresos de edición y difusión.

Esta receta se basa en documentación y está dirigida a Terminal de macOS con zsh. BIG CHANGE no ejecutó estos comandos, inspeccionó material privado ni produjo los cinco archivos. Comprueba la ayuda de las herramientas instaladas y tus medios reales antes de seguirla. La ilustración principal representa conceptualmente los cinco vídeos verticales que revisaría un creador. No son fragmentos reales, resultados de software ni una prueba de BIG CHANGE del procedimiento.

## El gran cambio

- **Qué cambió:** Las habilidades de proyecto de Claude Code pueden dividir una edición local de vídeo en cinco etapas invocadas manualmente. Los registros propuestos conectan tiempos de origen, cortes aprobados, subtítulos corregidos y archivos finales; la documentación de las herramientas no demuestra que esta cadena concreta haya funcionado.
- **Por qué importa:** Un creador con material autorizado puede dar al editor una decisión concreta en cada etapa, incluida la de si existen cinco extractos distintos. Esa estructura permite rechazar un corte débil o engañoso antes de exportarlo con subtítulos.
- **Qué vigilar:** La decisión de compartir sigue dependiendo de los derechos, la política de datos de la cuenta Claude elegida y la reproducción completa de cada MP4 guardado. Superar una comprobación técnica del archivo no resuelve esas cuestiones.

## Antes de empezar

Necesitas un archivo local `source.mp4` con audio utilizable, almacenamiento suficiente, acceso a Claude Code, un ejecutable local whisper.cpp operativo `whisper-cli` y un modelo compatible con el idioma, además de FFmpeg y ffprobe con los codificadores y filtros necesarios. También necesitas un editor que compruebe la grabación y las cinco exportaciones. Registra la cuenta de Claude Code y su política de datos, versiones instaladas, commit o compilación de whisper.cpp, SHA-256 y licencia del modelo y límites de uso. Claude Code puede usar un modelo alojado aunque la transcripción y exportación sean locales. Dale acceso solo a transcripciones o medios permitidos por tus derechos y la política de la cuenta. Sus [instrucciones de habilidad](https://code.claude.com/docs/en/skills) no restringen el acceso. Los [controles de permisos de herramientas](https://code.claude.com/docs/en/permissions) son independientes y regulan las llamadas; según los ajustes, las lecturas habituales pueden ejecutarse sin preguntar. Revisa expresamente qué puede leer la habilidad, además de lo que propone escribir o ejecutar.

Coloca una copia inmutable del original y `rights.json` en una carpeta local nueva y fiable para esta ejecución. El registro de derechos debe identificar SHA-256 del original, editor, extractos y usos posteriores permitidos, permisos de personas, música e imágenes y normas de almacenamiento y conservación. No sigas con derechos inciertos. Abre Terminal en esa carpeta, comprueba `pwd`y crea las carpetas de trabajo:

```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
```

Define `WHISPER_CLI` y `WHISPER_MODEL` con rutas absolutas reales entre comillas. Define `LANGUAGE` con el código verificado del idioma hablado, por ejemplo `en` solo si el audio está en inglés. Confirma que el modelo lo admite; un modelo exclusivamente inglés `.en` no cubre otro idioma. Los idiomas mixtos o incompatibles requieren un plan comprobado antes de continuar. La [referencia CLI de whisper.cpp](https://github.com/ggml-org/whisper.cpp/blob/master/examples/cli/README.md) documenta `-l`, `-m`, `-f`, `-osrt`, `-oj` y `-of`; verifícalos en la ayuda de tu compilación. No actives su opción de traducción.

```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
```

Sustituye las rutas y el idioma de ejemplo antes de ejecutar nada. Comprueba duración, pistas, orientación, audio y espacio libre. Confirma que el filtro instalado `subtitles` tiene soporte libass y que `scale` acepta `force_original_aspect_ratio`, `force_divisible_by` y `reset_sar`. Si falta una función, sigue las instrucciones de compilación de los mantenedores y repite las comprobaciones. No elimines silenciosamente los subtítulos.

## Crea cinco habilidades de proyecto delimitadas

En el proyecto fiable, guarda cinco archivos separados `.claude/skills/<name>/SKILL.md` . Cada uno necesita su propio `name`, `description`, `disable-model-invocation: true`y una regla completa de entrada, acción, salida y parada. Invócalos manualmente en este orden: `/video-transcribe`, `/video-rank`, `/video-cut`, `/video-caption`, `/video-vertical`. No añadas `allowed-tools`: Claude Code indica que este campo permite usar las herramientas listadas sin confirmación durante la invocación; no limita la habilidad a ellas. Conserva los permisos normales y revisa el acceso expresamente. Una lectura puede no preguntar, mientras que escrituras y ejecución siguen los controles reales de la cuenta.

Usa estos contenidos completos con el registro común descrito a continuación. El texto de una habilidad instruye a Claude Code; no es una barrera técnica de acceso.

**`.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.
```

Conserva un único `manifest.json` para la ejecución. En cada entrega registra derechos y SHA-256 inmutable del original, versiones de herramientas, SHA-256, licencia e idioma del modelo, entradas y salidas con SHA-256, intervalos numéricos aprobados, comandos exactos y decisiones UTC. Si cambia un archivo o hash identificado, detente y resuélvelo antes de la siguiente habilidad.

Trata cada bloque de comandos como una etapa en un script zsh nuevo o una sesión controlada, con `set -e` para detener la etapa si falla un comando. Comprueba que cada ruta de salida esté libre y registra salidas no cero, archivos ausentes o escrituras inciertas como bloqueos en el manifiesto. La habilidad siguiente debe leer ese estado y el hash de salida; no puede aceptar un corte fallido porque exista un fragmento antiguo.

## 1. Transcribe el original

El [README de los mantenedores de whisper.cpp](https://github.com/ggml-org/whisper.cpp/blob/master/README.md) indica que el ejemplo CLI requiere actualmente WAV de 16 bits. Tras confirmar el audio de origen, ejecuta lo siguiente desde la carpeta verificada. `-n` impide que FFmpeg sobrescriba un WAV existente.

```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
```

Confirma que `transcript/source.srt` y `.json` existen, contienen habla con marcas temporales y quedan dentro de la duración de origen comprobada. Escucha pasajes representativos y verifica nombres, cifras y citas dudosas en el original. Conserva una transcripción corregida o marcas explícitas de incertidumbre. Si la extracción o transcripción queda vacía, revisa pista, ejecutable, idioma y compatibilidad del modelo antes de intentar otra salida con nombre único.

## 2. Selecciona cinco momentos del original

Invoca `/video-rank` con la transcripción comprobada y el público. Pide más de cinco propuestas para que el editor descarte extractos débiles. Exige segundos numéricos de inicio y fin desde el comienzo del original, palabras pronunciadas, contexto anterior y posterior y motivo por el que cada fragmento se entiende solo. Abre cada intervalo en el original. El editor decide si se conservan hablante, texto, contexto visual, hechos y permisos. Guarda exactamente cinco intervalos distintos aprobados en `approved-moments.json`; incluye orden, hash de origen y `0 <= start < end <= source duration`. Un pasaje transcrito solo sirve para localizar. Para la tarea más limitada de encontrar marcas temporales, consulta [Encuentra el momento hablado antes de editar un vídeo](https://bigchange.ai/blog/find-spoken-moment-before-video-editing).

Si la grabación no contiene cinco momentos defendibles, detente. La tarea de cinco archivos sigue incompleta.

## 3. Corta los intervalos aprobados

Invoca `/video-cut`. Para cada intervalo, calcula `DURATION = END - START` desde sus límites numéricos aprobados. Sustituye los marcadores entre ángulos por cifras reales; los marcadores no se pueden ejecutar. Repite con `clip-02.mp4` hasta `clip-05.mp4`. FFmpeg documenta búsqueda en la entrada, duración, selección explícita de pistas y [salidas sin sobrescritura](https://ffmpeg.org/ffmpeg.html). Transcodifica en lugar de copiar las pistas directamente para los límites de corte previstos.

```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
```

Comprueba pistas y duración de cada fragmento real, inspecciona el primer y último fotograma y míralo entero. Registra hash e intervalo aprobado. Un corte incorrecto necesita nuevos límites aprobados y otro nombre de salida. Si falla un comando o hay incertidumbre, inspecciona el archivo existente y su análisis antes de repetir; nunca dirijas un reintento al mismo nombre.

## 4. Corrige los subtítulos con cada corte real

Invoca `/video-caption`. Transcribe cada fragmento aceptado porque sus subtítulos deben empezar en cero al inicio del corte. Para el fragmento 01, los comandos son:

```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
```

Repite con el número real de dos dígitos de 02 a 05 y rutas distintas. Conserva cada archivo bruto `captions/clip-NN.srt`. El editor compara cada segmento de subtítulo con el fragmento, corrige palabras, nombres y cifras, comprueba tiempos y legibilidad y guarda `captions/clip-NN.checked.srt`. Un subtítulo fuera de la duración impide exportar. Vincula cada hash SRT con el hash del fragmento. Si cambia el corte, regenera o vuelve a verificar los subtítulos sobre el nuevo archivo.

## 5. Reencuadra, exporta y acepta los cinco

Invoca `/video-vertical`. Para cada fragmento aceptado, examina la imagen decodificada, orientación, relación de aspecto del píxel y movimiento. El editor elige para ese fragmento sus propios enteros pares `CROP_W`, `CROP_H`, `CROP_X`, `CROP_Y`. El rectángulo debe caber en el fotograma decodificado. Un recorte fijo no sigue al sujeto en movimiento; si pierde contenido esencial, elige un plan revisado de escalado con márgenes o cambia el corte. Una rotación o coordenadas inciertas detienen la exportación. El [manual de filtros FFmpeg](https://ffmpeg.org/ffmpeg-filters.html) describe crop, scale, pad y el filtro subtitles basado en libass.

Desde la carpeta establecida, define `CLIP` con el número real de dos dígitos y las cuatro variables de recorte con los enteros aprobados para ese fragmento. El comando es una plantilla, no un ejemplo probado. Mantén la ruta relativa sencilla de subtítulos mostrada; los caracteres especiales en nombres necesitan escape específico para el grafo de filtros. Repite por separado de 02 a 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"
```

En cada uno de los cinco JSON de análisis exige una pista de vídeo a 1080 × 1920 con relación de aspecto del píxel 1:1, una pista de audio y duración positiva coherente con el corte aprobado tras el redondeo de codificación o fotogramas. Un valor ausente o desconocido queda sin resolver. [La salida JSON de ffprobe](https://ffmpeg.org/ffprobe.html) comprueba propiedades, no la calidad del montaje. Reabre y mira cada MP4 completo, comparándolo con el intervalo original, el corte aceptado y el SRT comprobado. Revisa límites de frases, subtítulos y posición segura, encuadre durante el movimiento, sincronización, hechos y derechos. Registra aceptar, revisar o rechazar con hora UTC en el manifiesto. Completan la tarea cinco archivos aceptados, cada uno vinculado a hash de origen, intervalo aprobado, hash del fragmento, hash SRT y JSON de análisis. Cuatro no bastan.

## Límites y recuperación

El acceso a Claude Code puede implicar un plan o cargo de API y límites de uso. Descargar un modelo local, transcribir, transcodificar y revisar consume almacenamiento y cómputo. Registra cargos reales si la cuenta los muestra; un coste desconocido no es cero. No se han medido velocidad, exactitud, calidad de subtítulos, ahorro ni popularidad para esta receta.

Conserva el original y los resultados aceptados. Ante un modelo ausente, opción incompatible, mala transcripción, exportación fallida o escritura incierta, comprueba los hashes exactos y el archivo existente antes de cambiar nada. Corrige la causa concreta, asigna una nueva ruta a la revisión y repite el análisis y la reproducción completa. No subas ni compartas un corto hasta que el editor haya aceptado contenido y derechos.

## Sources

- [Habilidades de Claude Code](https://code.claude.com/docs/en/skills) — Anthropic documenta SKILL.md de proyecto, invocación manual y que allowed-tools concede temporalmente uso sin confirmación. No demuestra ningún resultado de edición de vídeo.
- [Permisos de Claude Code](https://code.claude.com/docs/en/permissions) — Anthropic documenta un sistema de permisos independiente. El texto de la habilidad no impone límites de acceso o subida de medios; revisa ajustes de cuenta y proyecto, incluidas lecturas que pueden ocurrir sin preguntar.
- [README de whisper.cpp](https://github.com/ggml-org/whisper.cpp/blob/master/README.md) — Las instrucciones de compilación y modelos de los mantenedores y el ejemplo actual whisper-cli describen el requisito WAV de 16 bits y la conversión con FFmpeg. Comprueba compilación y modelo por separado.
- [README CLI de whisper.cpp](https://github.com/ggml-org/whisper.cpp/blob/master/examples/cli/README.md) — El CLI de los mantenedores enumera -m, -f, -l, -osrt, -oj, -of y -tr. La guía fija un idioma verificado y mantiene la traducción desactivada; transcribir localmente no garantiza palabras o tiempos correctos.
- [Documentación de comandos FFmpeg](https://ffmpeg.org/ffmpeg.html) — Referencia para búsqueda en entrada, -t, -map explícito, transcodificación y -n. Hay que inspeccionar límites y resultados reales; no se prescribe copiar pistas directamente.
- [Documentación de filtros FFmpeg](https://ffmpeg.org/ffmpeg-filters.html) — Referencia de crop, scale, pad y subtitles. Este último requiere libass y bibliotecas auxiliares; comprueba las opciones scale de tu compilación.
- [Documentación ffprobe](https://ffmpeg.org/ffprobe.html) — Referencia de salidas de pistas y formatos legibles por máquinas. Un análisis no demuestra contexto, subtítulos legibles, sincronización, exactitud factual ni derechos.
- [Encuentra el momento hablado antes de editar un vídeo](https://bigchange.ai/blog/find-spoken-moment-before-video-editing) — La cobertura relacionada de BIG CHANGE localiza pasajes transcritos con tiempos. Esta guía continúa hasta cinco cortes aprobados, subtítulos locales, exportación vertical y revisión completa: es una tarea distinta, no una continuación fechada.