ฉันต้องการแทนที่สตรีมเสียงที่สอง (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.mkvv
0:a:0- เดอะหมายถึงการป้อนข้อมูลซึ่งเป็นครั้งแรก0 หมายถึง "เลือกประเภทสตรีมเสียง" สุดท้ายหมายถึงสตรีมเสียงแรกจากอินพุตนี้ หากใช้เฉพาะสตรีมวิดีโอทั้งหมดจะถูกแมปvideo.mkva00:a
1:a- เดอะหมายถึงการป้อนข้อมูลที่สองซึ่งเป็น1 หมายถึง "เลือกประเภทสตรีมเสียง"audio.mp3a
-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มันคืออะไร ฉันไม่ได้รวมและได้ผลลัพธ์ที่ต้องการ