CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-bytedeco--ffmpeg

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

Pending
Overview
Eval results
Files

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

Install with Tessl CLI

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