Skip to content

Commit 4c3ab15

Browse files
committed
Create obs.py
1 parent 2f13e73 commit 4c3ab15

1 file changed

Lines changed: 71 additions & 0 deletions

File tree

scripts/obs.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import os
2+
from pydub import AudioSegment, effects
3+
from pydub.utils import mediainfo
4+
5+
def get_min_bitrate(files):
6+
"""Analizza i file e restituisce il bitrate più basso trovato (in kbps)."""
7+
bitrates = []
8+
for f in files:
9+
try:
10+
info = mediainfo(f)
11+
# Il bitrate è riportato in bit/s (es. 128000)
12+
bitrate = int(info.get('bit_rate', 192000))
13+
bitrates.append(bitrate)
14+
except:
15+
continue
16+
17+
if not bitrates:
18+
return "128k"
19+
20+
# Troviamo il minimo e convertiamo in formato 'k' (es. 128k)
21+
min_k = int(min(bitrates) / 1000)
22+
return f"{min_k}k"
23+
24+
def process_audio_optimized():
25+
output_filename = "risultato_ottimizzato.mp3"
26+
files = sorted([f for f in os.listdir('.') if f.endswith('.mp3') and f != output_filename])
27+
28+
if not files:
29+
print("Nessun file MP3 trovato!")
30+
return
31+
32+
# 1. Analisi del bitrate minimo per risparmiare spazio
33+
target_bitrate = get_min_bitrate(files)
34+
print(f"Bitrate ottimizzato rilevato: {target_bitrate}")
35+
36+
combined = AudioSegment.empty()
37+
silence = AudioSegment.silent(duration=3000)
38+
39+
print(f"Elaborazione di {len(files)} file...")
40+
41+
for f in files:
42+
try:
43+
# Caricamento e standardizzazione
44+
audio = AudioSegment.from_mp3(f).set_frame_rate(44100).set_channels(2)
45+
46+
# 2. Normalizzazione del volume (porta il picco a 0 dB)
47+
audio = effects.normalize(audio)
48+
49+
print(f"Aggiungendo e normalizzando: {f}")
50+
combined += audio + silence
51+
except Exception as e:
52+
print(f"Errore su {f}: {e}")
53+
54+
# 3. Esportazione finale
55+
print(f"Esportazione in corso ({target_bitrate}, CBR)...")
56+
combined.export(
57+
output_filename,
58+
format="mp3",
59+
bitrate=target_bitrate,
60+
parameters=["-write_xing", "0"] # Forza CBR puro per compatibilità timer
61+
)
62+
63+
print("-" * 30)
64+
print(f"COMPLETATO!")
65+
print(f"File: {output_filename}")
66+
print(f"Peso ottimizzato con bitrate: {target_bitrate}")
67+
print(f"Durata totale: {len(combined) / 1000} secondi.")
68+
print("-" * 30)
69+
70+
if __name__ == "__main__":
71+
process_audio_optimized()

0 commit comments

Comments
 (0)