6400


現在、Androidで簡単な動画を作成するソフトを組んでいます。アニメーションGIFが作れる仕様で作ったのですが、やはり出力サイズが大きく、SNSでの使い回しも不便であるためMotion-
JPEGで作り変えることは出来ないか思案中です。

かなり調べたつもりなのですが、どうしても「ちゃんとした仕様は有りません」的な答えばかり出てきて煮詰まっています。ちゃんとした仕様はないにせよ、現にYouTubeにアップできるMotion-
JPEGは有るため、デファクトスタンダードは有るのではと思うのでそれが知りたいのです。

参考になるソースなどあればベストなのですが、ご存知の方はおられませんでしょうか。よろしくお願い致します。


CC BY-SA 3.0
2015-02-09T01:51:21.230
6168
2015-02-26T06:52:20.450
2015-02-12T15:40:54.100
4921
4921
question
android
YouTubeにアップできるMotion-JPEGの作り方


AVIの構造を調べるうちに、求めるもの ほぼズバリのソースがGithubで見つかりましたので、何とかなりそうです。  
<https://github.com/abe64/MovieExport-1/tree/master/src/main/java/org/gephi/rs/export/movie/riff>

助言くださった方に深く感謝いたします。

//---------- 2015/02/26 追補  
件のソースですが、仕上がる動画の画面アスペクト比が16:9固定になっているため、それ以外の比率で作った動画をyoutubeにアップするとに変形してしまうようです。

問題の箇所は MotionJPEG.javaの190行目、

[code]

     videoPropertiesHeader.setDwFrameAspectRatio(1048585);
    
[/code]

の部分。ここを

[code]

    Point p = calcAspect(width, height);
    videoPropertiesHeader.setDwFrameAspectRatio(p.x * 0x10000 + p.y);
    
[/code]

と書き直し、アスペクトを割り出す

[code]

        private Point calcAspect(int w,int h)
        {
            TreeMap<Float, Point> map = new TreeMap<Float, Point>();
            float rate = (float)w / h;
    
            for(int i=1;i<256;i++)
            {
                float rateMulti = rate * i;
                int rateInt = (int) rateMulti;
                float rateDot = rateMulti - rateInt;
                rateDot = Math.round(rateDot * 1000f) / 1000f;
                Point point = new Point(rateInt,i);
                if(rateDot == 0) return point;
                if(!map.containsKey(Float.valueOf(rateDot))) map.put(Float.valueOf(rateDot), point);
            }
    //      for(Entry<Float, Point> e:map.entrySet()) log("G", "map (" + e.getKey() + " , " + e.getValue() +")");
            return map.firstEntry().getValue();
        }
    
[/code]

こんなメソッドを用意して対処しました。（もっと簡潔な書き方が有るかもしれませんが。）

誰かのお役に立てばいいのですが。


CC BY-SA 3.0
2015-02-12T15:40:24.467
6400
2015-02-26T06:52:20.450
2015-02-26T06:52:20.450
4921
4921
6168
answer