kênh âm thanh nổi ffmpeg thành hai kênh đơn âm


11

Tôi muốn biết liệu có cách nào để tách âm thanh nổi thành hai tập tin đơn âm. Tôi đoán đầu tiên là

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

bởi vì video ví dụ của tôi có các thông tin sau:

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

Vì vậy, tôi có một luồng âm thanh này với hai kênh và muốn hai kênh đơn âm. Lúc đầu, tôi đã thử nó với map_channel, nhưng điều đó không thực hiện được thay vào đó tôi nhận được một thông báo lỗi:

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

Vì vậy, tôi đã thử lại với mã được đề cập ở trên và ít nhất ffmpeg đã làm một cái gì đó, nhưng kết quả không như tôi mong đợi, thay vì chia nó thành hai tệp wav đơn, kết quả là:

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

một lần nữa với hai kênh âm thanh, vậy tôi đã sai ở đâu?

Câu trả lời:


17

Sử dụng ffmpeg, có một số phương pháp mà tôi biết để chuyển từ âm thanh nổi sang hai tệp đơn âm hoặc hai luồng đơn âm trong một tệp:

âm thanh nổi đến 2 đầu ra

âm thanh nổi đến 2 đầu ra

-map_channel Lựa chọn

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

pan bộ lọc âm thanh

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

âm thanh nổi đến 2 luồng đơn

channelsplit bộ lọc âm thanh

âm thanh nổi đến 2 luồng đơn

Điều này sẽ tạo một tệp đầu ra có hai luồng đơn âm riêng lẻ:

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

Cũng thấy


Cảm ơn bạn, tôi đã tìm thấy lỗ hổng của tôi. Khi tôi đang sử dụng, -map_channeltôi đã không sử dụng các dấu chấm đơn lẻ mà thay vào đó tôi đã sử dụng các dấu chấm kép, vì vậy không có gì lạ khi nó không hoạt động. Bây giờ nó hoạt động!
sebastian

1
giả sử tôi có một tệp có 6 kênh trong một luồng, làm thế nào để tôi biết đó là kênh nào? Khi tôi có 2 kênh dễ dàng, nó luôn luôn là 0,0.0 trái và 0,0,1 phải. Tôi đã tra cứu trong tài liệu ffmpeg và nó nói -layoutsnhưng không có ví dụ nào về cách thức hoạt động của nó. Tôi đã thử nó và thông điệp tôi nhận được Missing argument for option 'layouts'là ffmpeg đang mong đợi điều gì?
sebastian

@sebastian Bạn muốn tạo sáu tệp đầu ra đơn từ đầu vào sáu kênh?
llogan

Tôi có hai hoặc ba clip có âm thanh vòm 5.1 và tất nhiên sau khi tôi sử dụng map_channel trên tất cả sáu clip, tôi không thể biết map_channel thuộc về vị trí nào, đây là một ví dụ: Audio ID : 2 Channel(s) : 6 channels Channel positions : Front: L C R, Side: L R, LFEnhưng tôi nghĩ tôi đã tìm ra giải pháp cho vấn đề này
sebastian

@sebastian Giải pháp của bạn là gì?
llogan

1

Bạn nên sử dụng bộ lọc kênhplit cho điều đó. -map không thể làm điều này. Ví dụ:

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

Kiểm tra liên kết đến tài liệu mà tôi đã cung cấp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.