Communitygithub.com

达里亚视频编辑套件 (darija-video-editing)

为摩洛哥达里亚语(الدارجة المغربية)素材量身定制的端到端视频编辑流水线,涵盖移动MTP摄入、轻量代理生成、达里亚语音识别及YouTube长视频转Shorts变现。

达里亚视频编辑套件 (darija-video-editing) 是什么?

该技能提供一套完整的视频编辑流水线,专门用于处理使用摩洛哥达里亚语(الدارجة المغربية)拍摄的高码率手机素材,并集成到Storyteller FilmCraft编辑器中。它解决了四个关键难题:通过带断点续传的MTP摄入应对USB传输中断;生成960×720分辨率、-bf 0和fastdecode优化的轻量代理文件,实现零延迟回放并节省96%以上磁盘空间;使用faster-whisper(--language ar)进行达里亚语词级转录,并通过stdin流式传输安全注入FilmCraft,避免ARG_MAX限制。此外,流水线支持先汇编长视频时间线,再从中提取9:16竖版Shorts,并通过YouTube“相关视频”功能将Shorts流量导向长视频,促进频道增长。支持Fiveer-whisper、FilmCraft CLI和Python脚本,适用于MotionCam Pro等设备拍摄的4K素材。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/EmbeddedMhawar/darija-video-editing/tree/HEAD/skills/darija-video-editing

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

达里亚视频编辑套件 (darija-video-editing) 是做什么的?

专为使用摩洛哥达里亚语(الدارجة المغربية)拍摄的高码率手机素材(MotionCam Pro / Android / Open Gate)量身定制的完整流水线,集成于Storyteller FilmCraft编辑器。

解决了达里亚手机视频制作的四个关键难题:

  1. MTP总线停滞与断开:弹性顺序文件拉取,支持基于字节级别的断点续传。
  2. 播放延迟与磁盘膨胀:超紧凑960×720帧内友好代理(-bf 0, -tune fastdecode),解码速度达138+ fps,节省**>96%**磁盘空间。
  3. FilmCraft语言不匹配:使用faster-whisper(--language ar)替代默认英语转录,通过stdin安全流式传输词级时间戳,规避Linux ARG_MAX上限。
  4. YouTube增长协同:先构建长视频叙事结构,再衍生出高留存率的9:16竖版Shorts,直接通过YouTube“相关视频”功能链接。

5阶段操作协议

[手机 (MTP)] ──> 步骤1: mtp_ingest.py ──> [原始素材]
                       │
                       ├──> 步骤2: generate_proxies.py ──> [960x720代理文件 (~1.5GB)]
                       │
                       ├──> 步骤3: darija_transcribe.py ──> [词级时间戳]
                       │
                       └──> 步骤4: filmcraft_pipeline.py ──> [LongForm_Fisik101.fcproj]
                                                                     │
                                                       (审核通过的主剪辑)
                                                                     │
                                                       步骤5: 9:16 Shorts产线

阶段1: 移动端与MTP弹性摄入

手机拍摄素材(例如MotionCam Pro 4K/UHD Open Gate)通过USB传输时会产生40–100 GB文件。标准的GVFS/MTP GUI复制时常在长时间传输过程中崩溃或卡死。

运行弹性顺序摄入工具:

python3 scripts/mtp_ingest.py \
  --dst "/path/to/project/raw_footage" \
  --pattern "*.mov" \
  --date "YYMMDD"
  • 智能分块续传:如果10 GB文件传输中途中断,引擎会读取磁盘上已有的字节数,定位到精确偏移量,然后只追加剩余分块,无需重新下载之前数GB数据。
  • 顺序线程:强制严格单文件顺序传输,防止MTP协议管道冲突。

阶段2: 轻量级编辑代理(对磁盘与CPU友好)

原始4000×3008素材在标准CPU上播放低于实时速度(约18 fps)。这些代理文件可实现即时、零延迟的时间线浏览,同时仅占用原始磁盘空间的不到4%:

python3 scripts/generate_proxies.py \
  --input "/path/to/project/raw_footage" \
  --output-dir "/path/to/project/proxies" \
  --width 960 \
  --crf 24
  • 规格:
    • 缩放:960×720(精确4:3)或 960×540(16:9)。
    • 零B帧(-bf 0)与GOP 60:即时帧搜索,零预测性帧间解码延迟。
    • Fastdecode调优(-tune fastdecode):禁用高复杂度CABAC和环内去块滤波;在FilmCraft中解码速度达138+ fps。
    • 音频直通(-c:a copy):逐位无损复制原始48 kHz立体声音频,保留清晰的波形和对话同步在音轨A1上。
    • 磁盘占用:1小时4K素材总计约~1.5 GB(节省>96%空间)。

阶段3: 摩洛哥达里亚语音识别与原生FilmCraft注入

FilmCraft的原生自动转录默认为英语("defaultLanguage": "en")。使用达里亚转录引擎提取词级时间戳:

uv run --python 3.12 --with "faster-whisper" --with "av<14" python3 \
  scripts/darija_transcribe.py \
  --input "/path/to/clip.mov" \
  --output "/path/to/transcripts/clip.json" \
  --model small \
  --language ar

安全的Stdin转录注入(绕过ARG_MAX)

长剪辑(>5分钟)会产生数千个带时间戳的词。通过命令行字符串传递会导致OSError: [Errno 7] Argument list too long。

始终使用filmcraft-cli run -通过stdin流式传输JSON命令负载:

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
)

阶段4: 长视频时间线主汇编

通过一个命令套件编排整个FilmCraft项目和时间线:

# 1. 初始化主4K序列(V1-V3, A1-A3)
python3 scripts/filmcraft_pipeline.py init \
  --project "/path/to/LongForm_Fisik101.fcproj" \
  --sequence-name "Master Assembly" \
  --width 3840 --height 2160 --fps 24.0

# 2. 批量导入所有原始素材
python3 scripts/filmcraft_pipeline.py import \
  --project "/path/to/LongForm_Fisik101.fcproj" \
  --media "/path/to/raw_footage"

# 3. 按时间顺序将剪辑放入V1/A1轨道
python3 scripts/filmcraft_pipeline.py assemble \
  --project "/path/to/LongForm_Fisik101.fcproj"

# 4. 为所有项目附加生成的代理文件
python3 scripts/filmcraft_pipeline.py attach-proxies \
  --project "/path/to/LongForm_Fisik101.fcproj" \
  --proxies-dir "/path/to/proxies"

# 5. 为所有项目注入达里亚转录
python3 scripts/filmcraft_pipeline.py attach-transcripts \
  --project "/path/to/LongForm_Fisik101.fcproj" \
  --transcripts-dir "/path/to/transcripts"

全局偏好设置

确认~/.local/share/filmcraft/preferences.json中包含以下设置,以确保FilmCraft启动时自动默认使用代理播放:

"enableProxies": true

阶段5: YouTube增长与Shorts衍生产线(@fisik101)

一旦长视频主剪辑完成并得到批准:

  1. 策略性发布节奏:
    • 长视频:每周1到2个视频(两次上传间隔48–72小时,以便浏览与推荐算法建立索引)。
    • Shorts:每天2到3个Shorts,间隔3到4小时(例如 GMT+1 13:00、17:00、21:00)。
  2. 相关视频流量漏斗:
    • 对于每个从长视频衍生的Shorts,在YouTube Studio中将其“相关视频”链接设置为父级长视频。
    • 将Shorts的大量观看转化为长视频的观看时长和频道订阅者。
  3. Shorts画布与样式:
    • 9:16竖版画布(1080×1920)。
    • 高对比度动态字幕位于麦克风/胸部安全区内(margin_v: ~420px)。
    • 钩子→故事→回报结构(死寂>0.4秒被切除,保留80毫秒辅音保护缓冲)。

相关技能