ffmpeg menggabungkan beberapa file audio menjadi file audio tunggal dengan android

1

Saya menggunakan perintah di bawah ini untuk menggabungkan beberapa file audio:

String s="-i "+mFileTemp.getPath()+" -i "+mFileTemp2.getPath()+" -i "+mFileTemp3.getPath()+" -filter_complex [0:0][1:0][2:0]concat=n=3:v=0:a=1[out] -map [out] "+originalFile.getPath();

Di mana mFileTemp, mFileTemp2, mFileTemp3 adalah jalur untuk memasukkan file audio di mana originalFile adalah jalur file audio output.

Di sini saya melampirkan bagaimana proses lewat setelah membelah:

argumen lewat ffmpeg setelah pemisahan

Mendapat kesalahan berikut:

ffmpeg version n3.0.1 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 4.8 (GCC)
configuration: --target-os=linux --cross-
prefix=/home/vagrant/SourceCode/ffmpeg-android/toolchain-
android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --
enable-runtime-cpudetect --sysroot=/home/vagrant/SourceCode/ffmpeg-
android/toolchain-android/sysroot --enable-pic --enable-libx264 --
enable-libass --enable-libfreetype --enable-libfribidi --enable-
libmp3lame --enable-fontconfig --enable-pthreads --disable-debug --
disable-ffserver --enable-version3 --enable-hardcoded-tables --
disable-ffplay --disable-ffprobe --enable-gpl --enable-yasm --disable-
doc --disable-shared --enable-static --pkg-
config=/home/vagrant/SourceCode/ffmpeg-android/ffmpeg-pkg-config --
prefix=/home/vagrant/SourceCode/ffmpeg-android/build/armeabi-v7a --
extra-cflags='-I/home/vagrant/SourceCode/ffmpeg-android/toolchain-
android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-
overflow -fstack-protector-all' --extra-ldflags='-
L/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/lib -Wl,-
z,relro -Wl,-z,now -pie' --extra-libs='-lpng -lexpat -lm' --extra-
cxxflags=
libavutil      55. 17.103 / 55. 17.103
libavcodec     57. 24.102 / 57. 24.102
libavformat    57. 25.100 / 57. 25.100
libavdevice    57.  0.101 / 57.  0.101
libavfilter     6. 31.100 /  6. 31.100
libswscale      4.  0.100 /  4.  0.100
libswresample   2.  0.101 /  2.  0.101
libpostproc    54.  0.100 / 54.  0.100
Guessed Channel Layout for  Input Stream #0.0 : stereo
Input #0, wav, from '/storage/emulated/0/AudioRecorder/cello.wav':
Duration: 00:00:03.75, bitrate: 1411 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2
channels, s16, 1411 kb/s
Guessed Channel Layout for  Input Stream #1.0 : stereo
Input #1, wav, from '/storage/emulated/0/AudioRecorder/strings.wav':
Duration: 00:00:05.00, bitrate: 1411 kb/s
Stream #1:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2
channels, s16, 1411 kb/s
Guessed Channel Layout for  Input Stream #2.0 : stereo
Input #2, wav, from
'/storage/emulated/0/AudioRecorder/ChillingMusic.wav':
Duration: 00:00:27.41, bitrate: 1411 kb/s
Stream #2:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2
channels, s16, 1411 kb/s
[AVFilterGraph @ 0xf6e49040] No such filter: ''
Error initializing complex filters.
Invalid argument

Seseorang dengan baik hati membantu saya apa yang saya lakukan salah? Pertanyaan ini mungkin merupakan duplikat tetapi saya tidak menemukan solusi yang baik untuk posting ini.

Myself
sumber
Opsi concat Anda membingungkan. Anda memiliki 3 input dengan masing-masing 1 stream, tetapi label input Anda untuk concat adalah 3 input dengan masing-masing 3 stream. Anda perlu menambahkan v=0 ke konser Anda karena defaultnya adalah v=1, tetapi Anda tidak memiliki aliran video. Concat Anda memiliki 3 label keluaran, tetapi saya berasumsi Anda menginginkannya. Untuk No such filter: '' Saya menduga itu karena kesalahan pemisahan, penawaran, atau implementasi perintah dalam skrip dan bukan masalah dengan ffmpeg perintah itu sendiri. Dapatkan perintah berfungsi terlebih dahulu sebelum Anda mencoba menambahkannya ke skrip Anda.
llogan
@ LordNeckbeard: Terima kasih atas jawabannya. Saya menemukan solusi: String s = "- i" + mFileTemp.getPath () + "-i" + mFileTemp2.getPath () + "-i" + mFileTemp3.getPath () + "-filter_complex [0: 0] [ 1: 0] [2: 0] concat = n = 3: v = 0: a = 1 [out] -map [out] "+ originalFile.getPath (); ini bekerja untuk saya
Myself

Jawaban:

2

Saya menemukan solusi untuk pertanyaan di atas. Saya sudah mengedit dalam pertanyaan,

        String s="-i "+mFileTemp.getPath()+" -i "+mFileTemp2.getPath()+" -i "+mFileTemp3.getPath()+" -filter_complex [0:0][1:0][2:0]concat=n=3:v=0:a=1[out] -map [out] "+originalFile.getPath();

        String[] cmd= s.split(" ");

dan meneruskan array string ini ke:

         ffmpeg.execute(cmd...)

Tolong dicatat : Saya merujuk http://writingminds.github.io/ffmpeg-android-java/ . untuk berintegrasi dengan android

Myself
sumber