Skocz do zawartości

Skrypt albo aplikacja do generowania głosu przed odtwarzaniem plików mp3


kacper6768

Rekomendowane odpowiedzi

Potrzebuję aplikacji dla Windowsa 10 albo skryptu obojętnie czy w CMD albo PowerShellu czy w Pythonie żeby wsadowo przed każdym odtwarzaniem pliku mp3 odtwarzała się nazwa tego pliku czytana syntezatorem mowy bez .mp3. Nie znam żadnego języka programowania. ChatGPT wygenerował skrypt

Add-Type -AssemblyName System.Speech
$tts = New-Object System.Speech.Synthesis.SpeechSynthesizer
$tts.SelectVoice("Microsoft Paulina Desktop")  # <- możesz zmienić na dowolny z listy

$ffmpeg = Join-Path $PSScriptRoot "ffmpeg.exe"
$folder = "$PSScriptRoot\mp3"
$tempWav = "$folder\_intro.wav"
$tempMp3 = "$folder\_intro.mp3"
$silence = "$folder\_silence.mp3"
$joinList = "$folder\join_list.txt"

# Sprawdź czy ffmpeg.exe istnieje
if (!(Test-Path $ffmpeg)) {
    Write-Host " Nie znaleziono ffmpeg.exe w katalogu skryptu!" -ForegroundColor Red
    exit
}

# 🔊 Generowanie TTS
Write-Host "`n🔊 Generuję intro..." -ForegroundColor Cyan
$text = "Plik audio został wygenerowany przez użytkownika"
try {
    $tts.SetOutputToWaveFile($tempWav)
    $tts.Speak($text)
    $tts.Dispose()
} catch {
    Write-Host " Błąd generowania intro TTS!" -ForegroundColor Red
    exit
}

# 🎧 Konwersja WAV do MP3
& $ffmpeg -y -i $tempWav -ar 22050 -ac 1 -b:a 64k $tempMp3

# Sprawdź czy plik _intro.mp3 powstał
if (!(Test-Path $tempMp3)) {
    Write-Host " Błąd: nie udało się utworzyć pliku _intro.mp3!" -ForegroundColor Red
    exit
}

# 🔇 Generowanie ciszy 0.5 sekundy
& $ffmpeg -y -f lavfi -i anullsrc=r=44100:cl=mono -t 0.5 $silence

# Sprawdź czy katalog out istnieje, jeśli nie to utwórz
if (!(Test-Path "$folder\out")) {
    New-Item -ItemType Directory -Path "$folder\out" | Out-Null
}

# 📂 Przetwarzanie plików MP3
Get-ChildItem "$folder\*.mp3" | Where-Object { $_.Name -notlike "_*" } | ForEach-Object {
    $file = $_.FullName
    $outputPath = "$folder\out\$($_.Name)"
    Write-Host "`n▶ Przetwarzanie: $($_.BaseName)" -ForegroundColor Yellow

    # 🔗 Tworzenie pliku listy do połączenia z zamianą backslash na slash
    $lines = @(
        "file '$($silence -replace '\\','/')'"
        "file '$($tempMp3 -replace '\\','/')'"
        "file '$($file -replace '\\','/')'"
    )
    Set-Content -Path $joinList -Value $lines -Encoding ASCII

    # 🧬 Łączenie plików MP3 z rekompresją (zamiast -c copy)
    & $ffmpeg -y -f concat -safe 0 -i $joinList -acodec libmp3lame -ar 44100 -b:a 128k $outputPath 2>> "$folder\ffmpeg_error.log"

    if ($LASTEXITCODE -eq 0) {
        Write-Host " Zakończono: $($_.Name)" -ForegroundColor Green
    } else {
        Write-Host " Błąd łączenia dla: $($_.Name)" -ForegroundColor Red
    }
}

# 🧹 Czyszczenie tymczasowych plików
Remove-Item $tempWav, $tempMp3, $silence, $joinList -Force

Write-Host "`n✔ Wszystkie pliki zostały przetworzone!" -ForegroundColor Green

i w PowerShellu jest napisane że wszystko wygenerowano pomyślnie ale w folderze mp3\out są wygenerowane puste pliki mp3. Najbardziej pasowałaby mi jakaś aplikacja od producenta żeby była bez wirusów i z interfejsem GUI żeby nie trzeba było męczyć się z komendami ale lepsze są skrypty niż nic.

Odnośnik do komentarza
Pomoc jest darmowa, ale proszę rozważ przekazanie dotacji na utrzymanie serwisu: klik.

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...