Skip to main content

A video decoder for PyTorch

Project description

Installation | Simple Example | Detailed Example | Documentation | Contributing | License

TorchCodec

TorchCodec is a Python library for decoding video and audio data into PyTorch tensors, on CPU and CUDA GPU. It also supports audio encoding, and video encoding will come soon! It aims to be fast, easy to use, and well integrated into the PyTorch ecosystem. If you want to use PyTorch to train ML models on videos and audio, TorchCodec is how you turn these into data.

We achieve these capabilities through:

  • Pythonic APIs that mirror Python and PyTorch conventions.
  • Relying on FFmpeg to do the decoding and encoding. TorchCodec uses the version of FFmpeg you already have installed. FFmpeg is a mature library with broad coverage available on most systems. It is, however, not easy to use. TorchCodec abstracts FFmpeg's complexity to ensure it is used correctly and efficiently.
  • Returning data as PyTorch tensors, ready to be fed into PyTorch transforms or used directly to train models.

Using TorchCodec

Here's a condensed summary of what you can do with TorchCodec. For more detailed examples, check out our documentation!

Decoding

from torchcodec.decoders import VideoDecoder

device = "cpu"  # or e.g. "cuda" !
decoder = VideoDecoder("path/to/video.mp4", device=device)

decoder.metadata
# VideoStreamMetadata:
#   num_frames: 250
#   duration_seconds: 10.0
#   bit_rate: 31315.0
#   codec: h264
#   average_fps: 25.0
#   ... (truncated output)

# Simple Indexing API
decoder[0]  # uint8 tensor of shape [C, H, W]
decoder[0 : -1 : 20]  # uint8 stacked tensor of shape [N, C, H, W]

# Indexing, with PTS and duration info:
decoder.get_frames_at(indices=[2, 100])
# FrameBatch:
#   data (shape): torch.Size([2, 3, 270, 480])
#   pts_seconds: tensor([0.0667, 3.3367], dtype=torch.float64)
#   duration_seconds: tensor([0.0334, 0.0334], dtype=torch.float64)

# Time-based indexing with PTS and duration info
decoder.get_frames_played_at(seconds=[0.5, 10.4])
# FrameBatch:
#   data (shape): torch.Size([2, 3, 270, 480])
#   pts_seconds: tensor([ 0.4671, 10.3770], dtype=torch.float64)
#   duration_seconds: tensor([0.0334, 0.0334], dtype=torch.float64)

Clip sampling

from torchcodec.samplers import clips_at_regular_timestamps

clips_at_regular_timestamps(
    decoder,
    seconds_between_clip_starts=1.5,
    num_frames_per_clip=4,
    seconds_between_frames=0.1
)
# FrameBatch:
#   data (shape): torch.Size([9, 4, 3, 270, 480])
#   pts_seconds: tensor([[ 0.0000,  0.0667,  0.1668,  0.2669],
#         [ 1.4681,  1.5682,  1.6683,  1.7684],
#         [ 2.9696,  3.0697,  3.1698,  3.2699],
#         ... (truncated), dtype=torch.float64)
#   duration_seconds: tensor([[0.0334, 0.0334, 0.0334, 0.0334],
#         [0.0334, 0.0334, 0.0334, 0.0334],
#         [0.0334, 0.0334, 0.0334, 0.0334],
#         ... (truncated), dtype=torch.float64)

You can use the following snippet to generate a video with FFmpeg and tryout TorchCodec:

fontfile=/usr/share/fonts/dejavu-sans-mono-fonts/DejaVuSansMono-Bold.ttf
output_video_file=/tmp/output_video.mp4

ffmpeg -f lavfi -i \
    color=size=640x400:duration=10:rate=25:color=blue \
    -vf "drawtext=fontfile=${fontfile}:fontsize=30:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2:text='Frame %{frame_num}'" \
    ${output_video_file}

Installing TorchCodec

Installing CPU-only TorchCodec

  1. Install the latest stable version of PyTorch following the official instructions. For other versions, refer to the table below for compatibility between versions of torch and torchcodec.

  2. Install FFmpeg, if it's not already installed. Linux distributions usually come with FFmpeg pre-installed. TorchCodec supports major FFmpeg versions in [4, 7] on all platforms, and FFmpeg version 8 is supported on Mac and Linux.

    If FFmpeg is not already installed, or you need a more recent version, an easy way to install it is to use conda:

    conda install "ffmpeg<8"
    # or
    conda install "ffmpeg<8" -c conda-forge
    
  3. Install TorchCodec:

    pip install torchcodec
    

The following table indicates the compatibility between versions of torchcodec, torch and Python.

torchcodec torch Python
main / nightly main / nightly >=3.10, <=3.13
0.8 2.9 >=3.10, <=3.13
0.7 2.8 >=3.9, <=3.13
0.6 2.8 >=3.9, <=3.13
0.5 2.7 >=3.9, <=3.13
0.4 2.7 >=3.9, <=3.13
0.3 2.7 >=3.9, <=3.13
0.2 2.6 >=3.9, <=3.13
0.1 2.5 >=3.9, <=3.12
0.0.3 2.4 >=3.8, <=3.12

Installing CUDA-enabled TorchCodec

First, make sure you have a GPU that has NVDEC hardware that can decode the format you want. Refer to Nvidia's GPU support matrix for more details here.

  1. Install FFmpeg with NVDEC support. TorchCodec with CUDA should work with FFmpeg versions in [4, 7] on all platforms, and FFmpeg version 8 is supported on Linux.

    If FFmpeg is not already installed, or you need a more recent version, an easy way to install it is to use conda:

    conda install "ffmpeg<8"
    # or
    conda install "ffmpeg<8" -c conda-forge
    

    After installing FFmpeg make sure it has NVDEC support when you list the supported decoders:

    ffmpeg -decoders | grep -i nvidia
    # This should show a line like this:
    # V..... h264_cuvid           Nvidia CUVID H264 decoder (codec h264)
    

    To check that FFmpeg libraries work with NVDEC correctly you can decode a sample video:

    ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i test/resources/nasa_13013.mp4 -f null -
    

Linux

  1. Install Pytorch corresponding to your CUDA Toolkit using the official instructions. You'll need the libnpp and libnvrtc CUDA libraries, which are usually part of the CUDA Toolkit.

  2. Install TorchCodec

    Pass in an --index-url parameter that corresponds to your CUDA Toolkit version, for example:

    # This corresponds to CUDA Toolkit version 12.6. It should be the same one
    # you used when you installed PyTorch (If you installed PyTorch with pip).
    pip install torchcodec --index-url=https://download.pytorch.org/whl/cu126
    

    Note that without passing in the --index-url parameter, pip installs the CPU-only version of TorchCodec.

Windows

  1. On Windows (experimental support), you'll need to rely on conda to install both pytorch and TorchCodec:

    conda install -c conda-forge "torchcodec=*=*cuda*"
    

Benchmark Results

The following was generated by running our benchmark script on a lightly loaded 22-core machine with an Nvidia A100 with 5 NVDEC decoders.

benchmark_results

The top row is a Mandelbrot video generated from FFmpeg that has a resolution of 1280x720 at 60 fps and is 120 seconds long. The bottom row is promotional video from NASA that has a resolution of 960x540 at 29.7 fps and is 206 seconds long. Both videos were encoded with libx264 and yuv420p pixel format. All decoders, except for TorchVision, used FFmpeg 6.1.2. TorchVision used FFmpeg 4.2.2.

For TorchCodec, the "approx" label means that it was using approximate mode for seeking.

Contributing

We welcome contributions to TorchCodec! Please see our contributing guide for more details.

License

TorchCodec is released under the BSD 3 license.

However, TorchCodec may be used with code not written by Meta which may be distributed under different licenses.

For example, if you build TorchCodec with ENABLE_CUDA=1 or use the CUDA-enabled release of torchcodec, please review CUDA's license here: Nvidia licenses.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

torchcodec-0.8.1-cp313-cp313-win_amd64.whl (2.1 MB view details)

Uploaded CPython 3.13Windows x86-64

torchcodec-0.8.1-cp313-cp313-manylinux_2_28_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

torchcodec-0.8.1-cp313-cp313-macosx_12_0_arm64.whl (3.9 MB view details)

Uploaded CPython 3.13macOS 12.0+ ARM64

torchcodec-0.8.1-cp312-cp312-win_amd64.whl (2.1 MB view details)

Uploaded CPython 3.12Windows x86-64

torchcodec-0.8.1-cp312-cp312-manylinux_2_28_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

torchcodec-0.8.1-cp312-cp312-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

torchcodec-0.8.1-cp311-cp311-win_amd64.whl (2.1 MB view details)

Uploaded CPython 3.11Windows x86-64

torchcodec-0.8.1-cp311-cp311-manylinux_2_28_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

torchcodec-0.8.1-cp311-cp311-macosx_11_0_arm64.whl (3.8 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

torchcodec-0.8.1-cp310-cp310-win_amd64.whl (2.1 MB view details)

Uploaded CPython 3.10Windows x86-64

torchcodec-0.8.1-cp310-cp310-manylinux_2_28_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

torchcodec-0.8.1-cp310-cp310-macosx_11_0_arm64.whl (3.3 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file torchcodec-0.8.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: torchcodec-0.8.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.2

File hashes

Hashes for torchcodec-0.8.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 eceacd3246aff417f484194c796b569dffef6f1156347418c51b0d8b9f94e31d
MD5 debbc12dfdc892b0df0b8b9d4ee8232d
BLAKE2b-256 fc7c01634d181910ef904c806b1c409e0632695885340ef79e60afd3eede91af

See more details on using hashes here.

File details

Details for the file torchcodec-0.8.1-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for torchcodec-0.8.1-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7c3a4694387be17f9bc4a031443f734a44ebba2f889d6379e3503ab49bc4c2af
MD5 8456733c88f8a193fdfc8ec3ee0fafa3
BLAKE2b-256 0a49f92dbcde288823f7478afe707d6194ba52d149025760a4c86bbc2886eeff

See more details on using hashes here.

File details

Details for the file torchcodec-0.8.1-cp313-cp313-macosx_12_0_arm64.whl.

File metadata

File hashes

Hashes for torchcodec-0.8.1-cp313-cp313-macosx_12_0_arm64.whl
Algorithm Hash digest
SHA256 7cbf4bf484cd86f57cdcec70f4ccd478a59e8ed5808482d42216b68313d1a485
MD5 7b801313eaa6453cb47665181c67267e
BLAKE2b-256 2d157422582654bd9697ea224a24a78899af280eaeb25cf01b7b414fb3fe7877

See more details on using hashes here.

File details

Details for the file torchcodec-0.8.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: torchcodec-0.8.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.2

File hashes

Hashes for torchcodec-0.8.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d9b93e08e59f842861de1e0ce7b5a4e2ad2a069ec65041dfed6978f0e6cda30c
MD5 2ed41dba124f54b8673a7445d7e6fa3e
BLAKE2b-256 db8b3d29464ebb6a85629af21f93b3f2e54223987d5d5bf1f5d0e57ee2e69b2a

See more details on using hashes here.

File details

Details for the file torchcodec-0.8.1-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for torchcodec-0.8.1-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8fc189dcb71739b89230bd56abbc721188f65d9a8c40afcc751b8d2809bbdd4d
MD5 9632777ad3031d51824fcc69182b7d39
BLAKE2b-256 5c0fdd3cf870e7ed0c62ce8ace92e862455d25f611ac8590730bd7918d3d0e6d

See more details on using hashes here.

File details

Details for the file torchcodec-0.8.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for torchcodec-0.8.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fc6f352d97eab82527d2fbf49f18f679946803d3269d6adb822859cc0bf4dd9e
MD5 dd33b57ea1a8b5672f328bf015f7c52c
BLAKE2b-256 57ca59dddea7f1010c96007098ca9b8609ffeea5147ec56a9bb492a888ee9aa1

See more details on using hashes here.

File details

Details for the file torchcodec-0.8.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: torchcodec-0.8.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.2

File hashes

Hashes for torchcodec-0.8.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1ba7dda2acd3bcd8f3a8f59b2a0faf77042456d98304f2f7d5b7d4f521ee8a53
MD5 004281f00d7cd44136b53285d9ace2d3
BLAKE2b-256 2b87469a639cca0c0742db82be3fb80c132540b430ea152079f942bd32f03282

See more details on using hashes here.

File details

Details for the file torchcodec-0.8.1-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for torchcodec-0.8.1-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 585d198f5b092e6f4aed7f1a438a6f68ee3d4ab35816a0cce9d289271d8e6fb4
MD5 ccc4b652474d40d46ef9c868cfc4f280
BLAKE2b-256 c43f2ced02dcfc2ce0f697c34922737abda6576f070d9d596f0722110d7f5aa4

See more details on using hashes here.

File details

Details for the file torchcodec-0.8.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for torchcodec-0.8.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2b8c8c32cb8f258b350baf566dfc2fe87e3fbbbe7805acf7195226d67a92d985
MD5 41f90df4a5515f3405176ddcb10a0234
BLAKE2b-256 c359600c8f9e7450705ae05c57ce08e94b09b9734a063f12e140a0b9ea33f5f4

See more details on using hashes here.

File details

Details for the file torchcodec-0.8.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: torchcodec-0.8.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.2

File hashes

Hashes for torchcodec-0.8.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 8fc2830205fa8f0969605196c3e60ca39097ade982ae4bb3bb5a620af8044521
MD5 8d7be1f7f2bee78a461d0971fe4a8be0
BLAKE2b-256 6469f859ee135931f0e424dcc70f3b61a8aa6ac109ef66b3a728a1573fb9b259

See more details on using hashes here.

File details

Details for the file torchcodec-0.8.1-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for torchcodec-0.8.1-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 de167b5a25357483ea89d54211c33ba3212e3ba426c91b6e41a9f0c51c63a946
MD5 e7db1a71a2adfc26ddaa006fabbba5b0
BLAKE2b-256 86d175f7303cc4d84e0deac6751470632002950de122aded42fdbd9b89463a97

See more details on using hashes here.

File details

Details for the file torchcodec-0.8.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for torchcodec-0.8.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 79c7f53c18168f1929c4161152c689c43da62da340e9a688aed039647dd0ff3b
MD5 d64d4a7d007e52e6ce50bc5a400d7efb
BLAKE2b-256 2e881a3e98d1872de445b1c38f93c40a55688f3a7538f32d74c5b038bc927473

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