ffmpeg สเตอริโอแชนแนลเป็นสองช่องโมโน


11

ฉันต้องการทราบว่ามีวิธีการแยกสเตอริโอเป็นสองไฟล์ wav ขาวดำหรือไม่ เดาแรกของฉันคือ

ffmpeg -threads "16" -i "$2" -map 0:1:1 "$3"

เพราะวิดีโอตัวอย่างของฉันมีข้อมูลดังต่อไปนี้:

Audio
ID                                       : 2
Format                                   : AAC
Format/Info                              : Advanced Audio Codec
Format profile                           : LC
Codec ID                                 : 40
Duration                                 : 39mn 0s
Bit rate mode                            : Constant
Bit rate                                 : 256 Kbps
Channel(s)                               : 2 channels
Channel positions                        : Front: L R

ดังนั้นฉันจึงมีออดิโอสตรีมนี้ที่มีสองช่องและต้องการสองช่องโมโน ตอนแรกฉันลองใช้ map_channel แต่นั่นไม่ได้ทำเคล็ดลับแทนฉันได้รับข้อความแสดงข้อผิดพลาด:

Syntax error, mapchan usage: [file.stream.channel|-1][:syncfile:syncstream]

ดังนั้นฉันจึงลองอีกครั้งด้วยโค้ดที่กล่าวถึงข้างต้นและอย่างน้อย ffmpeg ทำอะไรบางอย่าง แต่ผลลัพธ์ไม่ใช่สิ่งที่ฉันคาดไว้แทนที่จะแยกมันออกเป็นไฟล์ mono wav สองไฟล์ผลลัพธ์คือ:

info.system.container = WAVE
info.system.size = 449413166 Bytes
info.system.size = 428.59 MiB
info.system.playtime = 2340.69 s
info.audio0.codec = PCM
info.audio0.desc = 
info.audio0.format_endianness = Little
info.audio0.format_sign = Signed
info.audio0.format_resolution = 16 bits
info.audio0.samprate = 48000 Hz
info.audio0.channels = 2

อีกครั้งด้วยช่องเสียงสองช่องฉันจะไปไหนผิด

คำตอบ:


17

การใช้ ffmpeg มีหลายวิธีที่ฉันรู้ว่าจะไปจากสเตอริโอไปยังไฟล์โมโนเดี่ยวสองไฟล์หรือสตรีมโมโนสองลำในไฟล์เดียว:

สเตอริโอถึง 2 โมโนเอาท์พุท

สเตอริโอถึง 2 โมโนเอาท์พุท

-map_channel ตัวเลือก

ffmpeg -i stereo.wav -map_channel 0.0.0 left.wav -map_channel 0.0.1 right.wav

pan ตัวกรองเสียง

ffmpeg -i stereo.wav -filter_complex \
"[0:0]pan=1|c0=c0[left]; \
 [0:0]pan=1|c0=c1[right]" \
-map "[left]" left.wav -map "[right]" right.wav

สเตอริโอเป็น 2 สตรีมโมโน

channelsplit ตัวกรองเสียง

สเตอริโอเป็น 2 สตรีมโมโน

สิ่งนี้จะสร้างไฟล์เอาต์พุตหนึ่งไฟล์ที่มีสตรีมโมโนเดี่ยวสองรายการ:

ffmpeg -i input.m4a -filter_complex channelsplit out.mka

ยังดู


ขอบคุณฉันพบข้อบกพร่องแล้ว เมื่อฉันใช้-map_channelฉันไม่ได้ใช้จุดเดียว แต่ฉันใช้จุดสองจุดแทนดังนั้นจึงไม่น่าแปลกใจว่ามันจะไม่ทำงาน ตอนนี้มันใช้งานได้!
เซบาสเตียน

1
ให้ทึกทักว่าฉันมีไฟล์ที่มี 6 ช่องในสตรีมเดียวฉันจะรู้ได้อย่างไรว่าช่องไหนเป็นช่องไหน เมื่อฉันมี 2 ช่องทางมันง่ายเสมอมันเหลือ 0.0.0 และ 0.0.1 เสมอ ฉันค้นหาเอกสาร ffmpeg และมันบอกว่า-layoutsแต่ไม่มีตัวอย่างว่ามันทำงานอย่างไร ฉันได้ลองแล้วและข้อความที่ฉันได้รับคือMissing argument for option 'layouts'อะไรคือข้อโต้แย้งที่ ffmpeg คาดหวัง?
เซบาสเตียน

@sebastian คุณต้องการสร้างไฟล์เอาต์พุตโมโนหกไฟล์จากอินพุตหกช่องหรือไม่?
llogan

ฉันมีสองหรือสามคลิปที่มีระบบเสียงรอบทิศทาง 5.1 และแน่นอนหลังจากฉันใช้ map_channel กับทั้งหกคลิปฉันไม่สามารถบอกได้ว่า map_channel ใดอยู่ในตำแหน่งใดนี่เป็นตัวอย่าง: Audio ID : 2 Channel(s) : 6 channels Channel positions : Front: L C R, Side: L R, LFEแต่ฉันคิดว่าฉันได้พบวิธีแก้ปัญหาแล้ว สำหรับปัญหานี้
เซบาสเตียน

@sebastian ทางออกของคุณคืออะไร?
llogan

1

คุณควรใช้ตัวกรอง channelsplitสำหรับสิ่งนั้น แผนที่ไม่สามารถทำได้ ตัวอย่างเช่น:

ffmpeg -i in.mp3 -filter_complex channelsplit out.mkv

ตรวจสอบลิงก์ไปยังเอกสารที่ฉันให้ไว้

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