Skip to main content

A simple tool to make the video, audio, subtitle and video-url (especially youtube) content into a written markdown files with the ability to rewritten the oral expression into written ones, or translating the content into a target language by using LLM.

Project description

Wenbi

Wenbi converts media and text into structured Markdown, then rewrites or translates it.

It supports:

  • Video/audio/URL transcription to VTT/Markdown
  • Text rewriting (rewrite, academic style)
  • Translation (translate) with DeepL first, then LLM fallback
  • English interview rewriting (en-en) with speaker-separated output
  • Chinese interview rewriting (zh-zh) with speaker-separated output
  • English/Chinese bilingual audio extraction (en-zh) — keep English, translate to Chinese
  • Single-language multi-speaker diarization (speaker) with rewrite + translate
  • PPT-style slide + speech combination (ppt)
  • Batch directory processing (wenbi-batch) PyPI Downloads

Install

Prerequisites:

  • Python 3.10+
  • ffmpeg in PATH

Install:

pip install wenbi

Or from a local checkout:

# from the project directory
pip install -e .

Quick Start

Rewrite:

wenbi rewrite input.mp4 --lang Chinese --llm ollama/qwen3.5:cloud

Translate (DeepL first):

wenbi translate input.md --lang Chinese --deepl-key "$DEEPL_API_KEY"

English interview rewrite:

wenbi en-en interview.mp4 --gladia-key "$GLADIA_API_KEY"

Chinese interview rewrite:

wenbi zh-zh interview.mp4 --gladia-key "$GLADIA_API_KEY"

English/Chinese bilingual audio (keep English, translate to Chinese):

wenbi en-zh bilingual.mp4 --gladia-key "$GLADIA_API_KEY"

Single-language multi-speaker (diarize, rewrite, translate):

wenbi speaker panel.mp4 --source-lang en --gladia-key "$GLADIA_API_KEY"

PPT workflow:

wenbi ppt lecture.mp4 --lang English

Commands

rewrite (rw)

Rewrite spoken/transcribed text into written style.

wenbi rewrite <input> [options]

Key options:

  • --style rewrite|academic
  • --lang
  • --llm
  • --cite-timestamps
  • --start-time, --end-time (media/URL)

translate (tr)

Translate content to a target language.

wenbi translate <input> --lang <target> [options]

Key options:

  • --deepl-key (or DEEPL_API_KEY env var)
  • --llm (fallback model)
  • --keep-original-lang
  • --cite-timestamps

Translation behavior

translate uses this order:

  1. Try DeepL API first (when key is available).
  2. If DeepL is unavailable or chunk translation fails, fallback to LLM.

If both DeepL and LLM are unavailable, translation cannot complete successfully.

en-en (enen)

Transcribe an English interview, separate speaker turns, and rewrite it as polished written English using ollama/qwen3.5:cloud by default.

wenbi en-en <input> [options]

Key options:

  • --speaker-count (default: 2)
  • --asr-provider auto|gladia|sensevoice|whisper
  • --gladia-key (or GLADIA_API_KEY env var)
  • --llm (default: ollama/qwen3.5:cloud)
  • --start-time, --end-time (media/URL)

The rewrite preserves speaker labels and adds a ## Questions for Clarification section when speaker roles, names, terms, or ambiguous ASR phrases need human confirmation.

zh-zh (zhzh)

Transcribe a Chinese interview, separate speaker turns, and rewrite it as polished written Chinese using ollama/qwen3.5:cloud by default.

wenbi zh-zh <input> [options]

Key options:

  • --speaker-count (default: 2)
  • --asr-provider auto|gladia|sensevoice|whisper
  • --gladia-key (or GLADIA_API_KEY env var)
  • --llm (default: ollama/qwen3.5:cloud)
  • --start-time, --end-time (media/URL)

The rewrite preserves speaker labels and adds a ## 需要确认的问题 section when speaker roles, names, terms, or ambiguous ASR phrases need human confirmation.

en-zh (enzh)

Extract English from English/Chinese bilingual audio (e.g. interpreted interviews), drop the interpreter language, and translate the kept English into Chinese using DeepL first with LLM fallback.

wenbi en-zh <input> [options]

Key options:

  • --asr-provider auto|gladia|sensevoice|whisper (default: gladia)
  • --source-lang (default: en) — language to keep
  • --interpreter-lang (default: zh) — language to drop
  • --gladia-key (or GLADIA_API_KEY env var)
  • --lang — target translation language (default: Chinese)
  • --no-speaker-labels — disable speaker diarization
  • --save-json — write segment diagnostics and raw provider JSON
  • --start-time, --end-time (media/URL)

Outputs include the kept-language VTT/Markdown, a bilingual Markdown side-by-side, and (optionally) a rewritten English Markdown and diagnostics JSON.

speaker (sp)

Transcribe single-language multi-speaker audio with diarization, then rewrite and translate it. Same engine as en-en/zh-zh but without the interview-style rewrite defaults — use it for panels, podcasts, and any multi-speaker source where you want to keep the source language.

wenbi speaker <input> [options]

Key options:

  • --asr-provider auto|gladia|sensevoice|whisper (default: gladia)
  • --source-lang (default: en)
  • --speaker-count (default: provider decides)
  • --gladia-key (or GLADIA_API_KEY env var)
  • --lang — target translation language (default: Chinese)
  • --no-speaker-labels — disable speaker diarization
  • --save-json — write segment diagnostics and raw provider JSON
  • --start-time, --end-time (media/URL)

Outputs a transcript VTT, transcript Markdown, rewritten Markdown, and (when translation is requested) a bilingual Markdown.

ppt (p)

Extract slides from video, align with speech, and export combined markdown.

wenbi ppt <video_or_url> [options]

Key options:

  • --frame-interval
  • --cropped-slide [auto|x0,y0,x1,y1]
  • --ppt <ppt/pdf/image/odp>
  • --no-ocr
  • --no-clean
  • --ssim-threshold, --hist-threshold, --dedup-method

Supported Inputs

  • Media: .mp4 .avi .mov .mkv .flv .wmv .m4v .webm .mp3 .flac .aac .ogg .m4a .opus
  • Text/subtitles: .vtt .srt .ass .ssa .sub .smi .txt .md .markdown .docx
  • URL inputs are supported for media flows.

Common Global Options

Used by subcommands:

  • --output-dir
  • --lang
  • --llm
  • --chunk-length
  • --max-tokens
  • --timeout
  • --temperature
  • --transcribe-model
  • --transcribe-lang
  • --multi-language
  • --verbose

Output Files

Typical outputs:

  • *_rewritten.md
  • *_translated.md
  • *_academic.md
  • *_en.md, *_en.vtt (English interview transcripts)
  • *_zh.md, *_zh.vtt (Chinese interview transcripts)
  • *_bilingual.md (en-zh and speaker translated output)
  • *_diagnostics.json (when --save-json is used)
  • *_combine.md / *_combine_clean.md (PPT workflows)
  • *.vtt, *.csv (depending on flow)

Batch Processing

Process a directory of media files:

wenbi-batch <input_dir> --output-dir <dir> --md

Optional config:

wenbi-batch <input_dir> --config config.yaml

YAML Config (CLI)

wenbi supports YAML via --config.

Example:

input: lecture.mp4
output_dir: ./out
llm: ollama/qwen3.5:cloud
lang: Chinese
chunk_length: 20

Multi-input format is also supported using inputs:.

Python API

from wenbi.main import process_input

text, md_file, csv_file, base_name = process_input(
    file_path="input.mp4",
    subcommand="translate",
    lang="Chinese",
    use_deepl=True,
    deepl_key="<DEEPL_KEY>",
    llm="ollama/qwen3.5:cloud",
)

Troubleshooting

  • No DeepL translation output:
    • Set DEEPL_API_KEY or --deepl-key
    • Run with --verbose to confirm DeepL connectivity
  • Fallback LLM not working:
    • Ensure your provider is reachable (for example, Ollama running locally for ollama/...)
  • PPT OCR issues:
    • Ensure marker_single and OCR dependencies are installed correctly

License

Apache-2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wenbi-0.141.2.tar.gz (5.0 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wenbi-0.141.2-py3-none-any.whl (99.9 kB view details)

Uploaded Python 3

File details

Details for the file wenbi-0.141.2.tar.gz.

File metadata

  • Download URL: wenbi-0.141.2.tar.gz
  • Upload date:
  • Size: 5.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.13.1

File hashes

Hashes for wenbi-0.141.2.tar.gz
Algorithm Hash digest
SHA256 0c2b0068a01b7182bfbfba673477320e8c92b280c56892c8eda1bba7248280ba
MD5 263ab44d16286e2240f36b294088d53c
BLAKE2b-256 254179d0c418bd412d91c0c08d88298c0c79228d1190d2ebbd413cc36cedf059

See more details on using hashes here.

File details

Details for the file wenbi-0.141.2-py3-none-any.whl.

File metadata

  • Download URL: wenbi-0.141.2-py3-none-any.whl
  • Upload date:
  • Size: 99.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.13.1

File hashes

Hashes for wenbi-0.141.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ef3c72f3383287a9e72b804175bde2cda04cf0ece80bd2ff68ff8f7a29286d46
MD5 ce7766e0cbc1389d9dc0487f940efd7e
BLAKE2b-256 2bc91f35738d99de2c8b435e0fdd47e108295ce4cba02d048e4b3b8dfb8b5c48

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page