🚀 Bereit für Ihre digitale Transformation?
Vereinbaren Sie ein unverbindliches Strategiegespräch
📊 Business Value
Extrahiert automatisch Musik- und Gesangssegmente aus Videos, in denen zwischen gesprochenem Text und Musikperformance gewechselt wird. Spart Stunden manueller Videobearbeitung – perfekt für Content Creator, die ihre Musik-Highlights isolieren wollen.
--spectral-threshold, --silence-thresh, --min-duration für perfekte Ergebnisse.⚙️ Technische Architektur
Audio-Extraktion
moviepy extrahiert die Audio-Spur aus dem Video und speichert sie als temporäre WAV-Datei.
Feature-Analyse
libROSA berechnet spectral_centroids, zero_crossing_rate, chroma_stft und 13 MFCC-Koeffizienten.
Silence-Detection
pydub detect_nonsilent() findet aktive Audio-Segmente als Kandidaten für die Musik-Klassifikation.
Video-Schnitt
moviepy subclip() + concatenate_videoclips() schneidet Musik-Clips aus und rendert das Ergebnis mit H.264/AAC.
💻 Echter Code aus dem Projekt
Direkt aus D:\arbeit\git\videocut\ — produktiv eingesetzter Python-Code.
🎵 Musiksegment-Detektor: Feature-Extraktion mit libROSA
class MusicSegmentDetector:
"""Erkennt Musik- und Gesangssegmente in Audiodateien"""
def __init__(self, min_music_duration=10, min_silence_len=1000,
silence_thresh=-40, spectral_threshold=0.6):
self.min_music_duration = min_music_duration
self.min_silence_len = min_silence_len
self.silence_thresh = silence_thresh
self.spectral_threshold = spectral_threshold
def analyze_audio_features(self, audio_path):
"""Analysiert Audio-Features um Musik von Sprache zu unterscheiden"""
y, sr = librosa.load(audio_path, sr=22050)
# Spektrale Centroid (Helligkeit des Sounds)
spectral_centroids = librosa.feature.spectral_centroid(
y=y, sr=sr)[0]
# Zero Crossing Rate (Sprachsignale haben höhere ZCR)
zcr = librosa.feature.zero_crossing_rate(y)[0]
# Chroma Features (musikalische Tonhöhen)
chroma = librosa.feature.chroma_stft(y=y, sr=sr)
chroma_mean = np.mean(chroma, axis=0)
# Spectral Rolloff
spectral_rolloff = librosa.feature.spectral_rolloff(
y=y, sr=sr)[0]
# MFCC (Mel-frequency cepstral coefficients)
mfcc = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=13)
return {
'spectral_centroids': spectral_centroids,
'zcr': zcr, 'chroma_mean': chroma_mean,
'spectral_rolloff': spectral_rolloff,
'mfcc': mfcc, 'sr': sr, 'y': y
}
🧮 Musik-Score-Berechnung: Gewichtete Feature-Kombination
def _calculate_music_score(self, features, start_sec, end_sec):
"""Berechnet einen Score, wie wahrscheinlich das Segment Musik ist"""
time_frames = features['time_frames']
start_idx = np.searchsorted(time_frames, start_sec)
end_idx = np.searchsorted(time_frames, end_sec)
segment_zcr = features['zcr'][start_idx:end_idx]
segment_spectral = features['spectral_centroids'][start_idx:end_idx]
segment_chroma = features['chroma_mean'][start_idx:end_idx]
# Musik hat: niedrigere ZCR, höhere spektrale Varianz,
# stärkere harmonische Struktur (Chroma)
zcr_score = 1.0 - min(np.mean(segment_zcr), 0.3) / 0.3
spectral_var = np.std(segment_spectral)
spectral_score = min(spectral_var / 1000.0, 1.0)
chroma_score = min(np.mean(segment_chroma), 1.0)
# Gewichteter Durchschnitt: 30% ZCR + 30% Spectral + 40% Chroma
music_score = (zcr_score * 0.3 + spectral_score * 0.3 +
chroma_score * 0.4)
return music_score
✂️ Video-Schnitt mit moviepy: Segment-Extraktion & Rendering
def cut_video_segments(video_path, segments, output_path):
"""Schneidet Video-Segmente aus und erstellt eine neue Datei"""
video = VideoFileClip(video_path)
clips = []
for i, (start, end) in enumerate(segments):
print(f" Extrahiere Segment {i+1}: {start:.1f}s - {end:.1f}s")
clip = video.subclip(start, end)
clips.append(clip)
if not clips:
print("⚠ Keine Segmente gefunden!")
video.close()
return False
final_clip = concatenate_videoclips(clips)
final_clip.write_videofile(
output_path,
codec='libx264', audio_codec='aac',
temp_audiofile=tempfile.mktemp(suffix='.m4a'),
remove_temp=True
)
video.close(); final_clip.close()
for clip in clips: clip.close()
return True
🛠️ Technologie-Stack
argparse für CLI, OOP-Architektur mit MusicSegmentDetector-Klasse.detect_nonsilent() mit konfigurierbaren dB-Schwellenwerten.searchsorted für Frame-Mapping, statistische Aggregation.🚀 In Tagen zum MVP — nicht in Monaten
Bereit für Ihren Wettbewerbsvorteil?
Von Audio-DSP bis Video-Automation — ich entwickle Lösungen, die echte Arbeit sparen.