มีความแตกต่างระหว่างสองคำสั่งสำหรับการแยกเสียงจากวิดีโอหรือไม่
ffmpeg -i input.mp4 -c copy -map 0:a output.wav
ffmpeg -i input.mp4 -vn -acodec copy output.wav
มีความแตกต่างระหว่างสองคำสั่งสำหรับการแยกเสียงจากวิดีโอหรือไม่
ffmpeg -i input.mp4 -c copy -map 0:a output.wav
ffmpeg -i input.mp4 -vn -acodec copy output.wav
คำตอบ:
หากไฟล์ mp4 ของคุณมีแทร็กเสียงเพียงแทร็กเดียวทั้งสองคำสั่งจะมีผลลัพธ์เหมือนกัน
มีความแตกต่างที่สำคัญอย่างน้อยหนึ่งกรณีในกรณีที่ mp4 ของคุณมีแทร็กเสียง / สตรีมหลายรายการ (ฉันไม่ได้อ้างถึงหลายช่องทางในสตรีม)
คอนเทนเนอร์ WAV อนุญาตให้ใช้หนึ่งแทร็กเสียงเท่านั้นดังนั้นคุณจึงใช้-map 0:a
มันอาจจะพยายามคัดลอกแทร็กเสียงมากกว่าหนึ่งไฟล์ไปยังไฟล์ WAV ของคุณซึ่งจะทำให้เกิดข้อผิดพลาดเช่น:
Stream mapping:
Stream #0:2 -> #0:0 (copy)
Stream #0:3 -> #0:1 (copy)
Stream #0:4 -> #0:2 (copy)
Stream #0:5 -> #0:3 (copy)
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
คำสั่งของคุณที่ไม่ได้ระบุการแมปจะไม่เกิดข้อผิดพลาดตามค่าเริ่มต้น ffmpeg จะส่งออกหนึ่งแทร็กแต่ละประเภทเท่านั้นหากไม่ได้ระบุการจับคู่
นอกเหนือจากนี้คุณไม่จำเป็นต้องระบุ-vn
เมื่อใช้-acodec copy
และระบุคอนเทนเนอร์ WAV เนื่องจาก ffmpeg จะไม่พยายามรวมวิดีโอใน WAV โดยอัตโนมัติ