สร้างงานถอดเสียง — POST /new-transcribe
สร้างงานถอดเสียงใหม่จาก URL ของไฟล์เสียงหรือวิดีโอ ระบบจะตอบกลับ job_id สำหรับติดตามสถานะ แล้วประมวลผลงานในเบื้องหลัง
POST https://api.lomasub.ai/new-transcribe
| Header |
ค่า |
จำเป็น |
Authorization |
Bearer <API_KEY> |
✅ |
Content-Type |
application/json |
✅ |
Request Body
| ฟิลด์ |
ชนิด |
จำเป็น |
คำอธิบาย |
source_url |
string (URL) |
✅ |
URL แบบสาธารณะของไฟล์เสียง/วิดีโอ ระบบจะตรวจสอบว่าเข้าถึงได้ก่อนรับงาน |
language |
string |
— |
รหัสภาษาของเสียง เช่น "th" (แนะนำให้ระบุเสมอ) |
config |
object |
— |
ตัวเลือกปรับพฤติกรรมการถอดเสียง ดูตารางด้านล่าง ค่าที่ไม่ระบุจะใช้ค่าเริ่มต้น |
ตัวอย่าง Request
curl -X POST "https://api.lomasub.ai/new-transcribe" \
-H "Authorization: Bearer $LOMA_API_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"source_url": "https://lomafastsrt.sgp1.cdn.digitaloceanspaces.com/cancer.mp3",
"language": "th",
"config": {
"speaker_diarization": true
}
}'
ตัวเลือกใน config
ทุกฟิลด์เป็นตัวเลือกเสริม — ระบบจะบันทึกค่าเหล่านี้ไว้กับงาน (config snapshot) ตั้งแต่ตอนสร้าง
การสร้างซับไตเติล
| ฟิลด์ |
ชนิด |
ค่าเริ่มต้น |
คำอธิบาย |
srt_target_chars |
int |
40 |
จำนวนตัวอักษรสูงสุดต่อบรรทัดซับไตเติล (ยกเว้นกรณีคำเดียวยาวเกิน) |
min_srt_duration_ms |
int |
2000 |
ระยะเวลาแสดงผลขั้นต่ำของแต่ละบรรทัด (มิลลิวินาที) |
shift_ending |
bool |
true |
ขยับเวลาสิ้นสุดของบรรทัดให้อ่านทัน |
forcealigner_level |
string |
"default" |
ระดับการจัดตำแหน่งเวลาของคำ — "none" ปิดการจัดตำแหน่งละเอียด (ใช้เวลาแบบหยาบ), "default" เปิดใช้งานปกติ, "llmsplitting" เพิ่มการตัดประโยคด้วยโมเดลภาษาและจัดตำแหน่งเวลารอบที่สอง |
revise_srt |
bool |
false |
เปิดขั้นตอนขัดเกลาข้อความซับไตเติลเพิ่มเติม |
การรวมบรรทัดสั้น
| ฟิลด์ |
ชนิด |
ค่าเริ่มต้น |
คำอธิบาย |
merge_srt_if_char_shorter |
int |
15 |
รวมบรรทัดเมื่อข้อความสั้นกว่าจำนวนตัวอักษรนี้ (ต้องเข้าเงื่อนไขระยะเวลาด้วย) |
merge_srt_if_duration_shorter |
float |
1.2 |
รวมบรรทัดเมื่อระยะเวลาสั้นกว่านี้ (วินาที) |
merge_srt_duration_distance_limit |
float |
1.0 |
ไม่รวมกับบรรทัดข้างเคียงที่ห่างเกินนี้ (วินาที) |
merge_srt_char_limit |
int |
60 |
ไม่รวมถ้าข้อความหลังรวมยาวเกินจำนวนตัวอักษรนี้ |
การแบ่งช่วงเสียง (VAD)
| ฟิลด์ |
ชนิด |
ค่าเริ่มต้น |
คำอธิบาย |
min_vad_duration_seconds |
float |
5.0 |
ความยาวช่วงเสียงขั้นต่ำ (วินาที) |
max_vad_duration_seconds |
float |
25.0 |
ความยาวช่วงเสียงสูงสุด (วินาที) |
vad_threshold |
float |
0.4 |
ค่าความเชื่อมั่นขั้นต่ำในการถือว่าเป็นเสียงพูด (0.0–1.0) |
vad_segment_seconds |
float |
900.0 |
ขนาดช่วงที่ใช้สแกนเสียงพูดแบบขนาน (วินาที) |
การระบุผู้พูด (Speaker Diarization)
| ฟิลด์ |
ชนิด |
ค่าเริ่มต้น |
คำอธิบาย |
speaker_diarization |
bool |
false |
เปิดการจำแนกและติดป้ายชื่อผู้พูดในซับไตเติล |
speaker_local_distance_threshold |
float |
0.60 |
เกณฑ์ระยะห่างการจัดกลุ่มผู้พูดภายในกลุ่มย่อย (0.0–2.0) |
speaker_merge_distance_threshold |
float |
0.35 |
เกณฑ์ระยะห่างการรวมกลุ่มผู้พูดข้ามกลุ่มย่อย (0.0–2.0) |
speaker_clustering_drop_dialogue_percentile |
float |
0.02 |
ไม่ติดป้ายกลุ่มผู้พูดที่มีสัดส่วนบทพูดน้อยกว่าค่านี้ |
agglomeration_min_appear |
int |
5 |
จำนวนบทพูดขั้นต่ำของกลุ่มผู้พูดที่จะได้รับป้ายชื่อ |
agglomolation_group_size |
int |
300 |
ขนาดกลุ่มย่อยสำหรับการจัดกลุ่มแบบแบ่งช่วงเวลา (0 = จัดกลุ่มรอบเดียวทั้งงาน) |
revise_speakername |
bool |
false |
ขัดเกลาป้ายชื่อผู้พูด — ต้องเปิด revise_srt และ speaker_diarization พร้อมกัน |
Response — 201 Created
{
"job_id": "0b8a4f3e-6c1d-4a9b-9f2e-7d5c3b1a8e64",
"status_url": "https://api.lomasub.ai/status?job_id=0b8a4f3e-6c1d-4a9b-9f2e-7d5c3b1a8e64",
"state": "QUEUED",
"s1_queued_ts": "2026-07-10T09:15:22.481Z"
}
| ฟิลด์ |
ชนิด |
คำอธิบาย |
job_id |
string (UUID) |
รหัสงานสำหรับติดตามสถานะ |
status_url |
string (URL) |
URL สำเร็จรูปสำหรับเรียกตรวจสอบสถานะ |
state |
string |
สถานะเริ่มต้นของงาน เป็น QUEUED เสมอ |
s1_queued_ts |
string (timestamp) |
เวลาที่งานเข้าคิว |
ข้อผิดพลาดที่อาจพบ
| สถานะ |
สาเหตุ |
ตัวอย่างข้อความ |
400 Bad Request |
source_url เข้าถึงไม่ได้ (ระบบทดสอบ HEAD/GET ก่อนรับงาน) |
"source_url is not reachable" |
401 Unauthorized |
ไม่มีหรือ API key ไม่ถูกต้อง |
— |
422 Unprocessable Entity |
รูปแบบ body หรือค่าใน config ไม่ถูกต้อง / ใช้ชื่อฟิลด์เก่าที่ถูกเปลี่ยนชื่อแล้ว |
ระบุฟิลด์ที่ผิดพร้อมคำแนะนำ |
ชื่อฟิลด์เก่าที่เลิกใช้แล้ว: min_chars → srt_target_chars, min_vad_prob_to_transcribe → vad_threshold, parallel_vad_segment_seconds → vad_segment_seconds, speaker_clustering_ignore_percent → speaker_clustering_drop_dialogue_percentile — หากส่งชื่อเก่าระบบจะตอบ 422 พร้อมแจ้งชื่อใหม่
ขั้นตอนถัดไป: นำ job_id ไปติดตามความคืบหน้าที่ ตรวจสอบสถานะงาน — GET /status