12

2つ以上のビデオファイルをマージしたい(2つのmp4または2つの3gp、またはその他の形式の場合があります)。

4

3 に答える 3

14

使用できる最も一般的なツールはffmpegです(上記の@Jeremyで指摘されているように)が、携帯電話で使用するにはいくつかの作業が必要になります。また、それはLGPLライセンスであり、そのエンコーダーのいくつか(特にx264)はGPLです。

連結する両方のファイルが同様のエンコーディングを使用していて、MP4から派生したファイル形式(3GPなど)に含まれている場合のより簡単な解決策は、純粋なJava MP4パーサーを使用し、メディアストリーム自体に触れることなくビデオを連結することです。 。mp4parserを見てください。これは、純粋なJavaであり、Apacheライセンスの下でライセンスされ、wikiにビデオを連結するための例もあるオープンソースパーサーです。

于 2012-11-22T15:13:44.683 に答える
5

INDE Media for Mobileを試すことができます。チュートリアルは、https ://software.intel.com/en-us/articles/intel-inde-media-pack-for-android-tutorialsにあります。

MediaComposerクラスのトランスコーディング\リマックス機能と、ファイル\ファイルセグメントを結合する可能性があります。MediaCodec APIを使用しているため、エンコーディングはGPUで行われるため、非常にバッテリーに優しく、可能な限り高速に動作します。

参加またはその他の機能を有効にする方法を示すサンプルコードは、githubにあります:https ://github.com/INDExOS/media-for-mobile

ここに画像の説明を入力してください ここに画像の説明を入力してください ここに画像の説明を入力してください

于 2015-01-20T15:50:03.843 に答える
5

JavaとKotlinの両方のコードを共有します

内部的にはFFmpegを使用していますが、軽量です。異なるタイプまたはコーデック、フレームレート、ビットレートの2つのビデオを追加する最も簡単な方法は、EpMediaライブラリを使用することです。

グレード依存性

implementation 'com.github.yangjie10930:EpMedia:v0.9.5'

Kotlinコード

    val epVideos = ArrayList<EpVideo>()
    epVideos.add(EpVideo("/storage/emulated/0/Contact/1.mp4")) // Video 1 Example
    epVideos.add(EpVideo("/storage/emulated/0/Contact/2.mp4")) // Video 2 Exmaple
    val outputOption = EpEditor.OutputOption ("/storage/emulated/0/merge.mp4"); //Output
    outputOption.setWidth(720) // output video width, default 480
    outputOption.setHeight(1280)
    outputOption.frameRate =  25 ; // output video frame rate, default 30

    EpEditor.merge(epVideos,outputOption,object:OnEditorListener{
        override fun onSuccess() {

        }

        override fun onFailure() {

        }


        override fun onProgress(progress: Float) {
            Log.d("Progress","$progress")
        }

    })

Javaコード

 private void mergeVideos() {
    ArrayList<EpVideo> epVideos =  new  ArrayList<>();
    epVideos.add(new EpVideo (file2)); // Video 1
    epVideos.add(new EpVideo (file1)); // Video 2
    EpEditor. OutputOption outputOption =new EpEditor.OutputOption(fileOutput);
    outputOption.setWidth(720);
    outputOption.setHeight(1280);
    outputOption.frameRate = 25 ;
    outputOption.bitRate = 10 ;
    EpEditor.merge(epVideos, outputOption, new  OnEditorListener() {
        @Override
        public  void  onSuccess () {
            Log.d("Status","Success");

        }

        @Override
        public  void  onFailure () {

        }

        @Override
        public  void  onProgress ( float  progress ) {
            // Get processing progress here
            Log.d("Progress",""+progress);
        }
    });

}
于 2020-02-25T15:43:09.413 に答える