Приложение для Windows, чтобы обрезать комментарий в конце песни

Есть ли приложение для Windows, чтобы обрезать комментарий в конце песни? Как этот https://www.youtube.com/watch?v=lVXziMFEqX0 Музыка заканчивается примерно на 3:42, затем тишина не менее 10 секунд и комментарий. Я хочу пакетно обрезать все мои файлы aac/opus из таких комментариев (и тишины, конечно). Поддержка форматов не имеет особого значения, я все равно сконвертирую их в мп3.

Спасибо заранее!

Ответы (1)

Вместо одной программы, которая делает это за вас, у меня есть комбинация, которая может сделать это за вас. Комбинация:

  • Pythonязык программирования Загрузите и установите с https://www.python.org/downloads/ , выбрав Python 3.6 или более позднюю версию и выбрав «Добавить в путь» во время установки.
  • Numpyчисловая библиотека После того, как вы установили Python, вы можете установить его из командной строки с помощьюpip install numpy
  • MoviePyредактирование видео в Python После того, как вы установили Python, вы можете установить его из командной строки с помощьюpip install moviepy
  • FFMPEGинструменты обработки мультимедиа. Автоматически загружается и устанавливается 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)

Обратите внимание, что приведенный выше код очень приблизительный и готовый, но он должен помочь вам начать работу.