Javaで動画変換をおこなう。JAVE(Java Audio Video Encoder)でMP4に!

Javeでの画像変換

今回は、Javaで動画変換をおこなう方法を紹介します。
使用するライブラリは『JAVE』です。



あんまりメジャーではないライブラリのようですね。
でも、使い方がシンプルで、かつ、世の中に出回っているほとんどの動画ファイル形式に対応しているので、筆者は気に入っています。


具体的には、『mp4』に変換することを前提にサンプルプログラムを紹介していきます。


mp4に変更するのは特に理由はないですが、あえて理由をあげるとすれば、”圧縮率が一番よさそうだから”です。


検証環境


筆者が動作検証した環境は以下になります。


  • Windows7
  • Java1.8.06
  • JAVE-1.0.2

JAVE(Java Audio Video Encoder)について


JAVE(Java Audio Video Encoder)とは何か?ということになるのですが、公式サイトの説明を日本語化すると以下になります。


JAVE(Java Audio Video Encoder)ライブラリは、ffmpegプロジェクトのJavaラッパーです。
開発者は、JAVEを利用して、オーディオファイルとビデオファイルをある形式から別の形式にトランスコードできます。
例では、AVIファイルをMPEGファイルにトランスコードでき、DivXビデオストリームを(YouTubeのような)Flash FLVファイルに変更でき、WAVオーディオファイルをMP3またはOgg Vorbisに変換できます。
オーディオトラックとビデオトラックをトランスコードする場合、ビデオのサイズを変更したり、サイズや比率を変更したりできます。
JAVEでは、他の多くの形式、コンテナ、および操作がサポートされています。


動画操作で有名なライブラリは「ffmpeg」ですが、JAVEはffmpegをラッピングしているライブラリみたいです。


説明文をみるとように、様々なファイル形式に対応しています。
ベースはffmpegなので、当然っちゃ当然ですね。


JAVEでMP4に変換する


一通りの動画について変換を試してみました。
一覧でまとめました。
動画は基本的に圧縮されます。


拡張子

mp4変換時の圧縮率

.avi

70%

.mp4

70%

.m2ts

99%

.ts

27%

.mpeg

27%

.mpg

29%

.mkv

29%

.wmv

41%

.webm

42%

.ogm

180%

.mov

96%


JAVEを使用した動画変換処理


動画変換処理のサンプルコードを紹介します。
使い方は簡単で、変換処理の条件(コーデック、ビットレート、など)を属性情報として設定し、変換処理を実行します。
様々な形式に変換が可能(っぽい)ですが、MP4形式への変換サンプルコードになります。


import it.sauronsoftware.jave.AudioAttributes;
import it.sauronsoftware.jave.Encoder;
import it.sauronsoftware.jave.EncoderException;
import it.sauronsoftware.jave.EncodingAttributes;
import it.sauronsoftware.jave.InputFormatException;
import it.sauronsoftware.jave.VideoAttributes;
import it.sauronsoftware.jave.VideoSize;

import java.io.File;

public class JaveManage {

    private JaveManage() {
    }

    public static void main(String[] args) {
        System.out.println("start.");

        try {
            // 動画フォーマットを設定
            EncodingAttributes attrs = 
                new EncodingAttributes();

			// 動画圧縮変換時フォーマット
            attrs.setFormat("mp4");

            // 音声の変換情報を設定
            AudioAttributes audio = new AudioAttributes();
			// 動画圧縮変換時オーディオコーデック
            audio.setCodec("aac");
			// 動画圧縮変換時オーディオビットレート
            audio.setBitRate(256000);
			// 動画圧縮変換時オーディオチャンネル
            audio.setChannels(1);
            audio.setSamplingRate(88200);
			// 動画圧縮変換時オーディオサンプリングレート
            attrs.setAudioAttributes(audio);

            // 動画の変換情報を設定
            VideoAttributes video = new VideoAttributes();
			// 動画圧縮変換時ビデオコーデック
            video.setCodec("libx264");
			// 動画圧縮変換時ビデオビットレート
            video.setBitRate(2700000);
			// 動画圧縮変換時ビデオフレームレート
            video.setFrameRate(30);
			// 動画圧縮変換時ビデオ幅,動画圧縮変換時ビデオ高さ
            video.setSize(new VideoSize(1296, 768));
            attrs.setVideoAttributes(video);

            // 変換を実施
            File source = new File("source.wav");
            File dest = new File("source.mp4");
            Encoder encoder = new Encoder();
            encoder.encode(source, dest, attrs);

            // 変換結果を検証
            if (!dest.exists() || dest.length() == 0) {
                System.out.println("encode failer.");
            }
        } catch (EncoderException e) {
            System.out.println("Occured EncoderException.");
        } catch (Exception e) {
            System.out.println("Occured Exception.");
        }
        System.out.println("end.");
    }
}

設定値はソースコードに直接記述していますが、以下のパラメータを設定します。


  • オーディオビットレート:256000
  • オーディオチャンネル:1
  • サンプリングレート:88200
  • ビデオビットレート:2700000
  • フレームレート:30
  • サイズ:height:1296 width:768

まとめ


いかがでしたでしょうか?


JAVEはあんまりメジャーなライブラリではないようですね。
ググってもあんまり情報がないです。


使ってみた直観としては、使いやすい印象です。
「パラメータを設定して変換」っていうだけですからね。


皆さんが使う際に、参考にして頂ければと思います。


それではまた!