# การแยกคำบรรยาย

ใช้เวิร์กโฟลว์นี้เพื่อสร้างไฟล์คำบรรยายจากวิดีโอ Weydub รองรับวิธีการแยกสองแบบ:

- การแยกด้วย OCR สำหรับคำบรรยายแบบฝังถาวรที่มองเห็นอยู่แล้วในเฟรมวิดีโอ
- การแยกด้วย ASR สำหรับบทสนทนาที่เป็นเสียงพูดในแทร็กเสียง

ต้องการตรวจสอบคุณภาพผลลัพธ์ก่อนเริ่มพัฒนาหรือไม่ ลองใช้เวิร์กโฟลว์บนเว็บของ Weydub ที่สอดคล้องกัน: [สร้างคำบรรยาย](https://weydub.com/subtitle-generator/)

สำหรับคำอธิบายระดับระบบเกี่ยวกับการทำ OCR กับวิดีโอตามลำดับเวลา การกรองข้อความในฉาก และการแบ่งส่วน ASR ที่พร้อมใช้สร้างคำบรรยาย โปรดอ่าน [การสร้างคำบรรยายด้วย AI โดยใช้ OCR สำหรับวิดีโอและ ASR](https://weydub.com/technology/ai-subtitle-generation-video-ocr-asr/)

## ปลายทาง

```text
POST /v-w-c/gateway/ve/work/free
```

การแยกคำบรรยายทำงานแบบอะซิงโครนัส ให้บันทึก `body.idProject` และ `body.dataList[].id` จากนั้นใช้ [โมเดลงานแบบอะซิงโครนัส](./async-task-model.md) สำหรับการโพล คอลแบ็ก พฤติกรรมการลองใหม่ และการลงนามคอลแบ็ก

## การเข้าถึงและขีดจำกัด

| กฎ | ข้อกำหนด |
| --- | --- |
| การเข้าถึงของบัญชี | ต้องเปิดใช้งานสิทธิ์เข้าถึง API หลักสำหรับวิดีโอ โดยทั่วไปการแยกด้วย OCR/ASR เป็นส่วนหนึ่งของกลุ่มงานวิดีโอ แต่นโยบายบัญชีอาจยังคงจำกัดขนาดแบตช์หรือตัวเลือกขั้นสูง |
| วิดีโอต้นฉบับ | ใช้ HTTPS URL สาธารณะที่เสถียร ขีดจำกัดแบบตายตัวในปัจจุบันสำหรับวิดีโอคือ 15 นาทีต่อไฟล์และ 1000 MB ต่อไฟล์ |
| การเรียกเก็บเงิน | เวิร์กโฟลว์วิดีโอเรียกเก็บเงินเป็นหน่วยละ 30 วินาที คลิปที่สั้นกว่า 30 วินาทีจะนับเป็น 30 วินาที |
| งานที่ล้มเหลว | หากค่าสุดท้ายเป็นไปตามเงื่อนไข `processStatus > 1` ระบบจะไม่หักเครดิต |
| การเก็บรักษา | ไฟล์คำบรรยายและแอสเซ็ตที่เรนเดอร์เป็นไปตามกฎการเก็บรักษาข้อมูลบนเว็บของ Weydub โดยค่าเริ่มต้น ระบบจะเก็บแอสเซ็ตต้นฉบับ/ที่เรนเดอร์จากช่วง 30 วันที่ผ่านมาไว้ ให้ดาวน์โหลดสำเนาสำหรับเก็บรักษาระยะยาวหลังได้รับคอลแบ็ก |

## เลือก OCR หรือ ASR

| โหมด | ควรใช้เมื่อ | สัญญาณที่ต้องมี | ผลลัพธ์ทั่วไป |
| --- | --- | --- | --- |
| การแยกคำบรรยายแบบฝังถาวรด้วย OCR | คำบรรยายถูกฝังลงในภาพ โดยปกติจะอยู่ที่ด้านล่างของเฟรม | `needChineseOcclude: 14`, `videoInpaintMasks`, `videoInpaintLang`, `lang`. | `srcSrtUrl`, `tgtSrtUrl`. |
| การแยกเสียงพูดด้วย ASR | มีบทสนทนาอยู่ในแทร็กเสียงและคุณต้องการบทถอดเสียงพร้อมข้อมูลเวลา | `needWanyin: 1`, `wyTaskType: "ONLY_ASR"`, `wyNeedText: 0`. | `srcSrtUrl`, `tgtSrtUrl`. |

อย่าใช้ OCR เพื่อถอดเสียงวิดีโอที่มีเฉพาะเสียงพูด อย่าใช้ ASR เพื่ออ่านข้อความคำบรรยายแบบฝังถาวรในวิดีโอที่ไม่มีเสียง

## เพย์โหลดการแยกคำบรรยายด้วย OCR

ใช้ OCR เมื่อคำบรรยายฝังอยู่ในภาพวิดีโอแล้ว

```json
{
  "urls": ["https://example.com/video.mp4"],
  "needChineseOcclude": 14,
  "videoInpaintLang": "en",
  "lang": "en",
  "videoInpaintMasks": "[{\"type\":\"trans_only_ocr\",\"region\":[[0,0.8],[1,0.8],[1,1],[0,1]]}]",
  "extraOptions": "{\"extra_inpaint_config\":{\"auto_correct_on\":false,\"strip_last_punct_on\":true,\"scene_filter_on\":false}}",
  "callback": "https://your-domain.example/webhooks/weydub"
}
```

หมายเหตุ:

- `needChineseOcclude` ต้องเป็น `14`.
- ต้องระบุ `videoInpaintMasks` สำหรับการแยกด้วย OCR และควรทำให้เป็นสตริง JSON แบบกระชับก่อนลงนาม
- `type` ควรเป็น `trans_only_ocr`.
- ตั้งค่า `lang` ให้เท่ากับ `videoInpaintLang` เมื่อไม่จำเป็นต้องแปล
- พิกัดได้รับการปรับให้อยู่ในช่วงมาตรฐานตั้งแต่ `0` ถึง `1` โดยเรียงลำดับเป็นซ้ายบน ขวาบน ขวาล่าง และซ้ายล่าง

## มาสก์ OCR

ใช้มาสก์อย่างน้อยหนึ่งรายการเมื่อทราบบริเวณคำบรรยายที่มองเห็นได้ มาสก์ที่กำหนดช่วงเวลาช่วยหลีกเลี่ยงการแยกคำใบ้เนื้อเรื่องชั่วคราวหรือข้อความลงทะเบียนเป็นบทสนทนา

| ฟิลด์ | ชนิด | จำเป็น | คำอธิบาย |
| --- | --- | --- | --- |
| `type` | string | ใช่ | ใช้ `trans_only_ocr` สำหรับการแยกคำบรรยายด้วย OCR |
| `region` | array | ใช่ | จุดพิกัดที่ปรับให้อยู่ในช่วงมาตรฐานสี่จุด: `[[x1,y1],[x2,y2],[x3,y3],[x4,y4]]` |
| `start` | number | ไม่ | เวลาเริ่มต้นเป็นวินาที ไม่ต้องระบุฟิลด์นี้หรือใช้ `0` เมื่อมาสก์มีผลตั้งแต่เริ่มต้น |
| `end` | number | ไม่ | เวลาสิ้นสุดเป็นวินาที มีประโยชน์เมื่อมาสก์มีผลเฉพาะช่วงเกริ่นนำ |
| `to_end` | number | ไม่ | จำนวนวินาทีก่อนวิดีโอจบ ควรใช้ `end` ที่ระบุชัดเจนเมื่อทราบค่า |

บริเวณที่ใช้บ่อย:

| สถานการณ์ | บริเวณ |
| --- | --- |
| แถบคำบรรยายแนวตั้งอัตราส่วน 16:9 | `[[0,0.56],[1,0.56],[1,0.76],[0,0.76]]` |
| บริเวณมาตรฐานสำหรับคำบรรยายแนวนอน | `[[0,0.8],[1,0.8],[1,1],[0,1]]` |
| แถบด้านล่างแบบกำหนดเอง | `[[0,0.7],[1,0.7],[1,0.95],[0,0.95]]` |

## ตัวเลือก OCR

`extraOptions.extra_inpaint_config` สามารถปรับแต่งการทำความสะอาด OCR ได้:

| ตัวเลือก | ชนิด | คำอธิบาย |
| --- | --- | --- |
| `auto_correct_on` | boolean | ระบุว่าจะแก้ไขข้อความคำบรรยายที่ระบบรู้จำโดยอัตโนมัติหรือไม่ |
| `strip_last_punct_on` | boolean | ระบุว่าจะลบเครื่องหมายวรรคตอนท้ายออกจากคำบรรยายแต่ละบรรทัดหรือไม่ |
| `scene_filter_on` | boolean | ระบุว่าจะกรองข้อความในฉากที่ไม่ใช่บทสนทนาหรือไม่ ตัวเลือกนี้มักปิดใช้งานสำหรับการแยกคำบรรยายภาษาอังกฤษและภาษาอื่นที่ไม่ใช่ CJK เมื่อต้องการข้อความคำบรรยายที่มองเห็นได้ทั้งหมด |

เก็บ `extraOptions` เป็นสตริง JSON แบบกระชับสำหรับเพย์โหลดของ API สาธารณะ เว้นแต่สัญญาสำหรับบัญชีของคุณจะระบุไว้เป็นอย่างอื่น

## เพย์โหลดการแยกคำบรรยายด้วย ASR

ใช้ ASR เมื่อวิดีโอมีเสียงพูดและคุณต้องการบทถอดเสียงพร้อมข้อมูลเวลา

```json
{
  "urls": ["https://example.com/video.mp4"],
  "needWanyin": 1,
  "sourceLang": "en",
  "lang": "en",
  "wyTaskType": "ONLY_ASR",
  "needWyEdit": 0,
  "wyNeedText": 0,
  "extraOptions": "{\"asr_speaker_detect_on\":true,\"extra_video_translate_config\":{\"remove_last_punct_on\":true}}",
  "callback": "https://your-domain.example/webhooks/weydub"
}
```

หมายเหตุ:

- `wyTaskType` ต้องเป็น `ONLY_ASR`.
- `wyNeedText: 0` หมายความว่าไม่ต้องเรนเดอร์คำบรรยายลงในวิดีโอใหม่
- `needWyEdit: 0` ปิดใช้งานการทำงานแบบแก้ไขด้วยตนเอง/แบบ pro-draft สำหรับงานแยกนี้
- `sourceLang` คือภาษาพูด ส่วน `lang` คือภาษาคำบรรยายที่ส่งออก ให้ใช้รหัสเดียวกันเมื่อไม่จำเป็นต้องแปล

## ตัวเลือก ASR

| ตัวเลือก | ชนิด | คำอธิบาย |
| --- | --- | --- |
| `asr_speaker_detect_on` | boolean | เปิดใช้งานการตรวจจับผู้พูดเมื่อรองรับ มีประโยชน์สำหรับบทสนทนาที่มีผู้พูดหลายคน |
| `extra_video_translate_config.remove_last_punct_on` | boolean | ลบเครื่องหมายวรรคตอนท้ายออกจากบรรทัดคำบรรยายที่สร้างขึ้น |

## พารามิเตอร์

| พารามิเตอร์ | OCR | ASR | คำอธิบาย |
| --- | --- | --- | --- |
| `urls` | จำเป็น | จำเป็น | URL วิดีโอสาธารณะ ใช้ URL HTTPS ที่เสถียรในระบบที่ใช้งานจริง |
| `needChineseOcclude` | `14` | ไม่ใช้ | โหมดการแยกคำบรรยายด้วย OCR |
| `videoInpaintLang` | จำเป็น | ไม่ใช้ | ภาษาของข้อความคำบรรยายที่มองเห็นได้ |
| `videoInpaintMasks` | จำเป็น | ไม่ใช้ | สตริง JSON แบบกระชับที่อธิบายบริเวณ OCR |
| `extraOptions` | ไม่บังคับ | ไม่บังคับ | สตริง JSON แบบกระชับสำหรับการทำความสะอาด OCR หรือตัวเลือก ASR |
| `needWanyin` | ไม่ใช้ | `1` | เปิดใช้งานการประมวลผลเสียงพูดสำหรับ ASR |
| `sourceLang` | ไม่บังคับ | จำเป็น | ภาษาพูด/ภาษาต้นฉบับ |
| `lang` | จำเป็น | จำเป็น | ภาษาคำบรรยายที่ส่งออก ใช้ค่าเดียวกับภาษาต้นฉบับเมื่อไม่จำเป็นต้องแปล |
| `wyTaskType` | ไม่ใช้ | `ONLY_ASR` | ประเภทงานสำหรับ ASR เท่านั้น |
| `needWyEdit` | ไม่ใช้ | `0` | ปิดใช้งานกระบวนการแก้ไขด้วยตนเอง/แบบ pro-draft สำหรับการแยก |
| `wyNeedText` | ไม่ใช้ | `0` | ไม่ต้องเรนเดอร์คำบรรยายลงในวิดีโอใหม่ |
| `callback` | ไม่บังคับ | ไม่บังคับ | URL ของ Webhook สำหรับแจ้งเมื่อการประมวลผลแบบอะซิงโครนัสเสร็จสิ้น |
| `uid` | ไม่บังคับ | ไม่บังคับ | ตัวระบุผู้ใช้/ลูกค้าของคุณเมื่อบัญชีใช้การติดตามผู้ใช้ย่อย |

## ผลลัพธ์

งานแยกที่สำเร็จสามารถส่งคืนข้อมูลต่อไปนี้:

- `srcSrtUrl`
- `tgtSrtUrl`
- `processStatus`
- `processProgress`
- `paidPoint`
- ข้อมูลเมตาของงานภายใต้รายการงานที่ส่งคืน

การแยกข้อมูลด้วย OCR และ ASR ไม่จำเป็นต้องเรนเดอร์วิดีโอใหม่ ตรวจสอบสถานะซ้ำจนกว่า `processStatus === 1` แล้วจึงอ่าน `srcSrtUrl` หรือ `tgtSrtUrl`

Callback จะส่งเพย์โหลดของรายการงานโดยตรง โดยไม่มีโครงสร้างครอบชั้นนอก `code` / `msg` / `body` ที่ใช้ในการตอบกลับจากการตรวจสอบสถานะซ้ำ

## หมายเหตุสำหรับเอเจนต์

- เลือก OCR สำหรับข้อความคำบรรยายที่ฝังอยู่ในภาพ และเลือก ASR สำหรับบทสนทนาที่เป็นเสียงพูด
- คง `videoInpaintMasks` และ `extraOptions` ไว้ในรูปแบบที่กะทัดรัดและแปลงเป็นสตริงก่อนลงนาม
- อย่าส่งอาร์เรย์มาสก์ OCR เป็นอาร์เรย์เนทีฟ เว้นแต่สัญญาสำหรับบัญชีของคุณจะระบุให้ทำเช่นนั้น
- ใช้คำขอ enum (`POST /v-w-c/enum/query2`) เพื่อดึงข้อมูลการรองรับ `sourceLang` และ `Lang` ในปัจจุบัน โดย endpoint enum นี้ไม่ต้องลงนาม
- ตรวจสอบสถานะซ้ำจนกว่า `processStatus` จะเป็น `1` แล้วจึงอ่าน `srcSrtUrl` หรือ `tgtSrtUrl`
- จัดเก็บไฟล์คำบรรยายก่อนการล้างข้อมูลตามระยะเวลาการเก็บรักษา
