Есть ли приложение для Windows, чтобы обрезать комментарий в конце песни? Как этот https://www.youtube.com/watch?v=lVXziMFEqX0 Музыка заканчивается примерно на 3:42, затем тишина не менее 10 секунд и комментарий. Я хочу пакетно обрезать все мои файлы aac/opus из таких комментариев (и тишины, конечно). Поддержка форматов не имеет особого значения, я все равно сконвертирую их в мп3.
Спасибо заранее!
Вместо одной программы, которая делает это за вас, у меня есть комбинация, которая может сделать это за вас. Комбинация:
pip install numpy
pip install moviepy
Обратите внимание, что этот процесс был вдохновлен этим сообщением в блоге , которое автоматически вырезает основные моменты футбольных матчей на основе среднего уровня звука.
Затем вы можете собрать скрипт python примерно следующим образом:
import os # Pythons default library for OS operations
import glob # Pythons default library for file pattern matching
import numpy as np # for numerical operations
from moviepy.editor import AudioFileClip
def find_silences(audio):
""" Find the silences in an audio clip """
cut = lambda i: audio.subclip(i,i+1).to_soundarray(fps=22000) # get one sec of audio as an array
volume = lambda array: np.sqrt(((1.0*array)**2).mean()) # RMS of Array
# Use the above to get a list of the volumes per second
volumes = [volume(cut(i)) for i in range(0,int(sound.duration-1))]
# Get the times when the volume is zero
zero_secs = [i for i, v in enumerate(volumes) if v == 0.0]
def process_file(fname):
""" Process a file """
audio = AudioFileClip(filename=files[0])
silences = find_silences(audio)
two_secs = [s for s, i in silences[:-1] if s+1 == silences[i+1]]
if len(two_secs) == 0:
print(fname, "no two second silence found!")
else: # We have at least one 2 sec silence
clipped = audio.subclip(0, two_secs[0]) # Clip to that length
clipped.to_audiofile('temp.mp3') # Save to a temp name
os.rename(fname, fname+".orig") # keep the old just in case
os.rename('temp.mp3', fname) # rename temp to original name
if __name__ == "__main__":
for FNAME in glob.glob("*.mp3"): # All the MP3 files in the current directory
process_file(FNAME)
Обратите внимание, что приведенный выше код очень приблизительный и готовый, но он должен помочь вам начать работу.