Skip to main content

Python SDK for the Very Good FFmpeg API

Project description

very-good-ffmpeg

Python SDK for the Very Good FFmpeg API — run FFmpeg jobs in the cloud.

PyPI

Homepage · API Docs · GitHub

Installation

pip install very-good-ffmpeg

Usage

import os
from very_good_ffmpeg import VGF

client = VGF(os.environ["VGFFMPEG_API_KEY"])

# Create a job and wait for it to complete
job = client.run(
    input_files={"input": "https://example.com/input.mp4"},
    output_files=["output.mp4"],
    ffmpeg_commands=["-i {{input}} -vf scale=1280:720 {{output.mp4}}"],
    wait=True,
)

print(job.status)       # "succeeded"
print(job.output_files) # {"output.mp4": "https://..."}

Async is also supported — use arun, jobs.aget, jobs.alist, jobs.acancel, files.aupload, etc.

import asyncio, os
from very_good_ffmpeg import VGF

async def main():
    client = VGF(os.environ["VGFFMPEG_API_KEY"])
    job = await client.arun(
        input_files={"input": "https://example.com/input.mp4"},
        output_files=["output.mp4"],
        ffmpeg_commands=["-i {{input}} -vf scale=1280:720 {{output.mp4}}"],
        wait=True,
    )
    print(job.status)

asyncio.run(main())

Reference

Create a job — client.run(...) / client.arun(...)

Submits an FFmpeg job. Pass wait=True to block until the job reaches a terminal state.

job = client.run(
    input_files={"input": "https://example.com/input.mp4"},
    output_files=["output.mp4"],
    ffmpeg_commands=["-i {{input}} -c:v libx264 {{output.mp4}}"],
    webhook_url="https://example.com/webhook",  # optional
    machine="nvidia",  # optional: "cpu" | "nvidia"
    wait=True,
)

Get a job — client.jobs.get(id) / client.jobs.aget(id)

job = client.jobs.get("job_abc123")
print(job.status)  # "queued" | "running" | "succeeded" | "failed" | "cancelled"

List jobs — client.jobs.list(...) / client.jobs.alist(...)

Returns a JobList with data (list of jobs) and paging_params.

result = client.jobs.list(limit=20, offset=0)
print(result.data)          # list[Job]
print(result.paging_params) # PagingParams(limit=20, offset=0, total=100, has_more=True)

Cancel a job — client.jobs.cancel(id) / client.jobs.acancel(id)

job = client.jobs.cancel("job_abc123")
print(job.status)  # "cancelled"

Poll until done — job.wait(...) / job.async_wait(...)

job = client.run(input_files=..., output_files=..., ffmpeg_commands=...)
job.wait(timeout=120)
print(job.status)

Upload a file — client.files.upload(data, content_type?) / client.files.aupload(...)

Upload bytes or a file path to temporary storage and get back a URL you can use as an input_files value.

with open("input.mp4", "rb") as f:
    download_url = client.files.upload(f.read(), "video/mp4")

job = client.run(
    input_files={"input": download_url},
    output_files=["output.mp4"],
    ffmpeg_commands=["-i {{input}} -vf scale=1280:720 {{output.mp4}}"],
)

Pass a file path directly to have the SDK read it for you:

download_url = client.files.upload("input.mp4")

Prepare upload — client.files.prepare() / client.files.aprepare()

Returns a TmpFile with upload_url and download_url if you need to stream a large file yourself.

tmp = client.files.prepare()
# PUT your file to tmp.upload_url, then use tmp.download_url as input

Examples

See examples/example/main.py for a runnable example covering both sync and async usage.

cd examples/example
pip install -r requirements.txt
VGFFMPEG_API_KEY=your_key python main.py

Support

Open an issue at github.com/verygoodffmpeg/Very-Good-FFmpeg-Python-SDK or email please_help@verygoodffmpeg.com.

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

very_good_ffmpeg-1.1.0.tar.gz (3.8 MB view details)

Uploaded Source

Built Distribution

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

very_good_ffmpeg-1.1.0-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file very_good_ffmpeg-1.1.0.tar.gz.

File metadata

  • Download URL: very_good_ffmpeg-1.1.0.tar.gz
  • Upload date:
  • Size: 3.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Hatch/1.16.5 cpython/3.14.4 HTTPX/0.28.1

File hashes

Hashes for very_good_ffmpeg-1.1.0.tar.gz
Algorithm Hash digest
SHA256 c481e3924f0b8a4d8f158325424c192bd16b2adfdd5d6d18373b3e09793d8e9a
MD5 c5d70c4f42e6a17328f8b688406b514d
BLAKE2b-256 50ee88f0abf5820a591138b237778dbb67c50fccf319691808ca4979ef408351

See more details on using hashes here.

File details

Details for the file very_good_ffmpeg-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: very_good_ffmpeg-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 6.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Hatch/1.16.5 cpython/3.14.4 HTTPX/0.28.1

File hashes

Hashes for very_good_ffmpeg-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e60dabe885eadcfbb48aee31bfaafb1a0be61ba16bb36a84ceef45ff7c78a465
MD5 cf3164f1d46a10f6640e9ebadf91e27c
BLAKE2b-256 b4d51307c67078ed0b7bd1b65e8ec3af13a7ac455eab1b374ad7a24340d3017e

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