ขอบคุณสำหรับข้อมูลดีๆครับ
หลังจากลองเล่นมาหลายวันพบว่าใช้ดีมากจริงๆเลยขอมาแบ่งปันประสบการณ์ เล่าถึงปัญหาที่เจอและวิธีแก้ไขเผื่อจะเป็นประโยชน์กับท่านอื่นๆครับ
การเลือก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

ต่อมาปัญหาที่เจอในตัวConst-meซึ่งคิดว่าหลายๆท่านน่าจะเจอเหมือนกันคือถ้าหนังมี
ช่วงเงียบหรือไม่มีคำพูดนานๆ(รวมถึงฉากอย่างว่า)Whisperมันจะมีอาการถอดคำผิดๆออกมาหรือสร้างซับขึ้นมาซ้ำๆ โดยไม่จำเป็นว่าไฟล์หนังต้องนานกว่า1ชั่วโมงเลยครับ ทั้งนี้ถึงจะขยับมาใช้โมเดลขนาดกลางก็ยังไม่หาย (ผมไปหาข้อมูลในgithubหลายๆคนบอกว่าถึงใช้โมเดลlargeก็ยังเจอ)
ตัวอย่าง:

ซึ่งเท่าที่หาข้อมูลมาหลายๆแหล่งพูดตรงกันว่าสาเหตุมาจากตัวแกนของWhisperเองที่จะมีอาการหลอน(AI hallucination)เวลาถอดคำภาษาต่างประเทศแล้วเจอส่วนที่ไม่แน่ใจมันจะมั่วขึ้นมาเลยครับ อย่างไรก็ตามในโมเดลขนาดเล็กเหมือนกันปัญหานี้ในPurfviews มีน้อยกว่าอย่างเห็นได้ชัด ซึ่งสาเหตุมาจากตัวPurfviewsมีการใช้งานVoice Activity Detector(VAD)ทำการกรองเอาส่วนที่ไม่มีเสียงคนพูดออกไปก่อนแล้วถึงใช้Whisperถอดคำเฉพาะส่วนที่มีเสียงคนพูดเท่านั้น ด้วยเหตุนี้ผมจึงแนะนำตัวPurfviewก่อนสำหรับคนที่มีการ์ดnvdiaครับ
แต่สำหรับคนใช้การ์ดจอAMD(เช่นผมเอง

)ต้องเล่นท่ายากนิดหน่อยครับ เหมาะสำหรับคนที่คุ้นเคยกับPython โดยผมได้เขียนสคริปเรียกใช้Silero-VADเพื่อให้มันกรองไฟล์ของเราก่อน1ชั้น โดยVADจะหั่นหนังเราออกเป็นไฟล์เสียงย่อยๆที่มีเฉพาะเสียงคนพูดรวมถึงบันทึกtimestampของแต่ละพาร์ทเพื่อจะได้เอากลับมารวมกันใหม่ได้
วิธีใช้
1. ขั้นแรกเรียกใช้VADจากไฟล์runVAD.py

ไฟล์หนัง28นาที VADใช้เวลากรองแค่20วินาที ถือว่าไวมาก

จะได้ไฟล์เสียงย่อยออกมาหลายๆไฟล์อยู่ในโฟลเดอร์vad_chunksแบบนี้

2. โยนไฟล์เสียงทั้งหมดในโฟลเดอร์vad_chunksใส่SubtitleEditได้เลย ใช้โหมดbatchจะได้สั่งทีเดียวถอดทุกไฟล์ต่อกันไปเลยครับและอย่าลืมเลือกengineให้ถูกเพื่อความรวดเร็ว

3. หลังถอดเสียงทุกไฟล์ครบแล้ว เรียกใช้ไฟล์composeSub.pyเพื่อรวมซับทั้งหมดเป็นไฟล์เดียวเพื่อเอากลับไปแปลต่อในSubtitleEditได้เลยครับ

เปรียบเทียบผลลัพธ์กับแบบเดิม โดยรวมถือว่าดีขึ้นพอสมควร ช่วยให้เอาไปปรับต่อได้ง่ายขึ้นเยอะครับ

ถ้าใครสนใจสามารถโหลด
สคริปPythonในนี้ของผมไปลองใช้ได้เลยครับ ข้อเสียหลักๆคือเวลาที่ใช้ถอดคำไฟล์ย่อยทีละไฟล์ดูเหมือนจะนานกว่าถอดไฟล์ใหญ่1ไฟล์ครั้งเดียวครับ กรณีของผมคือจาก~3นาทีกว่าๆเป็น~8นาทีแต่ก็ช่วยเพิ่มคุณภาพซับได้พอสมควรเลยครับ หวังว่าจะเป็นประโยชน์ครับ