Cara menggabungkan beberapa file audio MP3 pendek dengan durasi tumpang tindih tertentu

3

Saya memiliki file MP3 yang cenderung sangat pendek, seperti 1 detik, mengandung suku kata kata. Saya ingin memiliki tumpang tindih (ujung satu digabung dengan awal yang berikutnya). Saya telah menemukan beberapa topik tentang crossfading tetapi saya tidak yakin saya membutuhkannya (crossfading), yaitu, untuk menurunkan volume satu dan meningkatkan volume yang berikutnya ketika kita beralih ke dalamnya. Saya pikir hanya penggabungan audio sudah cukup saat ini.

Tumpang tindih perlu dalam urutan mikrodetik. Saya melihat FFmpeg memiliki desimal satu detik pada beberapa opsi. Saat ini saya sedang menyatukan banyak MP3 pendek dengan berikut:

    /// <summary>
    /// <para/>20170114
    /// </summary>
    /// <returns></returns>
    public void ConcatMP3s(String InFiles, String OutputFile)
    {
        // http://superuser.com/questions/87040/how-to-stich-mp3s-together-with-ffmpeg
        var _IN_PARAMS = " -f concat ";
        var _IN_FILES = "-safe 0 -i " + DQuote(InFiles);
        var _OUT_PARAMS = " -c copy -y ";  // -y to overwrite the output file
        var _OUT_FILE = DQuote(OutputFile);
        //
        var _FFMPEG_ARGS = _IN_PARAMS + _IN_FILES + _OUT_PARAMS + _OUT_FILE;
        //return _FFMPEG_ARGS;
        //
        RunFFmpeg(_FFMPEG_ARGS);
    }

Saya ingin perintah atau teknik yang akan menggabungkan beberapa file sekaligus, tetapi jika Anda menunjukkan kepada saya bagaimana melakukannya untuk dua file, saya bisa mengulang semuanya. Ini jawaban yang jelek tapi bisa diterima :).

@Mulvya, apa yang bisa saya ambil dari tautan Anda adalah struktur baris perintah FFmpeg berikut (semua dalam satu string baris perintah)

ffmpeg -i 1.mp3 -i 2.mp3 -i 3.mp3 -i 4.mp3
   -filter_complex
     "[1]adelay=delay1|delay1[b];
      [2]adelay=delay2|delay2[c];
      [3]adelay=delay3|delay3[d];
      [0][b][c][d]amix=4"
merged.mp3

Apa yang perlu dilakukan delay1, delay2, dan delay3? Apakah mereka durasi dalam milidetik dari 1.mp3, 2.mp3, dan 3.mp3masing-masing?

Apa cara terbaik untuk mengambil durasi ini? misalnya, apakah properti file sistem file akurat?

Apakah huruf [b], [c], [d] sesuatu yang sewenang-wenang? nama saluran? Saya perlu menghasilkan?

Di mana saya menentukan, misalnya, 10 milidetik tumpang tindih antara 1.mp3dan 2.mp3, 2 dan 3, dan kemudian 3 dan 4?

Atau haruskah saya minus 10 milidetik dari delay1, delay2, delay3?

Tambahan: di sini adalah snapshot dari montase manual yang saya kumpulkan untuk menjelaskan apa yang saya coba capai secara terprogram (asumsikan tumpang tindih yang konstan; di sini saya mencoba sekitar 100 ms). Tolong jelaskan apa nilai untuk delay1, delay2, delay3 di atas seharusnya.

snapshot dari montase manual

Durasi MP3 dari output FFmpeg adalah 550, 440, 500, 960, 440 ms.

========= Output Saat Ini dari FFmpeg

_VDO\FFmpeg 20160310\bin\FFmpeg -i "S:\_W\ARP_WEB\SRC\SND\A4_23\1\01.mp3" -i "S:\_W\ARP_WEB\SRC\SND\A2\1\22.mp3" -i "S:\_W\ARP_WEB\SRC\SND\A2\3\23.mp3" -i "S:\_W\ARP_WEB\SRC\SND\A3\1\24.mp3" -i "S:\_W\ARP_WEB\SRC\SND\A2\2\03.mp3" -filter_complex "[1]adelay=279[b];[2]adelay=592[c];[3]adelay=916[d];[4]adelay=1712[e]; [0][b][c][d][e]amix=5" -y "S:\_W\ARP\AMSSTUDIO\SRC\DATA\FFMPEG\DEBUG Concat with Overlap\OUT.MP3"

ffmpeg version N-79000-g66edd86 Copyright (c) 2000-2016 the FFmpeg developers built with gcc 5.3.0 (GCC) configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmfx --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-decklink --enable-zlib libavutil 55. 19.100 / 55. 19.100 libavcodec 57. 28.100 / 57. 28.100 libavformat 57. 28.100 / 57. 28.100 libavdevice 57. 0.101 / 57. 0.101 libavfilter 6. 39.102 / 6. 39.102 libswscale 4. 0.100 / 4. 0.100 libswresample 2. 0.101 / 2. 0.101 libpostproc 54. 0.100 / 54. 0.100 [mp3 @ 0000000000584ba0] Estimating duration from bitrate, this may be inaccurate Input #0, mp3, from 'S:\_W\ARP_WEB\SRC\SND\A4_23\1\01.mp3': Duration: 00:00:00.55, start: 0.000000, bitrate: 320 kb/s Stream #0:0: Audio: mp3, 44100 Hz, mono, s16p, 320 kb/s [mp3 @ 00000000005a2a20] Estimating duration from bitrate, this may be inaccurate Input #1, mp3, from 'S:\_W\ARP_WEB\SRC\SND\A2\1\22.mp3': Duration: 00:00:00.44, start: 0.000000, bitrate: 320 kb/s Stream #1:0: Audio: mp3, 44100 Hz, mono, s16p, 320 kb/s [mp3 @ 000000000058af00] Estimating duration from bitrate, this may be inaccurate Input #2, mp3, from 'S:\_W\ARP_WEB\SRC\SND\A2\3\23.mp3': Duration: 00:00:00.50, start: 0.000000, bitrate: 320 kb/s Stream #2:0: Audio: mp3, 44100 Hz, mono, s16p, 320 kb/s [mp3 @ 000000000058cb80] Estimating duration from bitrate, this may be inaccurate Input #3, mp3, from 'S:\_W\ARP_WEB\SRC\SND\A3\1\24.mp3': Duration: 00:00:00.96, start: 0.000000, bitrate: 127 kb/s Stream #3:0: Audio: mp3, 44100 Hz, mono, s16p, 128 kb/s [mp3 @ 00000000005c5c00] Estimating duration from bitrate, this may be inaccurate Input #4, mp3, from 'S:\_W\ARP_WEB\SRC\SND\A2\2\03.mp3': Duration: 00:00:00.44, start: 0.000000, bitrate: 320 kb/s Stream #4:0: Audio: mp3, 44100 Hz, mono, s16p, 320 kb/s Output #0, mp3, to 'S:\_W\ARP\AMSSTUDIO\SRC\DATA\FFMPEG\DEBUG Concat with Overlap\OUT.MP3': Metadata: TSSE : Lavf57.28.100 Stream #0:0: Audio: mp3 (libmp3lame), 44100 Hz, mono, fltp (default) Metadata: encoder : Lavc57.28.100 libmp3lame Stream mapping: Stream #0:0 (mp3) -> amix:input0 Stream #1:0 (mp3) -> adelay Stream #2:0 (mp3) -> adelay Stream #3:0 (mp3) -> adelay Stream #4:0 (mp3) -> adelay amix -> Stream #0:0 (libmp3lame) Press [q] to stop, [?] for help Error while filtering: Cannot allocate memory size= 5kB time=00:00:00.54 bitrate= 70.2kbits/s speed=42.3x video:0kB audio:4kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 4.938003%

Marie
sumber
Menggabungkan audio dengan tumpang tindih tidak jauh berbeda dari crossfading, dan crossfading akan memberikan hasil yang lebih baik. Anda dapat melakukannya misalnya dengan sox , tetapi Anda mungkin perlu mengonversi ke .wavfile terlebih dahulu (yang dapat dilakukan secara batch). File-file Mp3 menyandikan audio dalam bingkai dengan panjang tertentu, jadi Anda mungkin tidak dapat melakukan audio yang tumpang tindih skala mikrodetik dalam mp3 tanpa melakukan enkode ulang.
dirkt
Jawabannya di sini bisa disesuaikan.
Gyan
Anda telah membuat dua akun pengguna. Anda harus menggabungkannya. akun ini membuat pertanyaan tetapi sekarang Anda menggunakan akun ini .
Ramhound
Saya telah mengedit untuk saat ini, tapi ya, Anda benar-benar perlu meminta penggabungan, daripada memposting apa yang harus diedit sebagai jawaban @marie
Journeyman Geek
Selamat datang di Pengguna Super. Seperti yang dikatakan orang lain, tampaknya Anda tidak sengaja membuat dua akun. Gunakan formulir kontak dan pilih "Saya perlu menggabungkan profil pengguna" agar akun Anda digabung. Untuk menggabungkan mereka, Anda harus memberikan tautan ke dua akun. Untuk informasi Anda, ini adalah superuser.com/users/690627/marie dan superuser.com/users/690629/marie . Anda kemudian dapat mengedit , mengomentari, dan menerima jawaban untuk pertanyaan ini.
G-Man

Jawaban:

1

Gunakan perintah formulir

ffmpeg -i 1.mp3 -i 2.mp3 -i 3.mp3 -i 4.mp3
   -filter_complex
     "[1]adelay=delay1|delay1[b];
      [2]adelay=delay2|delay2[c];
      [3]adelay=delay3|delay3[d];
      [0][b][c][d]amix=4"
merged.mp3

Masing-masing delayNdalam milidetik adalah offset awal audio dari awal aliran audio. Jadi, jika Anda ingin file2 dimulai pada 14,2 detik dari campuran akhir, gunakan adelay=14200|14200untuk input stereo. Anda dapat menggunakan adelay=14200input mono. Di tangkapan layar Anda, ini adalah nilai kolom Mulai.

Label pad [a]..etc sewenang-wenang dan ditugaskan untuk output filter sehingga mereka dapat digunakan nanti di filter lain atau dipetakan untuk output. Setiap pad dapat dikonsumsi sekali. Mereka adalah alfanumerik tetapi menghindari pemberian bilangan bulat murni seperti [2]karena ffmpeg menggunakannya untuk merujuk ke file input.

Gyan
sumber
di bawah ini adalah baris perintah yang saya coba prototipe sesuai dengan penjelasan Anda. Saya menggunakan nilai kolom awal dan mono. ffmpeg tampaknya gagal mengalokasikan memori? dan nyaris tidak mencampur dua file pertama ketika saya melihat bentuk gelombang. Juga, tolong beri tahu saya apa cara terbaik untuk mendapatkan durasi file-file ini, dialog properti file Windows tampaknya menunjukkan 00:00:00 tetapi saya belum mencoba untuk benar-benar meminta API sistem file (semoga itu hanya memotong bagian fraksional) detik dalam dialog "manusia"). (Lihat ekor postingan dasar, saya tidak bisa mengetik di sini lagi)
Marie
Tingkatkan ffmpeg dan coba. Ffmpeg Anda lebih dari 4000 komit. Jika masih gagal, jalankan dengan -reportmenambahkan. Tautan ke file laporan.
Gyan