Download Latest Version 4.2.0 release source code.zip (389.2 MB) Google Add to Preferred Sources
Home / 3.6.0
Name Modified Size InfoDownloads / Week
Parent folder
3.6.0 release source code.tar.gz 2026-08-17 392.9 MB
3.6.0 release source code.zip 2026-08-17 393.0 MB
README.md 2026-08-17 3.9 kB
Totals: 3 Items   785.9 MB 0

New features

  • Video rotation — MultimediaInfo.getRotate() reports the angle, in degrees clockwise, that cameras record in the stream metadata when filming in a non native orientation. It is 0 when the file carries no rotation. Thanks to @JinLike (#275).
  • Finished callback — EncoderProgressListener.done() is called once an encoding has completed successfully. It is a default method, so existing listeners keep working unchanged. Thanks to @JinLike (#275).
  • Stream looping — EncodingAttributes.setStreamLoop(Integer) maps to ffmpeg -stream_loop, with -1 repeating endlessly. Thanks to @supermoonie.
  • ffmpeg working directory — ProcessWrapper.setExecFolder(File) sets the directory the ffmpeg process runs in, which matters for paths ffmpeg resolves itself, such as the file list of the concat demuxer. Thanks to @supermoonie.
  • Source back reference — MultimediaInfo.getMultimediaObject() points back at the object the information was read from. Thanks to @supermoonie.
  • Timeout when reading media information — MultimediaObject.getInfo(long timeoutMillis) gives up after the time you allow, so an unreachable or stalled source can no longer block the calling thread forever (#264).

Fixed

  • The extracted ffmpeg binary could be run before it was ready (#281, [#236]). Two races: the chmod was started but never waited for, and the binary was copied straight onto its final path, so a second process could pick up a file that was not executable yet or only half written. Both showed up as Permission denied or Cannot run program. The executable bit is now set in process, and the copy is staged in a temporary file that is made executable and only then moved into place atomically.
  • Thread safety of shared state (#179). Encoder's global option list threw a ConcurrentModificationException when it was changed while another thread was encoding, and VideoProcessor reported itself enabled because some earlier instance had been, then failed on a null encoder.
  • An unparsable source header no longer aborts an encoding. ffmpeg 4.4.x describes some containers in a way the parser does not accept. That information is only used to express progress as a percentage, so it is now a warning. Thanks to @jhsea3do (#209).
  • Documentation examples did not compile (#189). README.md and Examples.md called attrs.setFormat(...), which does not exist on EncodingAttributes, the method is setOutputFormat(...).

Build and infrastructure

  • Publishing moved to the Sonatype Central Portal. The OSSRH service at oss.sonatype.org this project published through has been retired by Sonatype. Releases and snapshots now go through the Central Portal, and the version badges in the README read from it again.
  • Snapshots are published from develop to https://central.sonatype.com/repository/maven-snapshots/.
  • All published artifacts now carry sources and javadoc jars, which the Central Portal requires.
  • CI fixed. The workflow built with JDK 11 while one module targets release 12, so it had been failing before it reached a single test. It now builds with JDK 17 and runs on master as well as develop.
  • JUnit 5 annotations now take effect. The test modules had no engine on the classpath and no pinned surefire version, so Maven fell back to a provider that ignores the annotations. @Disabled did nothing and seven tests had never run at all. Thanks to @Stickerifier for the test rework this uncovered.

Upgrading

No source changes are required. EncoderProgressListener.done() is a default method, so existing implementations compile unchanged.

:::xml
<dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-all-deps</artifactId>
    <version>3.6.0</version>
</dependency>

Full changelog: https://github.com/a-schild/jave2/blob/master/Changelog.md

Source: README.md, updated 2026-08-17