Tools for video and audio editing
Project description
mixing
Tools for video and audio editing in Python — slicing, fades, audio replace/mix, Ken Burns, thumbnails, subtitles, speech-to-text + filler removal, TTS dubbing, and chapter detection.
pip install mixing
🤖 AI-first: start with the skills & agents
mixing is built to be driven by AI coding agents. The fastest, most reliable
way to use it is through the bundled skills and agents in
.claude/ — task-oriented playbooks that encode the right
functions, the calling conventions, and the gotchas, so an agent gets it right
the first time.
Skills (.claude/skills/) — how to use mixing for a task:
| Skill | Use it for |
|---|---|
mixing |
Start here — router, architecture, the output protocol, extras |
mixing-audio |
slice, fade, crop, concat, overlay, normalize, align, segment audio |
mixing-video |
slice, crop, loop, speed, replace/normalize audio, Ken Burns, thumbnails, subtitles |
mixing-transcript |
transcribe, remove fillers, SRT/prose, chapters |
mixing-dubbing |
TTS re-voicing & SRT translation |
Agents (.claude/agents/):
mixing-editor— performs an editing task end-to-end ("edit this media …").mixing-dev— works on the mixing codebase.
Using Claude Code? These are discovered automatically from .claude/. The
architectural contract they share lives in .claude/CLAUDE.md.
Quick start
import mixing # cheap: no moviepy/opencv loaded yet
assert mixing.has_ffmpeg() # most ops need ffmpeg on PATH
# --- audio ---
from mixing.audio import Audio
Audio("song.mp3")[10:30].fade_in(2).fade_out(3).save(output="clip.mp3")
# --- video ---
from mixing.video import replace_audio, ken_burns_video
replace_audio("clip.mp4", "music.mp3", mix_ratio=0.7, output="mixed.mp4")
ken_burns_video("cover.jpg", duration=8, output="cover.mp4")
# --- transcript: remove "uh"/"um" (ElevenLabs Scribe + ffmpeg) ---
from mixing.transcript import remove_fillers
result = remove_fillers("talk.mov", "out/") # uses $ELEVENLABS_API_KEY
print(result.cleaned_media)
Core ideas (learn once)
The output protocol. Every result-producing function takes one output
argument whose role is constant and type is open:
crop_video("in.mp4", 5, 15, output="out.mp4") # file → writes it, returns Path
crop_video("in.mp4", 5, 15, output="clips/") # dir → auto-named file inside
crop_video("in.mp4", 5, 15) # None → saves beside the input
fade_in("in.mp3", output=lambda audio: audio) # callable → receives the result
Object producers (audio editing) return the in-memory object when output=None,
so you can chain and save when ready. Functions that emit several artifacts
qualify the destinations (remove_fillers(media, output_dir=…, output_media=…)).
Lazy & tiered. import mixing (and import mixing.chapters /
mixing.srt) pull no heavy backends; moviepy/opencv/pydub load only when you
touch a name that needs them. Import the facade (mixing.Video) or the
subpackage (from mixing.video import Video).
Sliceable media. Audio and Video are lazy, sliceable, context-managed
views:
from mixing.video import Video
with Video("movie.mp4") as v:
v[10:30].save(output="cut.mp4") # seconds; v[100] returns a single frame
Requirements
- ffmpeg on PATH (most operations). macOS:
brew install ffmpeg; Debian/Ubuntu:sudo apt install ffmpeg; Windows: download from ffmpeg.org and addbinto PATH. - ElevenLabs API key for
mixing.transcript/mixing.dubbing(ELEVENLABS_API_KEY, or passapi_key=). Responses are cached on disk, so re-runs are free and offline. - Google Cloud auth for AI video generation
(
mixing.video.genai, Vertex AI Veo).
Optional extras
pip install mixing[audio] # pydub / ffmpeg-python / soundfile
pip install mixing[widget] # interactive Jupyter audio widget
pip install mixing[gen] # Google Vertex AI Veo generation
pip install mixing[llm] # aix — chapter titling + SRT translation
pip install mixing[clipboard] # get file paths from the clipboard
What's inside
| Subpackage | Highlights |
|---|---|
mixing.audio |
Audio, fade_in/out, crop_audio, concatenate_audio, overlay_audio, find_audio_offset, find_segments/extract_segments |
mixing.video |
Video, crop_video, loop_video, change_speed, replace_audio, normalize_audio, ken_burns_video/ken_burns_film, concatenate_videos, make_thumbnail, write_subtitles_in_video, SOCIAL_SIZES |
mixing.video.genai |
generate_video (Vertex AI Veo) |
mixing.transcript |
transcribe, remove_fillers, srt_for_media, words_to_srt/words_to_prose |
mixing.chapters |
detect_chapters, Chapter |
mixing.dubbing |
text_to_speech, list_voices, translate_srt, dub_video_from_srt |
mixing.srt |
Cue, parse_srt, dump_srt, seconds_to_srt_time |
See the skills for the full, example-driven API of each.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mixing-0.0.25.tar.gz.
File metadata
- Download URL: mixing-0.0.25.tar.gz
- Upload date:
- Size: 23.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0a101e3518231c5dd115e45a3c20b97d3ae1d0534ed6599ef6892eb62f80b175
|
|
| MD5 |
ce8a4fbad2ff2537adc2b3936d822a63
|
|
| BLAKE2b-256 |
e65e0915596504dc25285639a5b48d74616960fadf45b34b77c3ddfd9e293dce
|
File details
Details for the file mixing-0.0.25-py3-none-any.whl.
File metadata
- Download URL: mixing-0.0.25-py3-none-any.whl
- Upload date:
- Size: 162.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
93894d2396825bd30f1692c1a1b738c92a583785760f722016ff7ede69d6c393
|
|
| MD5 |
1f950ff651ded3aecad16dc5c9d8b6aa
|
|
| BLAKE2b-256 |
09dc92f1bc23d1c0af78800d198e24e99d4d3985676add9f3a2dc581d54f6182
|