คำตอบที่ดีกว่าพร้อมคำอธิบายการรวมคำแนะนำอัจฉริยะจาก slhck และ Mulvya ซึ่งเป็นการถอดพารามิเตอร์ที่ไม่จำเป็นออก
ffmpeg -i video.mp4 -i cover.jpg -acodec libmp3lame -b:a 256k -c:v copy -map 0:a:0 -map 1:v:0 output.mp3
ffmpeg
เครื่องมือการจัดทำเสียง / วิดีโอ: เลือกโดย OP แล้วมันเหมาะอย่างยิ่งสำหรับงานนี้
-i video.mp4
ไฟล์อินพุตแรก: วิดีโอที่มีไฟล์เสียงที่เราต้องการแยกออกมา
-i cover.jpg
ไฟล์อินพุตที่สองรูปภาพที่เราต้องการแสดงเมื่อเราเล่นไฟล์เสียงที่ได้
-acodec libmp3lame
เราต้องการสร้างไฟล์. mp3 โดยใช้ตัวเข้ารหัส LAME
-b:a 256k
ชุดนี้อัตราบิตสำหรับแทร็กเสียงเป็นค่าคงที่ 256Kb / s ตัวเลือกที่ชาญฉลาดจะเข้ารหัสด้วยบิตเรตตัวแปรระบุพารามิเตอร์คุณภาพ : -q:a 0
ถามถึงคุณภาพสูงสุดในขณะที่-q:a 4
มักแสดงถึงการประนีประนอมที่ดีระหว่างคุณภาพเสียงที่รับรู้และบิตเรต (และขนาดไฟล์)
-c:v copy
นี่เป็นการระบุว่าสตรีมวิดีโอ (รูปภาพ. jpg) ไม่ได้ถูกเข้ารหัสใหม่ แต่ต้องคัดลอกเหมือนเดิม สิ่งนี้มีประโยชน์ในการหลีกเลี่ยงการประมวลผลที่ไม่จำเป็นและการสูญเสียคุณภาพที่อาจเกิดขึ้นเมื่อทำการเข้ารหัสเป็นรูปแบบการสูญเสีย ในกรณีของเราหากไม่มีพารามิเตอร์นี้ภาพจะถูกถอดรหัสจาก. jpg และเข้ารหัสเป็น. png ซึ่งเห็นได้ชัดว่าเป็นรูปแบบดั้งเดิมที่ได้รับเลือกโดยค่าเริ่มต้น สิ่งนี้จะไม่แสดงถึงการสูญเสียคุณภาพเนื่องจาก. png เป็น lossles แต่บ่อยครั้งกว่าจะไม่ทำให้ขนาดไฟล์เพิ่มขึ้นเนื่องจากข้อเท็จจริงที่ว่า. jpg (เป็นความสูญเสีย) มักจะมีอัตราการบีบอัดที่ดีกว่า
-map 0:a:0
นี่เป็นการเลือกสตรีมที่จะใช้จาก0:
อินพุตไฟล์แรก ( ): มันต้องเป็นสตรีม( :0
) เสียงแรก ( ) ที่a
มีอยู่
-map 1:v:0
นี่เป็นการเลือกสตรีม:0
วิดีโอ ( v
) อันแรก ( ) จาก1:
ไฟล์อินพุตที่สอง ( )
output.mp3
ชื่อของพารามิเตอร์นี้ถูกเลือกอย่างฉลาดแกมโกงเพื่อแนะนำไปแล้วว่านี่จะต้องเป็นชื่อที่จะมอบให้กับไฟล์เสียงออก (.mp3) ที่มีภาพรวมที่เราต้องการสร้าง
คำตอบเดิม
สิ่งนี้จะสร้างไฟล์เสียง (.mp3) ที่มีรูปแบบคงที่โดยใส่วิดีโอ (.mp4) และรูปภาพ (.jpg) จากงานแต่งงานของฉัน:
ffmpeg -i video.mp4 -i cover.jpg -acodec libmp3lame -metadata title=video -b:a 256k -map_metadata 0 -map 0:1 -map 1 output.mp3
ดูเอกสารประกอบ ffmpeg เกี่ยวกับการเลือกสตรีมอินพุตด้วย-map
ซึ่งเป็นตัวเลือกที่เกี่ยวข้องที่นี่
ฉันแรกรันคำสั่งด้วยเพียง-map 0 -map 1
และได้รับข้อมูลนี้:
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> png (native))
Stream #0:1 -> #0:1 (aac (native) -> mp3 (libmp3lame))
Stream #1:0 -> #0:2 (mjpeg (native) -> png (native))
ดังนั้นฉันรู้ว่าฉันต้องการสตรีม1
(aac audio) จากไฟล์ที่มีหมายเลขดัชนี0
เช่นไฟล์วิดีโอ -map 0:1 -map 1
ดังนั้นจึงจะต้องมีการเลือกไว้อย่างชัดเจนด้วย