基于Dolby Logic Pro II,FFmpeg 5.1转立体声脚本可行性及简化咨询
基于Dolby Logic Pro II公式的5.1转立体声下混实现问题
我希望使用FFmpeg结合Dolby Logic Pro II公式将5.1声道音频下混为立体声,对应的下混公式如下:
Lt = L + (–3 dB × C) – (–1.2 dB × Ls) – (–6.2 dB × Rs)
Rt = R + (–3 dB × C) + (–6.2 dB × Ls) + (–1.2 dB × Rs)
我写了一段冗长且可能冗余的Bash脚本:
# L channel ffmpeg -i "$filename" -map_channel 0.1.0 -c:a pcm_f32le L.wav ffmpeg -i "$filename" -map_channel 0.1.2 -filter:a "volume=-3dB" -c:a pcm_f32le C.wav ffmpeg -i "$filename" -map_channel 0.1.4 -af "volume=-1.2dB" -c:a pcm_f32le Ls.wav ffmpeg -i "$filename" -map_channel 0.1.5 -af "volume=-6.2dB" -c:a pcm_f32le Rs.wav ffmpeg -i Ls.wav -af "aeval=-val(0)" -c:a pcm_f32le Lsi.wav ffmpeg -i Rs.wav -af "aeval=-val(0)" -c:a pcm_f32le Rsi.wav ffmpeg -i L.wav -i C.wav -i Lsi.wav -i Rsi.wav -filter_complex "amix=inputs=4" -c:a pcm_f32le L_final.wav rm L.wav Ls.wav Rs.wav Lsi.wav Rsi.wav # R channel ffmpeg -i "$filename" -map_channel 0.1.1 -c:a pcm_f32le R.wav ffmpeg -i "$filename" -map_channel 0.1.4 -filter:a "volume=-6.2dB" -c:a pcm_f32le Ls.wav ffmpeg -i "$filename" -map_channel 0.1.5 -filter:a "volume=-1.2dB" -c:a pcm_f32le Rs.wav ffmpeg -i R.wav -i C.wav -i Ls.wav -i Rs.wav -filter_complex "amix=inputs=4" -c:a pcm_f32le R_final.wav rm R.wav C.wav Ls.wav Rs.wav # Mix ffmpeg -i L_final.wav -i R_final.wav -filter_complex "[0:0][1:0] amerge=inputs=2" -c:a pcm_f32le "${filename%.*}_dm.wav" rm L_final.wav R_final.wav
请问这个脚本是否可行?有没有更简便的实现方式?
更新:我还写了带90度相位偏移的Python代码,希望有人能验证这段代码的正确性:
import scipy, os, numpy as np os.system(f'ffmpeg -i "{filename}" -c:a pcm_f32le temp.wav') sample_rate, waves = scipy.io.wavfile.read("temp.wav") os.remove("temp.wav") L, R, C, LFE, LS, RS = waves.T LS_shifted = -np.imag(scipy.signal.hilbert(LS)) RS_shifted = np.imag(scipy.signal.hilbert(RS)) L_out = L + 0.708 * C - 0.871 * LS_shifted - 0.49 * RS_shifted R_out = R + 0.708 * C + 0.49 * LS_shifted + 0.871 * RS_shifted scipy.io.wavfile.write("out.wav", sample_rate, np.vstack((L_out, R_out)).T)
内容的提问来源于stack exchange,提问作者anti-hero
相关产品推荐
相关产品推荐

