วิธีการต่อเชื่อมไฟล์ MP3 เสียงสั้น ๆ หลายไฟล์โดยมีระยะเวลาคาบเกี่ยวกันเฉพาะ


3

ฉันมีไฟล์ MP3 ที่สั้นมากเช่น 1 วินาทีที่มีพยางค์คำ ฉันต้องการที่จะทับซ้อนกัน (จุดสิ้นสุดของหนึ่งผสานกับจุดเริ่มต้นของการต่อไป) ฉันพบหลายหัวข้อเกี่ยวกับ crossfading แต่ฉันไม่แน่ใจว่าฉันต้องการ (crossfading) เช่นเพื่อลดระดับเสียงของหนึ่งและเพิ่มระดับเสียงของหน้าถัดไปเมื่อเราเปลี่ยนเป็น ฉันคิดว่าแค่การรวมกันของเสียงก็เพียงพอแล้วในเวลานี้

การทับซ้อนจำเป็นต้องเรียงตามลำดับไมโครวินาที ฉันเห็น FFmpeg มีทศนิยมหนึ่งวินาทีในตัวเลือกบางตัว ขณะนี้ฉันกำลังต่อไฟล์ MP3 สั้น ๆ เข้าด้วยกันดังนี้:

    /// <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);
    }

ฉันต้องการคำสั่งหรือเทคนิคที่จะต่อกันหลายไฟล์พร้อมกัน แต่ถ้าคุณแสดงวิธีทำสองไฟล์ฉันสามารถวนดูไฟล์ทั้งหมดได้ มันเป็นคำตอบที่น่าเกลียด แต่ก็ยอมรับได้ :)

@Mulvya สิ่งที่ฉันสามารถคว้าได้จากลิงก์ของคุณคือโครงสร้างบรรทัดคำสั่ง FFmpeg ต่อไปนี้ (ทั้งหมดในสตริงบรรทัดคำสั่งเดียว)

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

delay1, delay2 และ delay3 ต้องเป็นอย่างไร พวกเขาจะมีระยะเวลาในหน่วยมิลลิวินาทีของ1.mp3, 2.mp3และ3.mp3ตามลำดับ?

วิธีที่ดีที่สุดในการเรียกคืนระยะเวลาเหล่านี้คืออะไร เช่นคุณสมบัติของไฟล์ระบบไฟล์นั้นถูกต้องหรือไม่?

ตัวอักษร [b], [c], [d] บางสิ่งบางอย่างตามอำเภอใจหรือไม่? ชื่อช่อง? ฉันจะต้องสร้าง

ที่ฉันจะระบุตัวอย่างเช่น 10 มิลลิวินาทีทับซ้อนระหว่าง1.mp3และ2.mp3, 2 และ 3 แล้ว 3 และ 4?

หรือฉันควรลบ 10 มิลลิวินาทีจากความล่าช้า 1, ความล่าช้า 2, ความล่าช้า 3

เพิ่มเติม: นี่คือภาพรวมของการตัดต่อแบบแมนนวลที่ฉันรวบรวมไว้เพื่ออธิบายสิ่งที่ฉันกำลังพยายามทำให้สำเร็จทางโปรแกรม (สมมติว่ามีการทับซ้อนคงที่ที่นี่ฉันพยายามประมาณ 100 มิลลิวินาที) โปรดอธิบายว่าควรค่าใดสำหรับ delay1, delay2, delay3 ด้านบน

ภาพรวมของการตัดต่อด้วยตนเอง

ระยะเวลา MP3 จากเอาต์พุต FFmpeg คือ 550, 440, 500, 960, 440 ms ตามลำดับ

========= เอาต์พุตปัจจุบันจาก 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%


การผสานเสียงที่มีการเหลื่อมกันนั้นไม่แตกต่างจากการข้ามหน้าและการข้ามหน้าจะให้ผลลัพธ์ที่ดีกว่า คุณสามารถทำได้เช่นกับsoxแต่คุณอาจต้องแปลงเป็น.wavไฟล์ก่อน (ซึ่งสามารถทำได้ในแบทช์) ไฟล์ Mp3 เข้ารหัสเสียงในกรอบความยาวที่แน่นอนดังนั้นคุณอาจไม่สามารถทำเสียงซ้อนทับขนาดไมโครวินาทีใน mp3 โดยไม่ต้องเข้ารหัสซ้ำได้
dirkt

คำตอบที่นี่สามารถปรับเปลี่ยนได้
Gyan

คุณได้สร้างบัญชีผู้ใช้สองบัญชี คุณควรรวมพวกเขา นี้บัญชีที่สร้างคำถาม แต่ตอนนี้ใช้ของคุณนี้บัญชี
Ramhound

ตอนนี้ฉันได้แก้ไข แต่ใช่คุณต้องขอรวมจริงๆแทนที่จะโพสต์สิ่งที่ควรแก้ไขเป็นคำตอบ @marie
Journeyman Geek

ยินดีต้อนรับสู่ Super User อย่างที่คนอื่น ๆ พูดกันดูเหมือนว่าคุณได้สร้างบัญชีสองบัญชีโดยไม่ตั้งใจ ใช้แบบฟอร์มการติดต่อและเลือก“ ฉันต้องรวมโปรไฟล์ผู้ใช้” เพื่อให้บัญชีของคุณรวมเข้าด้วยกัน ในการผสานพวกเขาคุณจะต้องให้ลิงก์ไปยังทั้งสองบัญชี สำหรับข้อมูลของคุณเหล่านี้เป็นsuperuser.com/users/690627/marieและsuperuser.com/users/690629/marie จากนั้นคุณจะสามารถแก้ไขแสดงความคิดเห็นและยอมรับคำตอบสำหรับคำถามนี้
G-Man

คำตอบ:


1

ใช้คำสั่งของแบบฟอร์ม

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

แต่ละหน่วยdelayNเป็นมิลลิวินาทีคือออฟเซ็ตเริ่มต้นของเสียงตั้งแต่เริ่มต้นสตรีมเสียง ดังนั้นหากคุณต้องการให้ file2 เริ่มต้นที่ 14.2 วินาทีของการมิกซ์สุดท้ายใช้adelay=14200|14200สำหรับอินพุตสเตอริโอ คุณสามารถใช้adelay=14200สำหรับอินพุตโมโน ในภาพหน้าจอของคุณค่าเหล่านี้คือค่าคอลัมน์เริ่ม

แผ่นป้ายชื่อ[a].. ฯลฯ โดยพลการและกำหนดให้กับเอาต์พุตของตัวกรองเพื่อให้สามารถใช้ในตัวกรองอื่นหรือแมปสำหรับเอาท์พุทในภายหลัง แต่ละแผ่นสามารถบริโภคครั้งเดียว พวกเขาเป็นตัวอักษรและตัวเลข แต่หลีกเลี่ยงการกำหนดจำนวนเต็มบริสุทธิ์เช่น[2]ffmpeg ใช้ที่อ้างถึงไฟล์อินพุต


ด้านล่างเป็นบรรทัดคำสั่งที่ฉันพยายามทำต้นแบบด้วยตามคำอธิบายของคุณ ฉันใช้ค่าคอลัมน์เริ่มต้นและโมโน ffmpeg ดูเหมือนจะล้มเหลวในการจัดสรรหน่วยความจำ? และแทบจะผสมสองไฟล์แรกเมื่อฉันดูรูปคลื่น นอกจากนี้โปรดแจ้งให้เราทราบว่าวิธีที่ดีที่สุดในการรับระยะเวลาของไฟล์เหล่านี้คืออะไรหน้าต่างไดอะล็อกคุณสมบัติไฟล์ของ Windows ปรากฏขึ้น 00:00:00 แต่ฉันไม่ได้พยายามค้นหาระบบไฟล์ API จริง ๆ (หวังว่ามันจะตัดส่วนเศษส่วนเท่านั้น ของวินาทีในกล่องโต้ตอบ "มนุษย์") (ดูส่วนท้ายของโพสต์ฐานฉันไม่สามารถพิมพ์ที่นี่อีกต่อไป)
Marie

อัปเกรด ffmpeg แล้วลอง ffmpeg ของคุณมีอายุมากกว่า 4,000 คอมมิท หากยังคงล้มเหลวให้รันพร้อมกับ-reportเพิ่ม ลิงก์ไปยังไฟล์รายงาน
Gyan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.