/* * myLib - https://github.com/taktod/myLib * Copyright (c) 2014 ttProject. All rights reserved. * * Licensed under GNU GENERAL PUBLIC LICENSE Version 3. */ package com.ttProject.transcode.xuggle; import com.xuggle.xuggler.ICodec; import com.xuggle.xuggler.IRational; import com.xuggle.xuggler.IStreamCoder; import com.xuggle.xuggler.IPixelFormat.Type; import com.xuggle.xuggler.IStreamCoder.Direction; import com.xuggle.xuggler.IStreamCoder.Flags; /** * IStreamCoderのpresetデータ集 * @author taktod */ public class Preset { /** * mp3 44100Hz 48kbps 2channel * @return */ public static IStreamCoder mp3() { IStreamCoder encoder = IStreamCoder.make(Direction.ENCODING, ICodec.ID.CODEC_ID_MP3); encoder.setSampleRate(44100); encoder.setChannels(2); encoder.setBitRate(48000); return encoder; } /** * aac 44100Hz 48kbps 2channel * @return */ public static IStreamCoder aac() { IStreamCoder encoder = IStreamCoder.make(Direction.ENCODING, ICodec.ID.CODEC_ID_AAC); encoder.setSampleRate(44100); encoder.setChannels(2); encoder.setBitRate(48000); return encoder; } /** * vorbis 44100Hz 48kbps 2channel * @return */ public static IStreamCoder vorbis() { IStreamCoder encoder = IStreamCoder.make(Direction.ENCODING, ICodec.ID.CODEC_ID_VORBIS); encoder.setSampleRate(44100); encoder.setChannels(2); encoder.setBitRate(48000); return encoder; } /** * flv1 15fps 30gop 500kbps 320x240 * @return */ public static IStreamCoder flv1() { IStreamCoder encoder = IStreamCoder.make(Direction.ENCODING, ICodec.ID.CODEC_ID_FLV1); IRational frameRate = IRational.make(15, 1); encoder.setNumPicturesInGroupOfPictures(30); encoder.setBitRate(500000); encoder.setBitRateTolerance(9000); encoder.setWidth(320); encoder.setHeight(240); encoder.setGlobalQuality(10); encoder.setFrameRate(frameRate); encoder.setTimeBase(IRational.make(1, 1000)); encoder.setPixelType(Type.YUV420P); return encoder; } /** * h264 15fps 30gop 500kbps 320x240 * 細かい部分は適当(とりあえずうまくいったやつがはいっています。) * @return */ public static IStreamCoder h264() { IStreamCoder encoder = IStreamCoder.make(Direction.ENCODING, ICodec.ID.CODEC_ID_H264); IRational frameRate = IRational.make(15, 1); // 15fps encoder.setBitRate(500000); // 500kbps encoder.setBitRateTolerance(9000); encoder.setWidth(320); encoder.setHeight(240); encoder.setGlobalQuality(10); encoder.setFrameRate(frameRate); encoder.setNumPicturesInGroupOfPictures(30); encoder.setTimeBase(IRational.make(1, 1000)); // 1/1000設定(flvはこうなるべき) mpegtsなら90000か? encoder.setProperty("level", "30"); encoder.setProperty("coder", "0"); encoder.setProperty("qmin", "10"); encoder.setProperty("bf", "0"); encoder.setProperty("wprefp", "0"); encoder.setProperty("cmp", "+chroma"); encoder.setProperty("partitions", "-parti8x8+parti4x4+partp8x8+partp4x4-partb8x8"); encoder.setProperty("me_method", "hex"); encoder.setProperty("subq", "5"); encoder.setProperty("me_range", "16"); encoder.setProperty("keyint_min", "25"); encoder.setProperty("sc_threshold", "40"); encoder.setProperty("i_qfactor", "0.71"); encoder.setProperty("b_strategy", "0"); encoder.setProperty("qcomp", "0.6"); encoder.setProperty("qmax", "30"); encoder.setProperty("qdiff", "4"); encoder.setProperty("directpred", "0"); encoder.setProperty("profile", "main"); encoder.setProperty("cqp", "0"); encoder.setFlag(Flags.FLAG_LOOP_FILTER, true); encoder.setFlag(Flags.FLAG_CLOSED_GOP, true); encoder.setPixelType(Type.YUV420P); return encoder; } /** * vp8 15fps 30gop 500kbps 320x240 * @return */ public static IStreamCoder vp8() { IStreamCoder encoder = IStreamCoder.make(Direction.ENCODING, ICodec.ID.CODEC_ID_VP8); IRational frameRate = IRational.make(15, 1); encoder.setNumPicturesInGroupOfPictures(30); encoder.setBitRate(500000); // 500kbps encoder.setBitRateTolerance(9000); encoder.setWidth(320); encoder.setHeight(240); encoder.setGlobalQuality(10); encoder.setFrameRate(frameRate); encoder.setTimeBase(IRational.make(1, 1000)); // 1/1000設定(flvはこうなるべき) encoder.setPixelType(Type.YUV420P); return encoder; } }