PPT Audio To Video

👤 lzfxxx 📦 v0.1.0 ⭐ 4.2 ⬇️ 1.4K 下載
🎨 設計多媒體 免費

📖 技能介紹

PPT Audio To Video

Use this skill when the source video has narration audio but no usable slide visuals, and the final deliverable should be a slide-based lecture video.

Resolve bundled scripts relative to this skill directory. If the runtime has already opened this SKILL.md, prefer paths like scripts/extract_slide_outline.py and scripts/render_from_timing_csv.py instead of machine-specific absolute paths.

Core workflow

  1. Inventory inputs.

    • Confirm which of these exist: audio-only mp4/m4a/mp3/wav, ppt/pptx, pdf, and any pre-rendered slide images.
    • Prefer an existing pdf or image directory for rendering. Treat pptx as the source of slide text and as a fallback for export.
  2. Prepare tools.

    • Required for deterministic steps: ffmpeg, ffprobe, pdftoppm.
    • Required for transcription: whisper-cli from whisper-cpp plus a multilingual model such as ggml-small.bin.
    • If only pptx exists and no pdf/images exist, prefer Keynote or PowerPoint export on macOS. Use soffice only as fallback because profile or rendering issues are common.
  3. Produce slide images.

    • If pdf exists, render it to images:
      pdftoppm -png -r 200 "$PDF" "$OUTDIR/slide"
    • If only pptx exists, export to pdf or slide images with Keynote or PowerPoint, then continue from pdf.
    • Keep slide filenames ordered and stable, such as slide-01.png, slide-02.png, ...
  4. Extract slide text.

    • Run:
      python3 scripts/extract_slide_outline.py \
      --pptx "$PPTX" \
      --out "$WORKDIR/slide_outline.csv"
    • Use the output to identify slide titles, distinctive keywords, and section changes.
  5. Extract clean audio for ASR.

    • For audio-only mp4, extract mono wav:
      ffmpeg -y -i "$AUDIO_MP4" -ar 16000 -ac 1 -c:a pcm_s16le "$WORKDIR/audio.wav"
    • If the source is already wav/mp3/m4a, convert to the same mono wav form if needed.
  6. Transcribe with whisper-cli.

    • Example:
      whisper-cli -ng \
      -m "$MODEL" \
      -f "$WORKDIR/audio.wav" \
      -l zh \
      -ocsv -osrt -of "$WORKDIR/transcript"
    • Prefer transcript.csv for downstream parsing. transcript.srt is useful for manual review.
    • If GPU allocation fails on macOS, retry with -ng to force CPU mode.
  7. Build slide_timings.csv.

    • Do not average slide durations unless the user explicitly asks for it.
    • Read the transcript and slide outline together, then create a monotonic timing plan by topic changes, section boundaries, and unique keywords.

      小蔥技能7w4.net有更新,你可以訪問看下。

    • Use this schema:
      slide,start_sec,end_sec,duration_sec,reason
      1,0.000,15.000,15.000,opening title and agenda
      2,15.000,100.000,85.000,architecture overview starts here
    • Keep slide numbers sequential and ensure duration_sec = end_sec - start_sec.
    • Validate that the last end_sec matches the audio duration or is within a small tolerance.
  8. Render the final video.

    • Run:
      python3 scripts/render_from_timing_csv.py \
      --images "$SLIDE_IMAGES_DIR" \
      --timings "$WORKDIR/slide_timings.csv" \
      --audio "$WORKDIR/audio.wav" \
      --output "$OUT_VIDEO"
    • The script generates an ffconcat file, validates timing continuity, and calls ffmpeg to encode the final mp4.
  9. Verify and iterate.

    • Check output duration with ffprobe.
    • If a slide cuts too early or too late, edit only the affected rows in slide_timings.csv and rerun the render script.
    • Keep the transcript, outline, and timing CSV as reproducible working files.

Heuristics for timing alignment

  • Use section-divider slides briefly. These slides usually hold for 5-20 seconds.
  • Use the first segment that clearly switches topic as the next slide start.
  • Prefer exact topic transitions over title-word matching. ASR often distorts proper nouns and product names.
  • Let the model infer timings, but keep the render step deterministic through slide_timings.csv.
  • When confidence is low, produce a first-cut video and tell the user which slide boundaries likely need review.

Common commands

Install dependencies on macOS if missing:

brew install ffmpeg poppler whisper-cpp

Typical multilingual model download:

mkdir -p .models
curl -L 'https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small.bin' -o .models/ggml-small.bin

Bundled scripts

  • scripts/extract_slide_outline.py Extract slide text from pptx into CSV or JSON for timing analysis.
  • scripts/render_from_timing_csv.py Validate a timing CSV, generate an ffconcat, and render the final video with ffmpeg.

🤖 AI 評測

這個工具整體質量不錯,能較好地將音訊旁白與幻燈片合成影片。文件說明詳細,流程清晰,兩個指令碼執行穩定。主要優點是工作流完整、驗證機制可靠。不足之處是使用前需要手動安裝多個外部工具和 Python 庫,對新手不太友好;另外有些步驟需要手動執行,自動化程度可以進一步提高。

📊 多維度評分

適應性4.4
規範性4.2
有效性4.4
可靠性3.8
可信度4.5

📁 包含檔案 (4 個)

📄 SKILL.md 4.9 KB
📄 _meta.json 137 B
📄 scripts/extract_slide_outline.py 2 KB
📄 scripts/render_from_timing_csv.py 5.2 KB