0zi/jcodec


JCodec main repo

Download


Step 1. Add the JitPack repository to your build file

Add it in your root settings.gradle at the end of repositories:

	dependencyResolutionManagement {
		repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
		repositories {
			mavenCentral()
			maven { url 'https://jitpack.io' }
		}
	}

Add it in your settings.gradle.kts at the end of repositories:

	dependencyResolutionManagement {
		repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
		repositories {
			mavenCentral()
			maven { url = uri("https://jitpack.io") }
		}
	}

Add to pom.xml

	<repositories>
		<repository>
		    <id>jitpack.io</id>
		    <url>https://jitpack.io</url>
		</repository>
	</repositories>

Add it in your build.sbt at the end of resolvers:

 
    resolvers += "jitpack" at "https://jitpack.io"
        
    

Add it in your project.clj at the end of repositories:

 
    :repositories [["jitpack" "https://jitpack.io"]]
        
    

Step 2. Add the dependency

	dependencies {
		implementation 'com.github.0zi:jcodec:0.2.0-vg4'
	}
	dependencies {
		implementation("com.github.0zi:jcodec:0.2.0-vg4")
	}
	<dependency>
	    <groupId>com.github.0zi</groupId>
	    <artifactId>jcodec</artifactId>
	    <version>0.2.0-vg4</version>
	</dependency>

                            
    libraryDependencies += "com.github.0zi" % "jcodec" % "0.2.0-vg4"
        
        

                            
    :dependencies [[com.github.0zi/jcodec "0.2.0-vg4"]]
        
        

Readme


This is the fork of Jcodec

The intention behind this is the need of the bleeding edge build, because it seems like vg4 is not edgy enough for me(56 commits behind), please don't rely on this fork, there no guarantee that it would be stable, it's been forked just for my purposes

Installation

The SequenceEncoder8Bit does not give the correct output, consider using version 0.1.9

Add to your root build.gradle:

allprojects {
   repositories {
      // ...
      maven { url "https://jitpack.io" }
   }
}

In the app level build.gradle add the following dependency:

dependencies {
   compile 'com.github.0zi:jcodec:0.2.0-c'
}

Note: The letter "C" in the version name stands for the word "Current"


And here is the original Jcodec Readme

jcodec - a pure java implementation of video/audio codecs.

About

JCodec is a library implementing a set of popular video and audio codecs. Currently JCodec supports:

  • Video

    • H.264 Main profile decoder ( CAVLC/CABAC, I/P/B frames );
    • H.264 Baseline profile encoder ( CAVLC, I-frames only, P-frames as of version 0.2 );
    • MPEG 1/2 decoder ( I/P/B frames, interlace );
    • Apple ProRes decoder;
    • Apple ProRes encoder;
    • JPEG decoder;
  • Audio

    • SMPTE 302M decoder;
  • Wrappers ( muxers, demuxers, formats ):

    • MP4 ( ISO BMF, Apple QuickTime ) de-muxer;
    • MP4 ( ISO BMF, Apple QuickTime ) muxer;
    • MKV ( Matroska ) de-muxer;
    • MKV ( Matroska ) muxer;
    • MPEG PS ( Program Stream ) demuxer;
    • MPEG TS ( Transport Stream ) demuxer;

JCodec is free software distributed under FreeBSD License.

Future development

Those are just some of the things JCodec dev team is planning to work on:

  • Video
    • Improve H.264 encoder: CABAC, rate control;
    • Performance optimize H.264 decoder;
    • Implement H.264 encoder on RenderScript;
    • Native optimizations for decoders and encoders;
  • Audio
    • AAC encoder;

Getting started

Build from the source and include both JARs (jcodec.jar and jcodec-javase.jar) in your projects. Alternatively, obsolete versions can be included automatically with maven. For this just add below snippet to your pom.xml-

<dependency>
    <groupId>org.jcodec</groupId>
    <artifactId>jcodec-javase</artifactId>
    <version>0.1.9</version>
</dependency>

OR download it from here (you will need both jars):

There is virtually no documentation right now but the plan is to catch up on this so stay tuned. stackoverflow.com contains quite a bit information at this point. Also check the 'samples' subfolder. It's a maven project, and it contains some code samples for the popular use-cases:

Sample code

Getting a single frame from a movie ( supports only AVC, H.264 in MP4, ISO BMF, Quicktime container ):

    int frameNumber = 150;
    BufferedImage frame = AWTFrameGrab8Bit.getFrame(new File("filename.mp4"), frameNumber);
    ImageIO.write(frame, "png", new File("frame_150.png"));

Getting a sequence of frames from a movie ( supports only AVC, H.264 in MP4, ISO BMF, Quicktime container ):

    double startSec = 51.632;
    int frameCount = 10;
    FileChannelWrapper ch = null;
    try {
        ch = NIOUtils.readableChannel(new File("filename.mp4"));
        AWTFrameGrab8Bit fg = AWTFrameGrab8Bit.createAWTFrameGrab8Bit(ch);
        fg.seekToSecondPrecise(startSec);
        for (int i = 0; i < frameCount; i++) {
            BufferedImage frameImage = grab.getFrame();
            if (frameImage != null) {
                ImageIO.write(grab.getFrame(), "png",
                    new File(System.getProperty("user.home"), String.format("Desktop/frame_%08d.png", i)));
            } else break;
        }
    } finally {
        NIOUtils.closeQuietly(ch);
    }

Contact

Feel free to communicate any questions or concerns to us. Dev team email: jcodecproject@gmail.com