คลังของเรามีหนังและซีรีส์ภาษาญี่ปุ่นที่ไม่เคยมีซับไตเติลมาด้วย และครอบครัวที่ดูเป็นภาษาอังกฤษและภาษาไทย นี่คือเครื่องมือที่เราสร้างบนเครื่อง AI เพื่อแก้ปัญหานั้น: มันฟังวิดีโอ หาว่าพูดภาษาอะไรและตรงไหน ถอดเสียงด้วยเอนจินรู้จำเสียงสองตัวที่ตรวจทานกันเอง แปลผลเป็นภาษาใดก็ได้ใน 45 ภาษาที่คุณติ๊ก แล้ววางไฟล์ซับไตเติลไว้ข้างวิดีโอ — ข้ามคืน โดยไม่ต้องเฝ้า และไม่มีข้อมูลแม้แต่ไบต์เดียวออกนอกบ้าน ตั้งแต่ตุลาคม 2026 มันอยู่บน GitHub ให้ใครก็ตามที่มีการ์ด NVIDIA นำไปรันได้
--target en,th,de ตัวแปลถูกเลือกตามคู่ภาษา ทำงานทีละหน้าต่างยี่สิบบรรทัดโดยมีบทสนทนารอบข้างเป็นบริบท และได้รับแจ้งประเภทของเรื่อง — เด็กห้าขวบจอมแก่นในหนังตลกจะยังแก่นในภาษาไทย ด้วยคำลงท้ายแบบที่เด็กใช้ ไม่ใช่แบบพนักงานธนาคาร ภาษาจีนออกมาเป็นตัวย่อ กวางตุ้งเป็นตัวเต็ม ภาษาญี่ปุ่นและจีนใช้เครื่องหมายวรรคตอนของตัวเองและได้ความเร็วการอ่านที่ช้ากว่า ส่วนภาษาไทย ลาว เขมร และพม่า จะไม่ตัดบรรทัดระหว่างพยัญชนะกับสระของมันเลยffmpeg, Docker พร้อม NVIDIA Container Toolkit และ Ollama บนเครื่องเดียวกันสำหรับตัวแปล สิ่งเดียวที่ต้องกรอกคือวิดีโอของคุณอยู่ที่ไหนgit clone https://github.com/dodgypast/mlsubgen.git && cd mlsubgen
cp .env.example .env # MEDIA_DIR = your videos; your uid/gid; default languages
mkdir -p data models # state and the model cache, created by you so the containers can write them
docker compose up -d --build # ~14 GB image (CUDA torch and the speech stacks), 10-20 minutes the first time
docker compose run --rm worker pull # the speech models (~8 GB) and the translators your card can hold
docker compose run --rm worker pull speakers # optional: the two speaker models (33 MB) for --speakersจากนั้นเปิด http://<host>:8790 ใส่โฟลเดอร์เข้าคิว แล้วดูล็อก มีแบบติดตั้งบนเครื่องโดยตรงด้วย (setup.sh พร้อม user unit สำหรับเวิร์กเกอร์และหน้าเว็บ) คำสั่งบรรทัดคำสั่งสำหรับทุกอย่างที่หน้าเว็บทำได้ และ mlsubgen --help ที่อธิบายตัวเองได้ การ์ดจอเป็นตัวตัดสินส่วนที่เหลือ:
| GPU | โปรไฟล์ | อะไรเปลี่ยน |
|---|---|---|
| 24 GB | full | เอนจินรู้จำเสียงทั้งสองอยู่บนการ์ดพร้อมกัน และตัวแปลขนาด 27–31B ที่เราใช้ที่นี่ |
| 12–20 GB | 12gb | whisper แบบ int8 และตัวแปลขนาด 12B (7 GB) สำหรับทุกคู่ภาษา |
| 8 GB | 8gb | เอนจินรู้จำเสียงอยู่บนการ์ดทีละตัว และตัวแปลขนาด 4B สำหรับทุกคู่ภาษา |
MLSUBGEN_PROFILE ตัวแปลที่เล็กกว่าอ่อนกว่าอย่างเห็นได้ชัด โดยเฉพาะญี่ปุ่นเป็นอังกฤษ mlsubgen bench รันขั้นตอนเสียงครั้งเดียวแล้วให้ตัวแปลทุกตัวแปลบรรทัดเดียวกัน วางเทียบกัน คุณจึงเห็นได้ว่าต่างกันแค่ไหนบนเนื้อหาของคุณเองก่อนจะรันยาว ๆเวอร์ชันแรก ๆ ถอดเสียงได้สวยงามแต่ก็ยังพลาดบทสนทนาไปทั้งช่วง ต้องใช้เครื่องมือวัดผล ไม่ใช่โมเดลที่ดีกว่า จึงพบสาเหตุ: ตัวตรวจจับเสียงพูดเป็นผู้ตัดสินว่าส่วนไหนของเสียงที่เอนจินรู้จำเสียงได้รับอนุญาตให้ฟัง และในแอนิเมชันที่มีเพลงประกอบ มันไม่จับบทพูดจำนวนมากเลย การทะเลาะกันสามสิบวินาทีหายไป เพราะตัวตรวจจับเรียกมันว่าเพลง การปรับปรุงทุกอย่างหลังจากนั้น — เอนจินที่ดีกว่า การรวมที่ดีกว่า — ทำงานได้แค่กับสิ่งที่มันได้รับมา
ตัวตรวจจับจึงถูกลดชั้น ตอนนี้เอนจินได้ยินทั้งไทม์ไลน์ ตัดเป็นชิ้นละสามสิบวินาทีตรงจุดที่เงียบที่สุด และข้ามเฉพาะช่วงที่เงียบตามพลังงานเสียง ตัวตรวจจับเหลือหน้าที่ให้คำแนะนำสองอย่าง — เลือกหน้าต่างที่มีเสียงพูดหนาแน่นสำหรับระบุภาษา และเสนอจุดตัด — และไม่เคยได้ตัดสินอีกเลยว่าอะไรจะถูกถอดเสียง อะไรก็ตามที่เอนจินแต่งขึ้นทับเพลงจะถูกจัดการในที่ที่ควรจัดการ: ด้วยเอนจินสองตัวที่เห็นไม่ตรงกัน ด้วยกรรมการที่รู้ว่าข้อความวนซ้ำแปลก ๆ หน้าตาเป็นอย่างไร และด้วยด่านที่ตรวจว่าบรรทัดที่น่าสงสัยมีเสียงอยู่ข้างใต้ก่อนจะเก็บไว้
ในตอนที่เผยให้เห็นปัญหา การเปลี่ยนแปลงนี้กู้บทสนทนาที่เอนจินไม่เคยได้รับอนุญาตให้ฟังกลับมาได้แปดนาที
ชี้มันไปที่โฟลเดอร์ แล้วมันจะทำงานเป็นรอบ รอบละสิบไฟล์ ซับไตเติลจึงปรากฏทุกรอบ แทนที่จะรอจนจบคืน สำหรับแต่ละไฟล์:
film.en.srt, film.th.srt เขียนแบบอะตอมมิก ไว้ข้างวิดีโอ ซึ่งเครื่องเล่นทุกตัวหาเจอแต่ละข้อคือการเปลี่ยนแปลงที่ทำหลังจากเครื่องมือแสดงให้เห็นขนาดของปัญหา และแต่ละข้อตรวจซ้ำได้กับไฟล์ใดก็ได้ด้วยการรันเครื่องมืออีกครั้ง
เครื่อง GPU ในแร็กทำหน้าที่ฟัง พี่น้องของมัน N5 AI MAX รันผู้ช่วยเสียงของบ้านบนฮาร์ดแวร์ของตัวเอง งานทำซับข้ามคืนจึงไม่เคยแย่งทรัพยากรกับคนที่สั่งเปิดไฟ การทำซับคือการใช้การ์ด 24 GB ที่ดีที่สุดในตอนที่ทุกคนหลับ และกฎเดียวกันใช้กับทุกอย่างที่เรารัน — วัดก่อนเปลี่ยน แก้ที่ชั้นที่รับการแก้ได้ และอย่าปล่อยให้ส่วนที่ไว้ใจไม่ได้ตัดสินแทนส่วนที่ไว้ใจได้ ถ้าคลังของคุณมีปัญหาเดียวกัน โค้ดอยู่บน GitHub ถ้าบ้านของคุณมีปัญหาเดียวกัน เขียนมาหาเรา