Skip to content

Instantly share code, notes, and snippets.

@CreatorB
Created May 10, 2026 00:10
Show Gist options
  • Select an option

  • Save CreatorB/1523cf82f678286cd4d6bdd6f90b1409 to your computer and use it in GitHub Desktop.

Select an option

Save CreatorB/1523cf82f678286cd4d6bdd6f90b1409 to your computer and use it in GitHub Desktop.
Multiple Convert YouTube Kajian to mp3

APP : Bulk download Playlist Kajian

Jdownloader : Download

Script FFMPEG

param(
    [Parameter(Mandatory = $true)]
    [string]$InputFolder,

    [Parameter(Mandatory = $true)]
    [string]$OutputFolder,

    [ValidateSet("speech", "music", "tiny", IgnoreCase = $true)]
    [string]$Mode = "speech",

    [switch]$IncludeVideo
)

if (!(Test-Path -LiteralPath $InputFolder)) {
    Write-Host "Input folder tidak ditemukan: $InputFolder"
    exit 1
}

$InputFolder = (Resolve-Path -LiteralPath $InputFolder).Path.TrimEnd('\')

if (!(Test-Path -LiteralPath $OutputFolder)) {
    New-Item -ItemType Directory -Path $OutputFolder -Force | Out-Null
}

$extensions = @('*.opus','*.ogg','*.wav','*.flac','*.m4a','*.aac','*.wma','*.mp3')
if ($IncludeVideo) {
    $extensions += @('*.mp4','*.mkv','*.webm','*.mov')
}

switch ($Mode.ToLower()) {
    "tiny"   { $quality = 9 }
    "speech" { $quality = 7 }
    "music"  { $quality = 4 }
}

$files = Get-ChildItem -LiteralPath $InputFolder -Recurse -File |
    Where-Object { $extensions -contains "*$($_.Extension.ToLower())" }

$total = $files.Count
$index = 0

if ($total -eq 0) {
    Write-Host "Tidak ada file yang cocok ditemukan."
    exit 1
}

foreach ($file in $files) {
    $index++

    $relativePath = $file.DirectoryName.Substring($InputFolder.Length).TrimStart('\')
    $targetDir = if ([string]::IsNullOrWhiteSpace($relativePath)) {
        $OutputFolder
    } else {
        Join-Path $OutputFolder $relativePath
    }

    if (!(Test-Path -LiteralPath $targetDir)) {
        New-Item -ItemType Directory -Path $targetDir -Force | Out-Null
    }

    $outFile = Join-Path $targetDir ($file.BaseName + ".mp3")

    if (Test-Path -LiteralPath $outFile) {
        Write-Host "Skip (sudah ada): $outFile"
        continue
    }

    Write-Progress -Activity "Converting to MP3" `
                   -Status "$index / $total : $($file.Name) [$Mode]" `
                   -PercentComplete (($index / $total) * 100)

    if ($IncludeVideo) {
        ffmpeg -n -i $file.FullName -vn -c:a libmp3lame -q:a $quality -map_metadata 0 $outFile
    } else {
        ffmpeg -n -i $file.FullName -c:a libmp3lame -q:a $quality -map_metadata 0 $outFile
    }
}

Write-Progress -Activity "Converting to MP3" -Completed
Write-Host "Selesai. Output ada di: $OutputFolder"

Cara pakai

Untuk ceramah/kajian yang mau kecil tapi masih layak:

powershell -ExecutionPolicy Bypass -File .\convert-to-mp3.ps1 -InputFolder "D:\koleksi-audio" -OutputFolder "D:\hasil-mp3" -Mode speech

Untuk file sekecil mungkin:

powershell -ExecutionPolicy Bypass -File .\convert-to-mp3.ps1 -InputFolder "D:\koleksi-audio" -OutputFolder "D:\hasil-mp3" -Mode tiny

Untuk murottal/high quality:

powershell -ExecutionPolicy Bypass -File .\convert-to-mp3.ps1 -InputFolder "D:\koleksi-audio" -OutputFolder "D:\hasil-mp3" -Mode music

Kalau mau ambil audio dari video juga:

powershell -ExecutionPolicy Bypass -File .\convert-to-mp3.ps1 -InputFolder "D:\koleksi-media" -OutputFolder "D:\hasil-mp3" -Mode speech -IncludeVideo

-vn dipakai saat file video ikut diproses agar stream video dibuang dan hanya audio yang dikonversi ke MP3. gist.github

Arti mode

Mode Setting Cocok untuk
tiny -q:a 9 Ukuran sekecil mungkin, kualitas paling ditekan. stackoverflow
speech -q:a 7 Ceramah, voice note, kajian. stackoverflow
music -q:a 4 Murotal atau audio yang ingin tetap enak didengar. stackoverflow

Catatan penting

Kalau target speaker MP3 lawas, beberapa perangkat kadang lebih cocok dengan CBR daripada VBR. Jadi kalau nanti ada file yang tidak terbaca normal, kita bisa ubah mode ke bitrate tetap seperti -b:a 128k atau -b:a 96k. Sumber Stack Overflow juga menekankan bahwa -b:a adalah CBR, sedangkan -q:a adalah VBR. stackoverflow

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment