Skip to main content

Vezur Video Converter

Convert local videos to MP4, MOV, MKV, or WebM from Python or your terminal. This package provides a small set of explicit FFmpeg presets, media inspection, and failure-safe output handling. It has no Python runtime dependencies.

Project homepage: Vezur AI.

Requirements and installation

  • Python 3.10 or newer.
  • A separately installed FFmpeg distribution providing both ffmpeg and ffprobe on your PATH.
  • Your FFmpeg build needs libx264 and aac for MP4/MOV/MKV, and libvpx-vp9 and libopus for WebM. Check with ffmpeg -encoders.
python -m pip install vezur-video-converter
ffmpeg -version
vezur-video --help

For example, install FFmpeg with brew install ffmpeg on macOS or sudo apt install ffmpeg on Debian/Ubuntu. On Windows, use a build linked from the FFmpeg download page and add its bin directory to PATH. You can also pass executable paths with --ffmpeg and --ffprobe.

FFmpeg is not bundled or downloaded by this package. Conversion runs locally; no Vezur account, API key, or upload is required.

Command-line examples

# MOV to MP4 (H.264 video and AAC audio)
vezur-video convert input.mov output.mp4

# MP4 to WebM (VP9 video and Opus audio)
vezur-video convert input.mp4 output.webm

# Resize proportionally and set frame rate
vezur-video convert input.mov small.mp4 --width 1280 --fps 30

# Remove audio and use a higher-quality H.264 setting
vezur-video convert input.mkv silent.mp4 --no-audio --crf 18

# Replace an existing destination only after conversion succeeds
vezur-video convert input.mov output.mp4 --overwrite --timeout 120

# JSON format/stream information, including codec, duration, and dimensions
vezur-video info output.mp4

# Available output extensions
vezur-video formats

python -m vezur_video_converter also works in place of vezur-video. Quote paths containing spaces. For an input name starting with a dash, use a path such as ./-clip.mov. The CLI returns 0 on success, 1 for processing or file errors, 2 for invalid command syntax, and 130 for interruption.

Python API

from vezur_video_converter import convert, probe

output = convert("input.mov", "output.mp4", width=1280, fps=30, timeout=120)
print(output)  # absolute pathlib.Path

metadata = probe(output)
for stream in metadata["streams"]:
    print(stream["codec_type"], stream["codec_name"])

Optional convert() arguments:

Argument Default Meaning
overwrite False Replace an existing destination only on successful conversion
width None Positive even width; height is calculated proportionally and rounded to even
fps None Finite positive output frame rate; FFmpeg may duplicate/drop frames
crf None H.264: 0–51, default 23; VP9: 0–63, default 32; lower generally means higher quality
audio True Include the first audio stream when present
timeout None Maximum FFmpeg runtime in seconds; no time limit by default
ffmpeg "ffmpeg" Executable name or path

probe() accepts timeout (default 30 seconds) and ffprobe (default "ffprobe"). Its dictionary follows ffprobe's JSON schema; many numeric values are strings, and available keys depend on the input media.

Missing binaries raise DependencyError; encoder errors or timeouts raise ConversionError. Invalid options raise ValueError. Missing files, existing destinations, and filesystem failures raise standard OSError subclasses.

Conversion behavior and limits

Output Video encoder Audio encoder Defaults
.mp4 libx264 / H.264 AAC CRF 23, medium preset, faststart
.mov libx264 / H.264 AAC CRF 23, medium preset, faststart
.mkv libx264 / H.264 AAC CRF 23, medium preset
.webm libvpx-vp9 / VP9 Opus CRF 32, constant quality with zero target bitrate
  • Input formats depend on your FFmpeg installation. Input must be a local file; remote URLs are not accepted, and network protocols are disabled for inputs.
  • Conversion re-encodes video. It is not a lossless remuxer. CRF values are not directly comparable between encoders; lower values often increase file size.
  • Only the first video and first audio stream are selected. Additional audio tracks, subtitles, data streams, chapters, and source metadata are omitted.
  • Video output uses 8-bit yuv420p. This is intended for ordinary SDR clips; HDR tone mapping, alpha preservation, and professional color workflows are outside the scope of these presets.
  • Without width, odd dimensions are padded to even dimensions by at most one pixel. With width, the height is rounded to an even value.
  • Audio defaults to 128 kbps. Silent video inputs are supported.
  • The destination directory must exist. Input and output must be different files, and symbolic-link destinations are rejected.
  • Conversion writes a temporary file beside the destination. On failure or timeout, temporary output is removed and an existing destination is preserved. Allow enough free disk space for a full output file. Without overwrite, publication uses a hard link to avoid overwriting files created concurrently; this requires a filesystem with hard-link support (such as APFS, ext4, or NTFS). On unsupported filesystems, use a supported output location or explicitly opt into overwrite=True / --overwrite.
  • This is a local command-line/library utility, not a sandbox for hostile media or a production upload service. Keep FFmpeg current and isolate untrusted processing appropriately when building a service around it.

Development

python -m venv .venv
# macOS/Linux; on Windows use .venv\Scripts\activate
source .venv/bin/activate
python -m pip install -e '.[dev]'
python -m pytest
python -m ruff check .
python -m build
python -m twine check --strict dist/*

Integration tests generate tiny synthetic video/audio files and exercise actual conversions. They are skipped if FFmpeg or ffprobe is missing. No user videos are needed. Tests require the encoders listed above.

License

The Python wrapper is MIT licensed. FFmpeg is a separate dependency with its own license and codec-related requirements; this package does not redistribute it.

Metadata

Release files for vezur-video-converter 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for vezur-video-converter 0.1.0
File Size Uploaded
vezur_video_converter-0.1.0.tar.gz 10.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for vezur-video-converter 0.1.0
File Interpreter ABI Platform
vezur_video_converter-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 20.4 kB

Release files / vezur_video_converter-0.1.0.tar.gz

Download URL vezur_video_converter-0.1.0.tar.gz
Size 10.4 kB
Tags Source
SHA-256 checksum
How to use checksums
f07572d9cd06c9f86cf2b7f78229671aa272f722723b6131abd3311c787109e3
BLAKE2b-256 checksum
How to use checksums
2f888ed7672a0c42a375d3ed53f13f279750fdaf0565c1e8fd8834cd1a07bd4c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.3

Release files / vezur_video_converter-0.1.0-py3-none-any.whl

Download URL vezur_video_converter-0.1.0-py3-none-any.whl
Size 10.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fff3cd595be2e9738d1db65ae546a3fc880506f18081674f979d9b457502a690
BLAKE2b-256 checksum
How to use checksums
63e50d78a08be42c81a951d40a837f3f648058bc8d53baa88d3456f7764602a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.3

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page