FFMPEG merging two videos (Concatenation)

2019-03-03 13:56发布

问题:

I have been trying to merge (concatenate) two mp4 videos with same height and width but some error occurs . The code is :

FFmpeg ffmpeg = FFmpeg.getInstance(EditVideoActivity.this);
            String list = generateList(new String[]{ActualVideoFile.getAbsolutePath(), path});
            try {
                ffmpeg.execute("ffmpeg -f concat -i " + list + " -c:v copy " + mergedVideo.getAbsolutePath(), new FFmpegExecuteResponseHandler() {
                    @Override
                    public void onStart() {
                        Log.e("Start", "Start");
                    }

                    @Override
                    public void onFinish() {
                        Log.e("FINISHED", "finish");
                    }


                    @Override
                    public void onSuccess(String message) {
                        Log.e("SUCCESS", message);
                    }

                    @Override
                    public void onProgress(String message) {
                        Log.e("PROGRESSSS", message);
                    }

                    @Override
                    public void onFailure(String message) {
                        Log.e("FAILURE", message);
                    }


                });
            } catch (FFmpegCommandAlreadyRunningException e) {
                e.printStackTrace();
                Log.e("FFMEG Exception", "" + e);
            }

Logcat:

/PROGRESSSS: ffmpeg version 0.11.1 Copyright (c) 2000-2012 the FFmpeg developers
06-09 01:24:09.400 8512-8512/com.myApp E/PROGRESSSS:   built on Dec 22 2014 12:52:34 with gcc 4.6 20120106 (prerelease)
06-09 01:24:09.400 8512-8512/com.myApp E/PROGRESSSS:   configuration: --arch=arm --cpu=cortex-a8 --target-os=linux --enable-runtime-cpudetect --prefix=/data/data/info.guardianproject.ffmpeg/app_opt --enable-pic --disable-shared --enable-static --cross-prefix=/home/n8fr8/dev/android/ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi- --sysroot=/home/n8fr8/dev/android/ndk/platforms/android-16/arch-arm --extra-cflags='-I../x264 -mfloat-abi=softfp -mfpu=neon -fPIE -pie' --extra-ldflags='-L../x264 -fPIE -pie' --enable-version3 --enable-gpl --disable-doc --enable-yasm --enable-decoders --enable-encoders --enable-muxers --enable-demuxers --enable-parsers --enable-protocols --enable-filters --enable-avresample --enable-libfreetype --disable-indevs --enable-indev=lavfi --disable-outdevs --enable-hwaccels --enable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-network --enable-libx264 --enable-zlib
06-09 01:24:09.400 8512-8512/com.myApp E/PROGRESSSS:   libavutil      51. 54.100 / 51. 54.100
06-09 01:24:09.400 8512-8512/com.myApp E/PROGRESSSS:   libavcodec     54. 23.100 / 54. 23.100
06-09 01:24:09.400 8512-8512/com.myApp E/PROGRESSSS:   libavformat    54.  6.100 / 54.  6.100
06-09 01:24:09.400 8512-8512/com.myApp E/PROGRESSSS:   libavdevice    54.  0.100 / 54.  0.100
06-09 01:24:09.400 8512-8512/com.myApp E/PROGRESSSS:   libavfilter     2. 77.100 /  2. 77.100
06-09 01:24:09.400 8512-8512/com.myApp E/PROGRESSSS:   libswscale      2.  1.100 /  2.  1.100
06-09 01:24:09.400 8512-8512/com.myApp E/PROGRESSSS:   libswresample   0. 15.100 /  0. 15.100
06-09 01:24:09.400 8512-8512/com.myApp E/PROGRESSSS:   libpostproc    52.  0.100 / 52.  0.100
06-09 01:24:09.400 8512-8512/com.myApp E/PROGRESSSS: [NULL @ 0x2aeef3b0] Unable to find a suitable output format for 'ffmpeg'
06-09 01:24:09.400 8512-8512/com.myApp E/PROGRESSSS: ffmpeg: Invalid argument
06-09 01:24:09.400 8512-8512/com.myApp E/FAILURE: ffmpeg version 0.11.1 Copyright (c) 2000-2012 the FFmpeg developers
                                                        built on Dec 22 2014 12:52:34 with gcc 4.6 20120106 (prerelease)
                                                        configuration: --arch=arm --cpu=cortex-a8 --target-os=linux --enable-runtime-cpudetect --prefix=/data/data/info.guardianproject.ffmpeg/app_opt --enable-pic --disable-shared --enable-static --cross-prefix=/home/n8fr8/dev/android/ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi- --sysroot=/home/n8fr8/dev/android/ndk/platforms/android-16/arch-arm --extra-cflags='-I../x264 -mfloat-abi=softfp -mfpu=neon -fPIE -pie' --extra-ldflags='-L../x264 -fPIE -pie' --enable-version3 --enable-gpl --disable-doc --enable-yasm --enable-decoders --enable-encoders --enable-muxers --enable-demuxers --enable-parsers --enable-protocols --enable-filters --enable-avresample --enable-libfreetype --disable-indevs --enable-indev=lavfi --disable-outdevs --enable-hwaccels --enable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-network --enable-libx264 --enable-zlib
                                                        libavutil      51. 54.100 / 51. 54.100
                                                        libavcodec     54. 23.100 / 54. 23.100
                                                        libavformat    54.  6.100 / 54.  6.100
                                                        libavdevice    54.  0.100 / 54.  0.100
                                                        libavfilter     2. 77.100 /  2. 77.100
                                                        libswscale      2.  1.100 /  2.  1.100
                                                        libswresample   0. 15.100 /  0. 15.100
                                                        libpostproc    52.  0.100 / 52.  0.100
                                                      [NULL @ 0x2aeef3b0] Unable to find a suitable output format for 'ffmpeg'
                                                      ffmpeg: Invalid argument

I am using hiteshsondhi88 's FFMPEG Library Any help would be appreciated. Thanks

回答1:

Instead of your current :

ffmpeg.execute("ffmpeg -f concat -i " + list + " -c:v copy " + mergedVideo.getAbsolutePath(), new FFmpegExecuteResponseHandler() {

Try using it like this :

ffmpeg.execute("-f concat -i " + list + " -c:v copy " + mergedVideo.getAbsolutePath(), new FFmpegExecuteResponseHandler() {