Поэтому я написал этот код, который довольно точен, но когда я привожу обе звуковые дорожки (одну из видео, в которой используется микрофон ноутбука), и недавно отрегулированный звук, задержка все еще составляет около 50 мс. Почему это могло быть?

Иногда кажется, что задержка положительная, а иногда отрицательная.

from scipy.signal import correlate
from scipy.signal import fftconvolve
from scipy import signal
from pydub import AudioSegment
from pydub.utils import mediainfo
import numpy as np
def findOffset(audio1, audio2):
correlation = signal.correlate(audio2, audio1, mode="full")
lags = signal.correlation_lags(audio2.size, audio1.size, mode="full")
lag = lags[np.argmax(correlation)]
return lag
def adjustAudio(audio_segment, lag, frame_rate):
# Convert lag from samples to milliseconds, rounding to nearest integer at the last step
ms_lag = round((lag / frame_rate) * 1000)
if lag > 0:
# Audio needs to start later: pad audio at the beginning
silence = AudioSegment.silent(duration=ms_lag, frame_rate=frame_rate)
adjusted_audio = silence + audio_segment
else:
# Audio needs to start earlier: trim audio from the beginning
adjusted_audio = audio_segment[abs(ms_lag):] # Use abs to convert negative lag to positive
return adjusted_audio
def alignAudioTrack(audioFile, newAudioFile, lag):
audio_data, rate, audio_segment = loadAudio(audioFile, return_segment=True)
# Adjust the AudioSegment based on lag, ensuring frame_rate is passed correctly
adjusted_audio = adjustAudio(audio_segment, lag, rate)
# Fetch original bitrate
bitrate = mediainfo(audioFile)['bit_rate']
# Save the adjusted audio preserving the original bitrate
adjusted_audio.export(newAudioFile, format="mp3", bitrate=bitrate)
audio1, rate1 = loadAudio(audioFile1)
audio2, rate2 = loadAudio(audioFile2)
lag = findOffset(audio1, audio2)
alignAudioTrack(origAudioFile, alignedAudioFile, lag)
Подробнее здесь: https://stackoverflow.com/questions/783 ... ing-python