30 lines
1.3 KiB
Python
30 lines
1.3 KiB
Python
from ...mediautils.audio import process_audio, resample
|
|
from ...math.average import np_moving_average
|
|
from ...models.moment import Moment
|
|
from ..common import find_moving_average_highlights
|
|
import numpy as np
|
|
import structlog
|
|
|
|
class AmplitudeEditor:
|
|
def __init__(self, video_path, audio_path, params):
|
|
self.logger = structlog.get_logger("amplitude")
|
|
self.video_path = video_path
|
|
self.audio_path = audio_path
|
|
self.logger.info("processing audio", path=self.audio_path)
|
|
data, duration, bitrate = process_audio(self.audio_path)
|
|
self.data = data
|
|
self.duration = duration
|
|
self.bitrate = bitrate
|
|
self.factor = params["factor"]
|
|
self.logger.info("resampling audio", factor=self.factor)
|
|
self.subsampled_data = resample(self.data, self.factor)
|
|
self.squared_subsample = np.square(self.subsampled_data)
|
|
|
|
def edit(self, large_window, small_window, params):
|
|
window_factor = self.bitrate / self.factor
|
|
long_ma = np_moving_average(self.squared_subsample, large_window * window_factor)
|
|
short_ma = np_moving_average(self.squared_subsample, small_window * window_factor)
|
|
highlights = find_moving_average_highlights(short_ma, long_ma, self.factor / self.bitrate)
|
|
return highlights, large_window, small_window
|
|
|