การแปลง Flac เป็น mp3 จะชดเชยเสียงโดยไม่กี่มิลลิวินาที


0

เมื่อใช้คำสั่งการแปลงอย่างง่าย: ffmpeg -i fileA.flac fileB.mp3 เอาต์พุต mp3 จะถูกชดเชยประมาณ 5 ms

สิ่งนี้จะไม่เกิดขึ้นหากฉันพยายามแปลงเป็น Vorbis / Ogg (เช่นffmpeg -i fileA.flac fileC.ogg)

ภาพหน้าจอความกล้า:

ภาพหน้าจอความกล้าแสดงการชดเชย

ความคิดใด ๆ ที่ทำให้เกิดเหตุการณ์นี้ขึ้นและฉันจะแก้ไขได้อย่างไร

คำตอบ:


3

นี่เป็นเพราะการเข้ารหัส MP3 (หรือทั้งการเข้ารหัสและถอดรหัส) ดูคำถามที่พบบ่อยทางเทคนิค :

เหตุใด MP3 ที่ถอดรหัสจึงยาวกว่าไฟล์. wav ดั้งเดิม

เนื่องจาก LAME (และตัวเข้ารหัสที่อิงกับ MDCT อื่น ๆ ทั้งหมด) เพิ่มการขยายไปยังจุดเริ่มต้นและจุดสิ้นสุดของแต่ละเพลง LAME ฝังจำนวนช่องว่างภายในข้อมูลเสริมของเฟรมแรกของไฟล์ MP3 (แท็ก INFO LAME)

อย่างต่อเนื่อง:

ตัวถอดรหัสทั้งหมดที่ฉันทดสอบได้ทำการทดสอบความล่าช้า 528 ตัวอย่าง นั่นคือหลังจากถอดรหัสไฟล์ mp3 แล้วผลลัพธ์จะมีตัวอย่าง 528 ตัวอย่างจาก 0 ที่ต่อท้ายด้านหน้า นี่เป็นเพราะรูทีน MDCT / filterbank มาตรฐานที่ใช้โดย ISO มีความล่าช้า 528 ตัวอย่าง มันเป็นไปได้ที่จะเขียนรูทีน MDCT / filterbank ด้วยความล่าช้า 0 ตัวอย่าง (ดูคำอธิบายของรูทีน MDCT / filterbank ของ Takehiro ที่ใช้ในการเข้ารหัส LAME ด้านล่าง) แต่ฉันไม่รู้ว่ามีใครทำเช่นนี้ นอกจากนี้เนื่องจากลักษณะที่ซ้อนทับกันของเฟรม MDCT ในช่วงครึ่งแรกของเม็ดแรก (1 เม็ด = 576 ตัวอย่าง) ไม่มีกรอบก่อนหน้านี้ที่จะซ้อนทับกันทำให้เกิดการลดทอนของตัวอย่าง N แรก

มันจะได้รับทางเทคนิคมากขึ้นถ้าคุณอ่าน แต่สิ่งนี้ควรสรุปปัญหา


มีวิธีตัดการหน่วงเวลาตัวอย่าง 528 โดยตรงผ่าน ffmpeg หรือไม่
Prime_Aqasix

ตกลงดูเหมือนว่าffmpeg -ss 0.0528 -i fileA.flac fileB.mp3จะทำเคล็ดลับ แต่ฉันไม่เข้าใจว่าทำไมเนื่องจากไฟล์ใช้อัตราตัวอย่าง 44100Hz ไม่ควร 528 ตัวอย่างใช้เวลา 0.0119 วินาที?
Prime_Aqasix

-ss 0.0528หมายความว่ามีการชดเชย 0.0528 วินาทีไม่ใช่ตัวอย่าง แต่คุณสามารถตัดแต่งตัวอย่างได้เช่น: stackoverflow.com/a/39809030/435093
slhck
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.