Выравнивание/синхронизация одного аудиофайла с другим с помощью PythonPython

Программы на Python
Anonymous
Выравнивание/синхронизация одного аудиофайла с другим с помощью Python

Сообщение Anonymous »

У меня есть два аудиофайла, записанные с помощью микрофона ноутбука, и один с помощью внешнего микрофона. Запись с микрофона ноутбука начинается после внешнего микрофона. Разница во времени может составлять 2–60 секунд.
Поэтому я написал этот код, который довольно точен, но когда я привожу обе звуковые дорожки (одну из видео, в которой используется микрофон ноутбука), и недавно отрегулированный звук, задержка все еще составляет около 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

Вернуться в «Python»