BerandaBlog → Cara mentranskrip rekaman yang tidak muat satu permintaan

Cara mentranskrip rekaman yang tidak muat satu permintaan

Diterbitkan 2026-08-20 · 5 menit baca

Rekaman konferensi empat jam, hasil perekam seharian penuh, webinar dengan rekaman layar — semuanya tidak muat dalam satu permintaan. Pekerjaannya terbagi tiga: kompres, potong di jeda, gabungkan teksnya kembali. Ini resep lengkapnya dengan kode.

Kompres dulu, potong belakangan

Coba kompresi lebih dulu; sering kali itu sudah cukup. Satu jam ucapan dalam opus sekitar 11 MB, jadi rekaman dua jam pun muat utuh:

ffmpeg -i conference.wav -vn -ac 1 -ar 16000 -c:a libopus -b:a 24k conference.ogg

Memotong baru masuk akal kalau setelah dikompres berkasnya masih terlalu besar, atau kalau Anda ingin memproses paralel demi kecepatan.

Memotong di mana supaya tidak rusak

Memotong pada interval tetap itu mudah dan cepat atau lambat akan membelah kata, meninggalkan sampah di sambungan. Memotong di keheningan lebih aman. Cari dulu jedanya:

ffmpeg -i long.ogg -af silencedetect=noise=-35dB:d=1 -f null - 2>&1 | grep silence_end

Lalu potong pada jeda terdekat dengan panjang yang diinginkan:

ffmpeg -i long.ogg -ss 0 -to 912.4 -c copy part001.ogg

Kompromi praktis: potongan 10–15 menit — enak dikirim paralel, dan sambungan yang kurang pas hanya merugikan sedikit.

Memproses potongan secara paralel

Potongan saling bebas, jadi kirim sekaligus dan jaga urutan lewat nama berkas:

import concurrent.futures as cf, pathlib
from openai import OpenAI

client = OpenAI(base_url="https://voicesscribe.com/v1", api_key="kunci Anda")

def one(path):
    with path.open("rb") as f:
        return path.name, client.audio.transcriptions.create(model="whisper-1", file=f).text

parts = sorted(pathlib.Path(".").glob("part*.ogg"))
with cf.ThreadPoolExecutor(max_workers=4) as pool:
    result = dict(pool.map(one, parts))

full = "\n".join(result[p.name] for p in parts)
pathlib.Path("conference.txt").write_text(full, encoding="utf-8")

Sesuaikan jumlah pekerja dengan batas permintaan per detik paket Anda: kalau kelewatan, jawabannya 429 dan pekerjaannya diulang.

Stempel waktu berkelanjutan

Kalau yang dibutuhkan bukan teks polos melainkan navigasi, minta format bersegmen dan tambahkan offset tiap potongan:

offset = 0.0
for path in parts:
    with path.open("rb") as f:
        r = client.audio.transcriptions.create(
            model="whisper-1", file=f, response_format="verbose_json")
    for seg in r.segments:
        print(round(seg["start"] + offset, 1), seg["text"].strip())
    offset += r.duration

Dengan begitu stempel waktu tetap sejajar dengan rekaman asli dan bisa menggerakkan pemutar.

Coba dengan rekaman Anda sendiri. Pendaftaran memakan waktu satu menit, dan menit gratisnya cukup untuk menilai kualitasnya.

Ambil kunci API gratis

Pertanyaan yang sering diajukan

Berapa batas ukuran berkas?

25 MB per permintaan. Dalam opus itu kira-kira dua jam ucapan, jadi biasanya kompresi saja sudah menghapus kebutuhan memotong.

Apa arti galat 413?

Berkas melebihi ukuran yang diizinkan. Kompres ke opus atau mp3 bitrate rendah, atau potong menjadi beberapa bagian.

Apakah makna hilang di sambungan?

Tidak kalau memotong di keheningan. Potongan interval tetap bisa menghilangkan satu kata di sambungan, karena itu mencari jeda sepadan usahanya.

Bisakah potongan diproses bersamaan?

Bisa, semuanya independen. Satu-satunya batas adalah jumlah permintaan per detik pada paket Anda.

Bacaan terkait