or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

audio-processing.mdcodec-operations.mdcommand-line-tools.mdconstants-enums.mdcryptographic-security.mddevice-io.mdformat-handling.mdhardware-acceleration.mdindex.mdmedia-filtering.mdpostproc.mdscaling-conversion.md
tile.json

tessl/maven-org-bytedeco--ffmpeg

JavaCPP bindings for FFmpeg multimedia framework providing comprehensive Java access to audio/video encoding, decoding, filtering, and format conversion

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/org.bytedeco/ffmpeg@7.1.x

To install, run

npx @tessl/cli install tessl/maven-org-bytedeco--ffmpeg@7.1.0

index.mddocs/

JavaCPP FFmpeg Bindings

JavaCPP FFmpeg bindings provide comprehensive Java access to FFmpeg 7.1.1, the complete multimedia framework for audio/video encoding, decoding, transcoding, filtering, and streaming. This library enables Java developers to harness FFmpeg's powerful C/C++ libraries through a type-safe Java API.

Package Information

  • Package Name: org.bytedeco:ffmpeg
  • Package Type: maven
  • Language: Java
  • Installation:
    <dependency>
      <groupId>org.bytedeco</groupId>
      <artifactId>ffmpeg-platform</artifactId>
      <version>7.1.1-1.5.12</version>
    </dependency>

Core Imports

Core FFmpeg functionality access:

import org.bytedeco.ffmpeg.avcodec.*;
import org.bytedeco.ffmpeg.avformat.*;
import org.bytedeco.ffmpeg.avutil.*;
import org.bytedeco.ffmpeg.avfilter.*;
import org.bytedeco.ffmpeg.swscale.*;
import org.bytedeco.ffmpeg.swresample.*;

import static org.bytedeco.ffmpeg.global.avcodec.*;
import static org.bytedeco.ffmpeg.global.avformat.*;
import static org.bytedeco.ffmpeg.global.avutil.*;
import static org.bytedeco.ffmpeg.global.swscale.*;

Command-line tool access:

import org.bytedeco.ffmpeg.ffmpeg;
import org.bytedeco.ffmpeg.ffprobe;
import org.bytedeco.javacpp.Loader;

Basic Usage

import org.bytedeco.ffmpeg.avformat.*;
import org.bytedeco.ffmpeg.avcodec.*;
import org.bytedeco.ffmpeg.avutil.*;
import static org.bytedeco.ffmpeg.global.avformat.*;
import static org.bytedeco.ffmpeg.global.avcodec.*;
import static org.bytedeco.ffmpeg.global.avutil.*;

// Open video file and read frames
AVFormatContext formatContext = new AVFormatContext(null);
AVPacket packet = new AVPacket();

// Open input file
int result = avformat_open_input(formatContext, "input.mp4", null, null);
if (result < 0) {
    throw new RuntimeException("Cannot open file");
}

// Find stream information
avformat_find_stream_info(formatContext, (PointerPointer)null);

// Find video stream
int videoStreamIndex = -1;
for (int i = 0; i < formatContext.nb_streams(); i++) {
    if (formatContext.streams(i).codecpar().codec_type() == AVMEDIA_TYPE_VIDEO) {
        videoStreamIndex = i;
        break;
    }
}

// Set up decoder
AVCodecContext codecContext = avcodec_alloc_context3(null);
avcodec_parameters_to_context(codecContext, formatContext.streams(videoStreamIndex).codecpar());
AVCodec codec = avcodec_find_decoder(codecContext.codec_id());
avcodec_open2(codecContext, codec, (PointerPointer)null);

// Read frames
AVFrame frame = av_frame_alloc();
while (av_read_frame(formatContext, packet) >= 0) {
    if (packet.stream_index() == videoStreamIndex) {
        avcodec_send_packet(codecContext, packet);
        while (avcodec_receive_frame(codecContext, frame) >= 0) {
            // Process frame data
            System.out.println("Frame: " + frame.width() + "x" + frame.height());
        }
    }
    av_packet_unref(packet);
}

// Cleanup
av_frame_free(frame);
avcodec_free_context(codecContext);
avformat_close_input(formatContext);

Architecture

JavaCPP FFmpeg bindings are organized into several key modules:

  • Global Modules: Static native method wrappers (org.bytedeco.ffmpeg.global.*) providing direct access to FFmpeg C functions
  • Data Structure Classes: Java representations of FFmpeg structs (org.bytedeco.ffmpeg.avcodec.*, etc.) with memory management
  • Preset Classes: Compilation configuration for native library integration (org.bytedeco.ffmpeg.presets.*)
  • Executable Wrappers: Access to command-line tools (ffmpeg, ffprobe) for external process execution
  • Memory Management: Reference-counted buffers via AVBuffer system with automatic garbage collection integration

Capabilities

Format Handling (Muxing/Demuxing)

Container format operations for reading and writing media files. Supports all major formats including MP4, AVI, MKV, MOV, WebM, and streaming protocols.

int avformat_open_input(AVFormatContext ctx, String filename, AVInputFormat fmt, PointerPointer options);
int avformat_find_stream_info(AVFormatContext ctx, PointerPointer options);
int av_read_frame(AVFormatContext ctx, AVPacket pkt);
int av_write_frame(AVFormatContext ctx, AVPacket pkt);

Format Handling

Codec Operations (Encoding/Decoding)

Audio and video encoding/decoding with support for all major codecs including H.264, H.265, VP9, AV1, AAC, MP3, and many others.

AVCodec avcodec_find_encoder(int id);
AVCodec avcodec_find_decoder(int id);
AVCodecContext avcodec_alloc_context3(AVCodec codec);
int avcodec_open2(AVCodecContext avctx, AVCodec codec, PointerPointer options);
int avcodec_send_packet(AVCodecContext avctx, AVPacket avpkt);
int avcodec_receive_frame(AVCodecContext avctx, AVFrame frame);

Codec Operations

Media Filtering

Comprehensive audio and video filtering pipeline for effects, transformations, format conversions, and complex processing graphs.

AVFilterGraph avfilter_graph_alloc();
int avfilter_graph_create_filter(AVFilterContext filt_ctx, AVFilter filt, 
    String name, String args, Pointer opaque, AVFilterGraph graph_ctx);
int avfilter_graph_config(AVFilterGraph graphctx, Pointer log_ctx);

Media Filtering

Scaling and Format Conversion

Video scaling, pixel format conversion, and color space transformations with optimized implementations.

SwsContext sws_getContext(int srcW, int srcH, int srcFormat, 
    int dstW, int dstH, int dstFormat, int flags,
    SwsFilter srcFilter, SwsFilter dstFilter, DoublePointer param);
int sws_scale(SwsContext c, PointerPointer srcSlice, IntPointer srcStride,
    int srcSliceY, int srcSliceH, PointerPointer dst, IntPointer dstStride);

Scaling and Format Conversion

Audio Processing

Audio resampling, channel layout conversion, and sample format transformations for comprehensive audio processing.

SwrContext swr_alloc();
int swr_init(SwrContext s);
int swr_convert(SwrContext s, PointerPointer out, int out_count,
    PointerPointer in, int in_count);

Audio Processing

Device I/O

Device enumeration and access for cameras, microphones, and other multimedia input/output devices across platforms.

int avdevice_list_devices(AVFormatContext s, AVDeviceInfoList device_list);
int avdevice_list_input_sources(AVInputFormat device, String device_name,
    AVDictionary device_options, AVDeviceInfoList device_list);

Device I/O

Command-Line Tools

Direct access to ffmpeg and ffprobe executables for complex operations and external processing workflows.

// Access via Loader.load() for process execution
String ffmpegPath = Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);
String ffprobePath = Loader.load(org.bytedeco.ffmpeg.ffprobe.class);

Command-Line Tools

Video Post-Processing

Video enhancement and quality improvement through deblocking, deringing, and color correction filters for decoded video content.

pp_context pp_get_context(int width, int height, int flags);
pp_mode pp_get_mode_by_name_and_quality(String name, int quality);
void pp_postprocess(PointerPointer src, IntPointer srcStride,
                   PointerPointer dst, IntPointer dstStride,
                   int horizontalSize, int verticalSize,
                   BytePointer QP_store, int QP_stride,
                   pp_mode mode, pp_context ppContext, int pict_type);

Video Post-Processing

Hardware Acceleration

GPU and specialized hardware acceleration support for high-performance encoding, decoding, and processing with CUDA, VAAPI, DXVA2, VideoToolbox, and other acceleration APIs.

int av_hwdevice_find_type_by_name(String name);
AVBufferRef av_hwdevice_ctx_alloc(int type);
int av_hwdevice_ctx_create(@ByPtrPtr AVBufferRef device_ctx, int type,
                          String device, AVDictionary opts, int flags);
int av_hwframe_transfer_data(AVFrame dst, AVFrame src, int flags);
AVCodecHWConfig avcodec_get_hw_config(AVCodec codec, int index);

Hardware Acceleration

Cryptographic and Security Features

Cryptographic functions and security features for multimedia data protection, including AES encryption, hash functions, and media content encryption support.

AVAES av_aes_alloc();
int av_aes_init(AVAES a, byte[] key, int key_bits, int decrypt);
void av_aes_crypt(AVAES a, byte[] dst, byte[] src, int count, byte[] iv, int decrypt);
int av_hash_alloc(@ByPtrPtr AVHashContext ctx, String name);
void av_hash_update(AVHashContext ctx, BytePointer src, int len);
void av_hash_final(AVHashContext ctx, BytePointer dst);

Cryptographic and Security Features

Constants and Enumerations

Comprehensive reference of constants, enumerations, and compile-time values for configuration, error handling, and API parameters.

// Media types, pixel formats, sample formats
int AVMEDIA_TYPE_VIDEO = 0;
int AV_PIX_FMT_YUV420P = 0;
int AV_SAMPLE_FMT_FLTP = 8;

// Codec IDs
int AV_CODEC_ID_H264 = 27;
int AV_CODEC_ID_AAC = 86018;

// Error codes
int AVERROR_EOF();
int AVERROR_EAGAIN();

Constants and Enumerations

Core Data Structures

AVFrame

The fundamental structure for raw audio/video data.

class AVFrame extends Pointer {
    AVFrame av_frame_alloc();
    void av_frame_free(AVFrame frame);
    int av_frame_ref(AVFrame dst, AVFrame src);
    void av_frame_unref(AVFrame frame);
    
    // Data access
    PointerPointer data();
    IntPointer linesize();
    int width();
    int height();
    int format();
    long pts();
}

AVPacket

Container for compressed/encoded media data.

class AVPacket extends Pointer {
    AVPacket av_packet_alloc();
    void av_packet_free(AVPacket pkt);
    int av_packet_ref(AVPacket dst, AVPacket src);
    void av_packet_unref(AVPacket pkt);
    
    // Packet properties
    BytePointer data();
    int size();
    long pts();
    long dts();
    int stream_index();
    int flags();
}

AVFormatContext

Container format context for input/output operations.

class AVFormatContext extends Pointer {
    AVFormatContext avformat_alloc_context();
    void avformat_free_context(AVFormatContext s);
    
    // Stream access
    int nb_streams();
    PointerPointer streams();
    AVInputFormat iformat();
    AVOutputFormat oformat();
    
    // Metadata
    AVDictionary metadata();
    long duration();
    long bit_rate();
}

Error Handling

FFmpeg functions typically return negative values for errors. Use AVERROR macros for error checking:

int result = avformat_open_input(formatContext, filename, null, null);
if (result < 0) {
    if (result == AVERROR_ENOENT()) {
        throw new FileNotFoundException("File not found: " + filename);
    } else {
        throw new RuntimeException("Failed to open file, error code: " + result);
    }
}

Memory Management

JavaCPP handles Java-to-native memory mapping automatically, but explicit cleanup is required for native contexts:

// Always pair allocation with deallocation
AVFrame frame = av_frame_alloc();
try {
    // Use frame
} finally {
    av_frame_free(frame);
}

// Use reference counting for shared resources
AVPacket packet = av_packet_alloc();
AVPacket copy = av_packet_alloc();
av_packet_ref(copy, packet); // Increment reference count
av_packet_unref(copy); // Decrement reference count
av_packet_free(packet); // Final cleanup