Darija Video Editing Suite (darija-video-editing)
Pipeline integral adaptado a grabaciones de cámara móvil de alta tasa de bits (MotionCam Pro / Android / Open Gate) que hablan Darija marroquí (الدارجة المغربية) y editadas en Storyteller FilmCraft.
Resuelve los cuatro obstáculos críticos de la producción de video móvil en darija:
- Bloqueos y desconexiones del bus MTP: Extracción secuencial resiliente de archivos con reanudación por fragmentos a nivel de byte.
- Retraso en la reproducción y desperdicio de disco en la máquina: Proxies de edición ultracompactos 960×720 preparados para intra-cuadros (
-bf 0,-tune fastdecode) que se decodifican a 138+ fps y ahorran >96% de espacio en disco. - Desajuste de idioma en FilmCraft: Reemplaza la transcripción predeterminada en inglés con
faster-whisper(--language ar), transmitiendo de forma segura las marcas de tiempo de las palabras mediantestdinpara evitar los límites deARG_MAXde Linux. - Sinergia de crecimiento en YouTube: Primero estructura la narración maestra de larga duración, luego genera Shorts verticales 9:16 de alta retención vinculados directamente a través de embudos de "Video relacionado" de YouTube.
Protocolo operativo de 5 fases
[Teléfono (MTP)] ──> Paso 1: mtp_ingest.py ──> [Material bruto]
│
├──> Paso 2: generate_proxies.py ──> [Proxies 960x720 (~1.5 GB)]
│
├──> Paso 3: darija_transcribe.py ──> [Marcas de tiempo de palabras]
│
└──> Paso 4: filmcraft_pipeline.py ──> [LongForm_Fisik101.fcproj]
│
(Corte maestro aprobado)
│
Paso 5: Embudo de Shorts 9:16
Fase 1: Ingesta resiliente móvil y MTP
Las grabaciones de cámara móvil (por ejemplo, MotionCam Pro 4K/UHD open gate) generan archivos de 40–100 GB a través de USB. Las copias GUI estándar de GVFS/MTP se bloquean o congelan en transferencias largas.
Ejecute la herramienta de ingesta secuencial resiliente:
python3 scripts/mtp_ingest.py \
--dst "/ruta/al/proyecto/material_bruto" \
--pattern "*.mov" \
--date "YYMMDD"
- Reanudación inteligente de fragmentos: Si un archivo de 10 GB se interrumpe a la mitad, el motor lee el recuento de bytes existente en el disco, busca ese desplazamiento exacto y agrega los fragmentos restantes sin descargar los gigabytes anteriores.
- Enhebrado secuencial: Impone transferencias estrictas de un solo archivo para evitar colisiones en el conducto del protocolo MTP.
Fase 2: Proxies de edición ultraligeros (aptos para disco y CPU)
El material bruto de 4000×3008 cae por debajo de la reproducción en tiempo real en CPUs estándar (~18 fps). Estos proxies ofrecen un desplazamiento instantáneo y sin retardo en la línea de tiempo mientras consumen menos del 4% del espacio en disco original:
python3 scripts/generate_proxies.py \
--input "/ruta/al/proyecto/material_bruto" \
--output-dir "/ruta/al/proyecto/proxies" \
--width 960 \
--crf 24
- Especificaciones:
- Escala:
960×720(4:3 exacto) o960×540(16:9). - Cero B-Frames (
-bf 0) y GOP 60: Búsqueda instantánea de cuadros sin retardo de decodificación predictiva entre cuadros. - Ajuste Fastdecode (
-tune fastdecode): Desactiva CABAC de alta complejidad y el desbloqueo en bucle; se decodifica a 138+ fps en FilmCraft. - Paso directo de audio (
-c:a copy): Copia bit a bit sin pérdidas del audio estéreo original de 48 kHz, preservando formas de onda limpias y sincronización de diálogos en la pista A1. - Huella en disco: ~1.5 GB en total para más de 1 hora de material 4K (>96% de espacio ahorrado).
- Escala:
Fase 3: Reconocimiento de voz en Darija marroquí e inyección nativa en FilmCraft
La transcripción automática nativa de FilmCraft tiene como valor predeterminado el inglés ("defaultLanguage": "en"). Use el motor de transcripción en darija para extraer marcas de tiempo a nivel de palabra:
uv run --python 3.12 --with "faster-whisper" --with "av<14" python3 \
scripts/darija_transcribe.py \
--input "/ruta/al/clip.mov" \
--output "/ruta/a/transcripciones/clip.json" \
--model small \
--language ar
Inyección segura de transcripciones por stdin (evitando ARG_MAX)
Los clips largos (>5 minutos) producen miles de palabras con marcas de tiempo. Pasarlos a través de cadenas de línea de comandos provoca OSError: [Errno 7] Argument list too long.
Transmita siempre la carga útil del comando JSON a través de stdin usando filmcraft-cli run -:
import json, subprocess
TICKS_PER_SEC = 254016000000
cmd_obj = {
"id": "transcript.set",
"params": {
"item": item_id,
"transcript": {
"language": "ar",
"speakers": [{"name": "Speaker 1"}],
"words": [
{
"text": w["word"],
"start": int(round(w["start"] * TICKS_PER_SEC)),
"end": int(round(w["end"] * TICKS_PER_SEC)),
"speaker": 0
}
for w in words_data
]
}
}
}
subprocess.run(
["filmcraft-cli", "--project", "project.fcproj", "--save", "run", "-"],
input=json.dumps(cmd_obj) + "\n",
text=True
)
Fase 4: Ensamblaje maestro de la línea de tiempo de larga duración
Orqueste todo el proyecto y la línea de tiempo de FilmCraft con un solo conjunto de comandos:
# 1. Inicializar secuencia maestra 4K (V1-V3, A1-A3)
python3 scripts/filmcraft_pipeline.py init \
--project "/ruta/a/LongForm_Fisik101.fcproj" \
--sequence-name "Ensamblaje maestro" \
--width 3840 --height 2160 --fps 24.0
# 2. Importar todo el material bruto por lotes
python3 scripts/filmcraft_pipeline.py import \
--project "/ruta/a/LongForm_Fisik101.fcproj" \
--media "/ruta/al/material_bruto"
# 3. Ensamblar clips cronológicamente en la pista V1 / A1
python3 scripts/filmcraft_pipeline.py assemble \
--project "/ruta/a/LongForm_Fisik101.fcproj"
# 4. Adjuntar proxies generados a todos los elementos
python3 scripts/filmcraft_pipeline.py attach-proxies \
--project "/ruta/a/LongForm_Fisik101.fcproj" \
--proxies-dir "/ruta/a/proxies"
# 5. Inyectar transcripciones en darija a todos los elementos
python3 scripts/filmcraft_pipeline.py attach-transcripts \
--project "/ruta/a/LongForm_Fisik101.fcproj" \
--transcripts-dir "/ruta/a/transcripciones"
Configuración de preferencias globales
Asegúrese de que FilmCraft reproduzca automáticamente los proxies al inicio confirmando ~/.local/share/filmcraft/preferences.json:
"enableProxies": true
Fase 5: Crecimiento en YouTube y embudo de derivación de Shorts (@fisik101)
Una vez que el corte maestro de larga duración esté pulido y aprobado:
- Cadencia estratégica de publicación:
- Larga duración: 1 a 2 videos por semana (48–72 horas entre subidas para permitir que los algoritmos de Explorar y Sugeridos indexen).
- Shorts: 2 a 3 Shorts por día, espaciados 3 a 4 horas (por ejemplo, 13:00, 17:00, 21:00 GMT+1).
- El embudo de video relacionado:
- Para cada Short extraído del maestro de larga duración, establezca el enlace de "Video relacionado" en YouTube Studio al video de larga duración padre.
- Convierte las vistas de alto volumen de Shorts directamente en tiempo de visualización de larga duración y suscriptores del canal.
- Lienzo y estilo de formato corto:
- Lienzo vertical 9:16 (1080×1920).
- Subtítulos cinéticos de alto contraste en la zona segura del micrófono/pecho (
margin_v: ~420px). - Estructura de Gancho $\rightarrow$ Historia $\rightarrow$ Remate (el silencio $>0.4$s se elimina con un búfer de protección de consonantes de 80 ms).