วิธีการเข้าร่วม / รวมไฟล์ mp3 หลายไฟล์?


59

ค้นหา Google เกี่ยวกับวิธีการเข้าร่วม / รวมไฟล์ MP3 หลายไฟล์มันแสดงให้เห็นว่าฉันควรcatรวมเข้าด้วยกัน

นั่นอาจ "ทำงาน" แต่ชัดเจนว่าไม่ใช่วิธีที่ถูกต้องเนื่องจากแต่ละส่วนหัวและชุดของแท็ก IDv3 จะถูกต่อกัน

มีโปรแกรม Linux ที่สามารถสคริปต์เพื่อเข้าร่วม / รวม mp3 จำนวนมากหรือไม่

mplayer / mencoder / ffmpeg สามารถทำได้หรือไม่?

คำตอบ:


79

สิ่งนี้จะต่อเชื่อมไฟล์ mp3 สองไฟล์และเมตาดาต้าที่ได้จะเป็นไฟล์แรก:

ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy output.mp3

นี่เป็นเพราะสำหรับ ffmpeg ส่วน "concat:" ทั้งหมดเป็นไฟล์อินพุต "เดียว" และเมตาดาต้าจะเป็นไฟล์ที่ต่อกันเป็นไฟล์แรก หากคุณต้องการใช้เมทาดาทาจากไฟล์ที่สองแทนคุณต้องเพิ่มมันเป็นไฟล์อินพุตดัมมีและแมปเมทาดาทาของมันกับของเอาต์พุต:

ffmpeg -i "concat:file1.mp3|file2.mp3" -i file2.mp3 -acodec copy test.mp3 -map_metadata 0:1

หากคุณต้องการสร้างข้อมูลเมตาของคุณจากทั้งสองเมตาดาต้าคุณจะต้องทำด้วยตนเอง คุณสามารถถ่ายโอนข้อมูลเมตาของไฟล์ด้วย

ffmpeg -i file1.mp3 -f ffmetadata file1.metadata

หลังจากดัมพ์ทั้งเมทาดาทาและสร้างเมทาดาทาใหม่แล้วคุณสามารถเพิ่มเมตาดาต้าลงในไฟล์เอาต์พุต-metadataได้และคุณสามารถปิดใช้งานการคัดลอกเมทาดาทาได้โดยการตั้งค่าการ-map_metadataแมปจากหมายเลขไฟล์อินพุตเชิงลบ ค่านี้ตั้งค่าชื่อและไม่มีข้อมูลเมตาอื่น ๆ :

ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy -metadata "title=Some Song" test.mp3 -map_metadata 0:-1

FYI สิ่งนี้ต้องการ ffmpeg รุ่นที่แน่นอน ถ้ามีข้อความแจ้งว่าไม่พบไฟล์ที่เกี่ยวข้อง ... ลองอัปเกรดและรันอีกครั้ง
Sameer

ทำงานได้ดีใน ffmpeg 0.10.4 ใน Gentoo คุณใช้อะไร คุณแน่ใจหรือว่าคุณไม่ได้พิมพ์ผิดคำสั่ง?
Ambroz Bizjak

1
เพียงต้องการชี้แจงบางสิ่งสำหรับผู้อื่น: -acodecหมายความว่าจะใช้ตัวแปลงสัญญาณเสียงและcopyหมายความว่าจะมีเพียง muxing และ demuxing เท่านั้น แต่ไม่เข้ารหัส / แปลงรหัส (เช่นรวดเร็วและไม่มีการสูญเสียคุณภาพ)
Housemd

1
มันจะดีถ้ามีโปรแกรม GUI ที่ฉันสามารถลากและวางหลายไฟล์ (เช่นเรียงตามลำดับเวลาสำหรับการบันทึกที่บันทึกตามลำดับและอาจแก้ไขไฟล์บางไฟล์) แล้วมันจะออกหนึ่งไฟล์
James Ray

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

13

Mp3Wrap - โปรแกรมอรรถประโยชน์บรรทัดคำสั่งที่รวมไฟล์ MP3 หลายไฟล์ไว้ใน MP3 เดียวที่เล่นได้โดยไม่สูญเสียชื่อไฟล์หรือข้อมูล ID3 และไม่มีการเข้ารหัสซ้ำ ยังสนับสนุนการเก็บถาวรข้อมูลที่ไม่ใช่เสียงเช่นเพลย์ลิสต์ไฟล์ข้อมูลและภาพหน้าปกใน MP3 ไฟล์เหล่านี้สามารถแตกไฟล์ได้ในภายหลัง (โดยใช้ mp3splt เป็นต้น); ตัวถอดรหัส MP3 ทั่วไปสามารถเล่นไฟล์เสียงทั้งหมดเป็นแทร็คเดียว


1
ขอบคุณสำหรับคำแนะนำนี้ .. โซลูชันที่เบากว่า / ง่ายกว่ามากแล้ว ffmpeg เนื่องจากฉันรวม 100+ mp3 เข้าด้วยกันและต้องการตัวเลือกในการแยกกลับไปที่ต้นฉบับ
joshbaptiste

คุณสมบัตินี้ใช้งานไม่ได้อีกต่อไป - ลองเชื่อมไฟล์สองสามไฟล์แล้วตรวจสอบไฟล์เอาต์พุตmp3val- มันจะรายงานข้อผิดพลาดในการซิงค์ ซึ่งหมายความว่าจะไม่เล่นหลังจากก้อนแรกใน Chrome 64+ (ดูbugs.chromium.org/p/chromium/issues/detail?id=794782และbugs.chromium.org/p/chromium/issues/detail?id = 806601 # c10 )
Housemd

ดูเหมือนจะไม่ทำงานบน Windows ไม่มีการเก็บข้อมูลเมตา
Gruber

9

วิธีนี้จะต่อโฟลเดอร์ที่เต็มไปด้วย MP3 เข้ากับไฟล์ MP3 เดียว

1) บันทึกรายการไฟล์ MP3 เพื่อเชื่อมต่อเช่น

$ cat mylist.txt
file '/tmp/01.mp3'
file '/tmp/02.mp3'
file '/tmp/03.mp3'
file '/tmp/04.mp3'
file '/tmp/05.mp3'
file '/tmp/06.mp3'
file '/tmp/07.mp3'

2) เรียกใช้คำสั่งดังต่อไปนี้ ( -safe 0จะไม่จำเป็นถ้า mylist.txt ใช้เส้นทางญาติแทน ):

$ ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp3

3

หากคุณต้องการต่อไฟล์ mp3 ทั้งหมดของไดเรกทอรีปัจจุบัน:

function join_by { local IFS="$1"; shift; echo "$*"; }
files=(*.mp3)
ffmpeg -i "concat:`join_by "|" $files`" -acodec copy output.mp3

0

หากคุณต้องการสคริปต์คุณควรใช้ ffmpeg ดีกว่า แต่ถ้าคุณเคยเพียงแค่ต้องประยุกต์ใช้ในการทำสิ่งเช่นนั้นคุณอาจจะลองออกความกล้า มันเป็นโอเพ่นซอร์สและไขว้แพลตฟอร์ม ฉันไม่ได้ใช้มันเพื่อเข้าร่วม mp3s แต่ฉันใช้มันเพื่อครอบตัดส่วนของ mp3 ออกไปและทำให้มันหายไปในตอนท้าย ฉันยินดีที่จะเดิมพันคุณสามารถเข้าร่วม mp3 และข้ามพวกเขาให้หายไปด้วยเช่นกัน


4
ความกล้าเท่าที่ฉันรู้ทำงานบนข้อมูลเสียงดิบและการต่อ mp3 เข้าด้วยกันจะส่งผลให้เกิดความเสื่อมเนื่องจากการแปลงรหัส
Ambroz Bizjak

0

zsh:

audio-join() ffmpeg -i "concat:${(j:|:)@[2,-1]}" -acodec copy $1

audio-join output.mp3 *.mp3

เราคาดหวังคำตอบที่จะมีคำอธิบาย (ไม่ใช่คำตอบทั้งหมดในหน้านี้เป็นตัวอย่างที่ดี)
Scott

0

ตามคำตอบของ Miles Wolbe นี่คือหนึ่งในสายการบินที่เหมาะกับฉัน:

ls *.mp3 | \
    sed -e "s/\(.*\)/file '\1'/" | \
    ffmpeg -protocol_whitelist 'file,pipe' -f concat -i - -c copy output.mp3
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.