Skip to main content

PyAV extension with hardware encoding/decoding support on Nvidia GPUs.

Project description

PyAV-CUDA

PyPI version

PyAV-CUDA is an extension of PyAV that adds support for hardware-accelerated video decoding using Nvidia GPUs. It integrates with FFmpeg and PyTorch, providing CUDA-accelerated kernels for efficient color space conversion.

Installation

  1. Build and install FFmpeg with hardware acceleration support.

  2. To enable hardware acceleration in PyAV, it needs to be reinstalled from source. Assuming FFmpeg is installed in /opt/ffmpeg, run:

    pip uninstall av
    PKG_CONFIG_LIBDIR="/opt/ffmpeg/lib/pkgconfig" pip install av --no-binary av --no-cache
    

    If the installation was successful, h264_cuvid should appear between the available codecs:

    import av
    print(av.codecs_available)
    
  3. Install PyAV-CUDA:

    PKG_CONFIG_LIBDIR="/opt/ffmpeg/lib/pkgconfig" CUDA_HOME="/usr/local/cuda" pip install avcuda
    
  4. Test the installation by running python examples/benchmark_decode.py. The output should show something like:

    Running CPU decoding... took 34.99s
    Running GPU decoding... took 8.30s
    

Usage

Decoding

import av
import avcuda

CUDA_DEVICE = 0

with av.open("video.mp4") as container:
    stream = container.streams.video[0]
    avcuda.init_hwcontext(stream.codec_context, CUDA_DEVICE)

    for avframe in container.decode(stream):
        frame_tensor = avcuda.to_tensor(avframe, CUDA_DEVICE)

Encoding

import av
import avcuda

CUDA_DEVICE = 0

NUM_FRAMES = 100
FPS = 30
WIDTH = 640
HEIGHT = 480

with av.open("video.mp4", "w") as container:
    stream = container.add_stream("h264_nvenc", rate=FPS)
    stream.pix_fmt, stream.width, stream.height = "yuv420p", WIDTH, HEIGHT

    avcuda.init_hwcontext(stream.codec_context, CUDA_DEVICE)

    for _ in range(NUM_FRAMES):
        frame_tensor = torch.randint(0, 255, (HEIGHT, WIDTH, 3), dtype=torch.uint8, device=CUDA_DEVICE)
        avframe = avcuda.from_tensor(frame_tensor, stream.codec_context) 

        for packet in stream.encode(avframe):
            container.mux(packet)

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

avcuda-0.2.1.tar.gz (7.3 kB view details)

Uploaded Source

File details

Details for the file avcuda-0.2.1.tar.gz.

File metadata

  • Download URL: avcuda-0.2.1.tar.gz
  • Upload date:
  • Size: 7.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for avcuda-0.2.1.tar.gz
Algorithm Hash digest
SHA256 5c2f064339eb54cf36d8cb84f96ac6091ef1f2c5e36c12882bd3a1b359299ae5
MD5 d5727e35051e822609124bdf9bba3c8b
BLAKE2b-256 708d1ecf2241f130ab3e3dcab37d5a636b12a0a1a25b3fb994ff5722fc7562a5

See more details on using hashes here.

Supported by

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