ฉันต้องการแทนที่สตรีมเสียงที่สอง (0: 2) ในไฟล์วิดีโอที่มีสตรีมเสียงสองรายการและให้ป้ายกำกับหากเป็นไปได้ ฉันจะไปเกี่ยวกับเรื่องนี้อย่างไร คำสั่ง ffmpeg ทั้งหมดที่ฉันพบจะไม่ให้ฉันเก็บกระแสข้อมูลเสียงที่สอง
ฉันต้องการแทนที่สตรีมเสียงที่สอง (0: 2) ในไฟล์วิดีโอที่มีสตรีมเสียงสองรายการและให้ป้ายกำกับหากเป็นไปได้ ฉันจะไปเกี่ยวกับเรื่องนี้อย่างไร คำสั่ง ffmpeg ทั้งหมดที่ฉันพบจะไม่ให้ฉันเก็บกระแสข้อมูลเสียงที่สอง
คำตอบ:
ใช้-map
ตัวเลือกเพื่อเลือกสตรีมของคุณ การเลือกสตรีมเริ่มต้นจะเลือกหนึ่งสตรีมแต่ละประเภทเท่านั้นดังนั้นจึง-map
ต้องใช้
ffmpeg -i video.mkv -i audio.mp3 -map 0:v -map 0:a:0 -map 1:a \
-metadata:s:a:0 language=eng -metadata:s:a:1 language=sme -codec copy \
-shortest output.mkv
0:v
- เดอะหมายถึงการป้อนข้อมูลซึ่งเป็นครั้งแรก0
หมายถึง "เลือกวิดีโอประเภทกระแส"video.mkv
v
0:a:0
- เดอะหมายถึงการป้อนข้อมูลซึ่งเป็นครั้งแรก0
หมายถึง "เลือกประเภทสตรีมเสียง" สุดท้ายหมายถึงสตรีมเสียงแรกจากอินพุตนี้ หากใช้เฉพาะสตรีมวิดีโอทั้งหมดจะถูกแมปvideo.mkv
a
0
0:a
1:a
- เดอะหมายถึงการป้อนข้อมูลที่สองซึ่งเป็น1
หมายถึง "เลือกประเภทสตรีมเสียง"audio.mp3
a
-codec copy
จะสตรีมการคัดลอก (re-mux) แทนการเข้ารหัส หากคุณต้องการตัวแปลงสัญญาณเสียงที่เฉพาะเจาะจงคุณควรระบุ-c:v copy
(เพื่อเก็บวิดีโอ) และจากนั้นตัวอย่างเช่น-c:a libmp3lame
การเข้ารหัสสตรีมเสียงเป็น MP3 อีกครั้ง
-shortest
จะจบเอาต์พุตเมื่ออินพุตที่สั้นที่สุดสิ้นสุดลง
ffmpeg -i vid.mkv -i aud.mp3 -filter_complex "[0:a][1:a]amerge=inputs=2[a]" \
-map 0:v -map "[a]" -c:v copy -c:a aac -strict experimental -b:a 192k -ac 2 \
-shortest out.mp4
amerge
ตัวกรองที่นี่ดังนั้นจึงไม่สามารถคัดลอกเสียงในตัวอย่างนี้ได้-codec copy
แต่ฉันแก้ไขที่ (เวอร์ชันที่แตกต่างกันของ ffmpeg) ปัญหาอื่น ๆ ที่ฉันเคยมีกับ-map
มันบ่นเกี่ยวกับจำนวนกระแสที่ไม่ถูกต้อง
-map 0:v -map 1:a
ฉันเพียงแค่ใช้ ฉันถือว่านี่หมายถึงการใช้วิดีโอจากไฟล์แรก (video.mkv) จากนั้นใช้เสียงจากไฟล์ที่สอง (audio.mp4) เพื่อสร้าง output.mkv ... ไม่แน่ใจว่า-map 0:a:0
มันคืออะไร ฉันไม่ได้รวมและได้ผลลัพธ์ที่ต้องการ