PyAV extension with hardware encoding/decoding support on Nvidia GPUs.
Project description
PyAV-CUDA
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
-
Build and install FFmpeg with hardware acceleration support.
-
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)
-
Install PyAV-CUDA:
PKG_CONFIG_LIBDIR="/opt/ffmpeg/lib/pkgconfig" CUDA_HOME="/usr/local/cuda" pip install avcuda
-
Test the installation by running
python examples/benchmark.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
File details
Details for the file avcuda-0.2.0.tar.gz
.
File metadata
- Download URL: avcuda-0.2.0.tar.gz
- Upload date:
- Size: 9.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e5094d0607abb16ce624a055a88d88694883d3d93385d51b4356bae7c54e5f75 |
|
MD5 | 6da04bd3d5758c343d4185d61b6a12d9 |
|
BLAKE2b-256 | 4057869826dbfec69cd0e4cbfcff1b2c369a2dc2640f0e709142ee906987d6f6 |