有没有办法(自动)检测立体视频/音频的通道是否异相并相互抵消?

问题描述 投票:0回答:1

背景

我在尝试使用 ffmpeg 将从

youtube 视频
下载的音频转换为单声道 .wav 格式时遇到问题。尽管使用典型的转换命令(下面的代码),生成的音频要么是无声的,要么是损坏的,这表明潜在的立体声通道被取消。 我尝试将音频加载到Python中并计算相位和互相关,但是这一步使用了大量内存,特别是对于6小时长的音频。

目标

我正在寻找一种方法,最好使用

ffmpeg
来检测立体声通道是否由于相位失准而相互抵消。此外,我的目标是在转换为单声道之前自动执行相位反转过程,以确保生成的音频的完整性。

问题:

如何使用

ffmpeg
自动检测立体声通道是否相互抵消并随后反转相位以确保成功转换为单声道?任何见解、解决方案或替代方法将不胜感激。

采取的步骤:

  1. 使用
    yt-dlp
    从 YouTube 下载音频。
  2. 尝试使用
    ffmpeg
    将音频转换为单声道,导致输出无声或损坏。
  3. 通过在转换前手动反转一个通道的相位,成功将音频转换为单声道。

从 youtube 下载音频

yt-dlp -f bestaudio https://www.youtube.com/watch?v=s3QB_rJzH08 -o input.webm

音频转换

生成的文件无声或已损坏

ffmpeg -i input.webm  -ac 1 -ar 16000 -c:a pcm_s16le output.wav

通过相位反转将音频转换为单声道 .wav

生成的文件有音频

ffmpeg -i input.webm -af "aeval=val(0)|-val(1)" -ac 1 -ar 16000 -c:a pcm_s16le output.wav
audio ffmpeg signal-processing
1个回答
0
投票

FFmpeg 有相位差检测滤波器。

ffmpeg -i input.webm -af "aphasemeter=video=0:phasing=1:angle=90:duration=1:tolerance=0.001,ametadata=print:file=aphase.log" -vn -f null -

文件

aphase.log
将包含以下格式的每帧相位差日志

frame:17302 pts:19931904 pts_time:451.971
lavfi.aphasemeter.phase=0.224391

相位值的范围可以是-1到+1。

-1
表示通道完全异相,
1
表示通道同相。

如果通道异相,ffmpeg 还将在控制台日志中打印摘要读数。

© www.soinside.com 2019 - 2024. All rights reserved.