Gibt es eine Windows-App zum Trimmen von Kommentaren am Ende eines Songs? Wie dieses hier https://www.youtube.com/watch?v=lVXziMFEqX0 Die Musik endet bei ca. 3:42, dann gibt es mindestens 10 Sekunden lang Stille und einen Kommentar. Ich möchte alle meine aac/opus-Dateien stapelweise von solchen Kommentaren (und natürlich der Stille) befreien. Die Formatunterstützung spielt keine Rolle, ich werde sie sowieso in mp3 konvertieren.
Vielen Dank im Voraus!
Anstelle eines einzelnen Programms, das dies für Sie erledigt, habe ich eine Kombination, die dies für Sie erledigen kann. Die Kombination ist:
pip install numpy
pip install moviepy
Beachten Sie, dass dieser Prozess von diesem Blogbeitrag inspiriert wurde , der automatisch die Höhepunkte von Fußballspielen basierend auf den durchschnittlichen Audiopegeln ausschneidet.
Sie können dann ein Python-Skript wie das folgende zusammenstellen:
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)
Beachten Sie, dass der obige Code sehr grob und fertig ist, aber Ihnen den Einstieg erleichtern sollte.