ขอบคุณสำหรับข้อมูลดีๆครับ
หลังจากลองเล่นมาหลายวันพบว่าใช้ดีมากจริงๆเลยขอมาแบ่งปันประสบการณ์ เล่าถึงปัญหาที่เจอและวิธีแก้ไขเผื่อจะเป็นประโยชน์กับท่านอื่นๆครับ
การเลือกEngineแนะนำว่าควรเลือกรันด้วยgpuจะเร็วกว่าcpuมาก(เครื่องผมเร็วขึ้นประมาณ4-6เท่า) โดยแนะนำอยู่2ตัวคือ
1) Purfview's Faster-Whisper
รองรับเฉพาะNVDIAเท่านั้น ใครใช้ค่ายเขียวแนะนำให้ใช้ตัวนี้เลยครับ ครบจบในตัว (เหตุผลโปรดอ่านต่อด้านล่าง)
2) Const-me
ตัวนี้การ์ดจอAMDสามารถรันได้แต่มีปัญหานิดหน่อย
ส่วนตัวผมใช้GPU AMDเลยใช้ได้แค่ตัวConst-MEส่วนของตัวPurfviewถ้าไม่มีการ์ดจอnvdiaแล้วรันไปมันจะใช้แค่cpuอย่างเดียวครับ ผมทดสอบด้วยไฟล์หนัง TEAM-102 โดยตัดเอาส่วน28นาทีแรกของหนังมาทำซับด้วยSpec [CPU: R5 5800H, GPU: RX 6600M, RAM: 32 GB] พบว่า
-Const-me (GPU) model small ใช้เวลา 55วินาที
-Purftviews (CPU) model small ใช้เวลา 124 วินาที
-Const-me (GPU) model medium ใช้เวลา 196วินาที
ส่วนตัว Purftviews (CPU) model medium ไม่ได้รันเพราะขี้เกียจรอครับ 5555
![Grin](https://www.avcollectors.com/board/Smileys/ohm/grin.gif)
ต่อมาปัญหาที่เจอในตัวConst-meซึ่งคิดว่าหลายๆท่านน่าจะเจอเหมือนกันคือถ้าหนังมี
ช่วงเงียบหรือไม่มีคำพูดนานๆ(รวมถึงฉากอย่างว่า)Whisperมันจะมีอาการถอดคำผิดๆออกมาหรือสร้างซับขึ้นมาซ้ำๆ โดยไม่จำเป็นว่าไฟล์หนังต้องนานกว่า1ชั่วโมงเลยครับ ทั้งนี้ถึงจะขยับมาใช้โมเดลขนาดกลางก็ยังไม่หาย (ผมไปหาข้อมูลในgithubหลายๆคนบอกว่าถึงใช้โมเดลlargeก็ยังเจอ)
ตัวอย่าง:
![](https://i.ibb.co/nRtg34b/Screenshot-2023-11-16-061756.png)
ซึ่งเท่าที่หาข้อมูลมาหลายๆแหล่งพูดตรงกันว่าสาเหตุมาจากตัวแกนของWhisperเองที่จะมีอาการหลอน(AI hallucination)เวลาถอดคำภาษาต่างประเทศแล้วเจอส่วนที่ไม่แน่ใจมันจะมั่วขึ้นมาเลยครับ อย่างไรก็ตามในโมเดลขนาดเล็กเหมือนกันปัญหานี้ในPurfviews มีน้อยกว่าอย่างเห็นได้ชัด ซึ่งสาเหตุมาจากตัวPurfviewsมีการใช้งานVoice Activity Detector(VAD)ทำการกรองเอาส่วนที่ไม่มีเสียงคนพูดออกไปก่อนแล้วถึงใช้Whisperถอดคำเฉพาะส่วนที่มีเสียงคนพูดเท่านั้น ด้วยเหตุนี้ผมจึงแนะนำตัวPurfviewก่อนสำหรับคนที่มีการ์ดnvdiaครับ
แต่สำหรับคนใช้การ์ดจอAMD(เช่นผมเอง
![Cry](https://www.avcollectors.com/board/Smileys/ohm/cry.gif)
)ต้องเล่นท่ายากนิดหน่อยครับ เหมาะสำหรับคนที่คุ้นเคยกับPython โดยผมได้เขียนสคริปเรียกใช้Silero-VADเพื่อให้มันกรองไฟล์ของเราก่อน1ชั้น โดยVADจะหั่นหนังเราออกเป็นไฟล์เสียงย่อยๆที่มีเฉพาะเสียงคนพูดรวมถึงบันทึกtimestampของแต่ละพาร์ทเพื่อจะได้เอากลับมารวมกันใหม่ได้
วิธีใช้
1. ขั้นแรกเรียกใช้VADจากไฟล์runVAD.py
![](https://i.ibb.co/qW80XNS/Screenshot-2023-11-16-053244.png)
ไฟล์หนัง28นาที VADใช้เวลากรองแค่20วินาที ถือว่าไวมาก
![](https://i.ibb.co/W6hqGWJ/Screenshot-2023-11-16-052506.png)
จะได้ไฟล์เสียงย่อยออกมาหลายๆไฟล์อยู่ในโฟลเดอร์vad_chunksแบบนี้
![](https://i.ibb.co/FmNNHB4/Screenshot-2023-11-16-052440.png)
2. โยนไฟล์เสียงทั้งหมดในโฟลเดอร์vad_chunksใส่SubtitleEditได้เลย ใช้โหมดbatchจะได้สั่งทีเดียวถอดทุกไฟล์ต่อกันไปเลยครับและอย่าลืมเลือกengineให้ถูกเพื่อความรวดเร็ว
![](https://i.ibb.co/cy35P0S/Screenshot-2023-11-16-052703.png)
3. หลังถอดเสียงทุกไฟล์ครบแล้ว เรียกใช้ไฟล์composeSub.pyเพื่อรวมซับทั้งหมดเป็นไฟล์เดียวเพื่อเอากลับไปแปลต่อในSubtitleEditได้เลยครับ
![](https://i.ibb.co/tz4KSXV/Screenshot-2023-11-16-060231.png)
เปรียบเทียบผลลัพธ์กับแบบเดิม โดยรวมถือว่าดีขึ้นพอสมควร ช่วยให้เอาไปปรับต่อได้ง่ายขึ้นเยอะครับ
![](https://i.ibb.co/TBTpc9Y/Screenshot-2023-11-16-061826.png)
ถ้าใครสนใจสามารถโหลด
สคริปPythonในนี้ของผมไปลองใช้ได้เลยครับ ข้อเสียหลักๆคือเวลาที่ใช้ถอดคำไฟล์ย่อยทีละไฟล์ดูเหมือนจะนานกว่าถอดไฟล์ใหญ่1ไฟล์ครั้งเดียวครับ กรณีของผมคือจาก~3นาทีกว่าๆเป็น~8นาทีแต่ก็ช่วยเพิ่มคุณภาพซับได้พอสมควรเลยครับ หวังว่าจะเป็นประโยชน์ครับ