Beranda → Blog → Cara mentranskrip rekaman yang tidak muat satu permintaan
Cara mentranskrip rekaman yang tidak muat satu permintaan
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 gratisPertanyaan 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
- Menyiapkan audio untuk transkripsi: resep ffmpeg — Perintah ffmpeg siap pakai untuk pengenalan suara: mengambil audio dari video, mono, membuang keheningan, memotong di jeda, dan memisahkan kanal stereo.
- Cara membangun pipeline transkripsi untuk arsip audio — Mentranskrip ribuan rekaman tanpa kehilangan satu pun: antrean kerja, konkurensi, percobaan ulang, melanjutkan setelah proses mati, dan menjaga tagihan tetap terkendali.
- Galat API transkripsi dan apa artinya sebenarnya — Penjelasan kode status API transkripsi: mengapa muncul 401, 400, 413, 429, dan 502, cara memperbaikinya, serta kegagalan mana yang layak diulang.