FFmpeg 8.0 เพิ่มการรองรับ Whisper
(code.ffmpeg.org)- FFmpeg เวอร์ชัน 8.0 ได้เพิ่มการรองรับ โมเดลรู้จำเสียงพูด Whisper อย่างเป็นทางการ
- Whisper เป็นโมเดลรู้จำเสียงพูดแบบโอเพนซอร์สที่พัฒนาโดย OpenAI และใช้สำหรับการแปลงเสียงเป็นข้อความอัตโนมัติในหลายภาษา
- การเพิ่มความสามารถนี้ช่วยเพิ่มโอกาสในการทำเวิร์กโฟลว์ แปลงเสียงเป็นข้อความ แบบอัตโนมัติได้โดยตรงในงาน ประมวลผลวิดีโอและเสียง
- ช่วยเสริม ความสามารถในการใช้งานและประสิทธิภาพของ FFmpeg อย่างมากสำหรับนักพัฒนาและงานด้านมีเดียอัตโนมัติ
- เมื่อมีฟีเจอร์รู้จำเสียงพูดสมัยใหม่ในตัว ก็ช่วยลดภาระจากการต้องใช้เครื่องมือภายนอกเพิ่มเติมหรือกระบวนการผสานระบบที่ซับซ้อน
ภาพรวมการรองรับ Whisper ใน FFmpeg 8.0
- FFmpeg 8.0 เพิ่มการรองรับ โมเดลรู้จำเสียงพูด Whisper ทำให้สามารถแปลงข้อมูลเสียงเป็นข้อความอัตโนมัติได้ในหลายภาษา
- Whisper ใช้ อัลกอริทึมที่อาศัยดีปเลิร์นนิง ซึ่งสร้างโดย OpenAI เพื่อมอบความแม่นยำสูงในการแปลงเสียงเป็นข้อความ
- ผู้ใช้ FFmpeg เดิมสามารถสร้างซับไตเติลหรือดึงเนื้อหาคำพูดออกจากไฟล์วิดีโอและเสียงได้สะดวกยิ่งขึ้นผ่าน ฟีเจอร์รองรับ Whisper ที่ฝังมาในตัว โดยไม่ต้องผ่านเครื่องมือภายนอก
ประโยชน์หลักของการรวม Whisper
- การรวม Whisper เข้ามาทำให้สามารถสร้างเวิร์กโฟลว์ รู้จำเสียงพูด ที่มีประสิทธิภาพและขยายต่อได้ง่ายใน ไปป์ไลน์ประมวลผลและอัตโนมัติของมีเดีย ที่อิงกับ FFmpeg
- เมื่อมีอัลกอริทึมรู้จำเสียงพูดในตัว นักพัฒนาจึงได้ข้อดีคือสามารถรับ ผลลัพธ์การแปลงเสียงเป็นข้อความได้ด้วยคำสั่งง่าย ๆ โดยไม่ต้องแบกรับภาระจากการเชื่อมต่อเพิ่มเติมที่ซับซ้อนหรือการเขียนสคริปต์แยกต่างหาก
ความสำคัญในเชิงอุตสาหกรรมของการผสาน FFmpeg กับ Whisper
- ในงานหลากหลายด้าน เช่น การจัดการสินทรัพย์มีเดียจำนวนมหาศาล, การสร้างซับไตเติล, การเก็บถาวรข้อมูลวิดีโอ ฯลฯ การผสาน FFmpeg + Whisper มีจุดแข็งในการทำให้เกิดทั้งความคุ้มค่าด้านต้นทุนและระบบอัตโนมัติไปพร้อมกัน
- เดิมทีต้องเชื่อมเครื่องมือรู้จำเสียงพูดโอเพนซอร์สแยกต่างหากเข้ากับ FFmpeg แต่ตอนนี้สามารถ ประมวลผลได้โดยตรงในตัว FFmpeg ทำให้คาดหวังได้ทั้งความเรียบง่ายของเวิร์กโฟลว์และความเร็วในการประมวลผลที่ดีขึ้น
รายละเอียดทางเทคนิค
- มีการเพิ่มออดิโอฟิลเตอร์สำหรับทำ Automatic Speech Recognition (ASR) ได้โดยตรงภายใน FFmpeg โดยอิงจากไลบรารี Whisper.cpp
- เปิดใช้งานได้ด้วยออปชัน
--enable-whisperและต้องระบุพาธของโมเดล (model) - ออปชันหลัก: การตั้งค่าภาษา(language), การใช้ GPU(use_gpu), ขนาดคิว(queue), รูปแบบเอาต์พุต(format: text/srt/json), การตั้งค่าโมเดล VAD(การตรวจจับกิจกรรมเสียง) และค่า threshold เป็นต้น
- หากตั้งค่า queue ให้เล็ก จะได้ความเป็นเรียลไทม์สูงขึ้น แต่ความแม่นยำลดลงและภาระ CPU เพิ่มขึ้น; หากตั้งค่าใหญ่ขึ้น ความแม่นยำจะสูงขึ้นแต่มีความหน่วงมากขึ้น
- สามารถใช้ตัวเลือก destination เพื่อบันทึกผลลัพธ์ไปยังไฟล์, URL หรือเมทาดาทาได้ และยังรองรับ AVIO protocol
- มีตัวอย่างสถานการณ์การใช้งาน เช่น การสร้างซับไตเติล SRT, การส่งแบบ HTTP ในรูปแบบ JSON, การถอดเสียงจากไมโครโฟนแบบเรียลไทม์ (ใช้ VAD)
- ตัวอย่างการสร้างไฟล์ซับไตเติล SRT
ffmpeg -i input.mp4 -vn \ -af "whisper=model=../whisper.cpp/models/ggml-base.en.bin:language=en:queue=3:destination=output.srt:format=srt" \ -f null -
- ตัวอย่างการสร้างไฟล์ซับไตเติล SRT
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
อยากแนะนำ Subtitle Edit ด้วย (จะสนับสนุนนักพัฒนาก็ได้) Subtitle Edit เป็นอินเทอร์เฟซที่เหมาะมากสำหรับทดลองใช้งานกับ Whisper ถ้าใครเคยใช้ Aegisub มาก่อน ก็คงเรียก Subtitle Edit ว่า Aegisub 2.0 ได้เลย
HOWTO: ลากไฟล์วิดีโอหรือไฟล์เสียงไปที่หน้าต่างด้านขวา แล้วไปที่ Video > Audio to text (Whisper) ปกติฉันมักได้ผลดีที่สุดกับ Faster-Whisper-XXL ถ้าเป็นไปได้แนะนำให้ใช้ large-v2 (large-v3 กลับมี regression อยู่บ้างในบางกรณี) มันไม่สมบูรณ์แบบ แต่แก้ไขต่อได้พอสมควรด้วยฟีเจอร์อย่าง Tools > Fix common errors ของ Subtitle Edit
ถ้าใช้การ์ดจอ Nvidia รุ่นใหม่ ต้องใส่
--compute_type float32ถึงจะทำงานได้ตามปกติ ถ้าเจอข้อผิดพลาด อาจต้องติดตั้งไลบรารี torch ใหม่โดยระบุ index แบบในคำสั่งด้านล่าง ถ้าแก้ปัญหาพวกนี้ได้แล้ว อยากให้ช่วยคอมเมนต์ไว้ด้วยว่าเจอปัญหาอะไรและแก้อย่างไร จะได้ช่วยคนอื่นต่อได้ด้วย (รวมถึงช่วยตอนค้นหาในเว็บ)หน้าเว็บ Subtitle Edit
หน้าสนับสนุนนักพัฒนา Subtitle Edit
releases เวอร์ชันล่าสุดของ Subtitle Edit
สามารถให้เลือก backend อัตโนมัติได้ด้วยคำสั่งนี้
uv pip install torch torchvision torchaudio --torch-backend=autoลิงก์อธิบายแบบละเอียด
แพ็กเกจตระกูล torch จะถูกดาวน์โหลดจาก torch index ส่วนที่เหลือจาก PyPI จึงไม่ต้องกังวลเรื่องชนกัน
เคยเห็นแม้แต่วิดีโอเทคนิคที่ทำแบบมืออาชีพ ก็ยังใส่ซับถอดออกไม่ได้ทั้งที่ไม่จำเป็น ถ้าไม่ใช่วิดีโอแมวก็ถือว่าเยอะเกินไป
ถ้าใช้การถอดเสียงแบบโลคัล ก็ทำการแปลอัตโนมัติได้ และยังแก้ปัญหาประสบการณ์ใช้งานแปลก ๆ ที่ต้องขึ้นซับทับบนซับที่ถูกฝังไว้แล้วอีกชั้นหนึ่ง
เช่นกรณีอย่าง “I scream” กับ “Ice cream” ที่ออกเสียงคล้ายกันแต่ความหมายต่างกันโดยสิ้นเชิง อยากรู้ว่ามันใช้ข้อมูลบริบทจากช่วงหลังเพื่อแก้ผลลัพธ์ก่อนหน้าได้หรือเปล่า
คิดว่าวิธีนี้เป็นเงื่อนไขจำเป็นถ้าจะเอาทั้งความเป็นเรียลไทม์และความแม่นยำเข้าด้วยกัน จริง ๆ แล้วในการถอดเสียงบน Android ก็เคยเห็นว่าข้อความถูกปรับไปเรื่อย ๆ ระหว่างพูด
"How to wreck a nice beach you sing calm incense"
ลิงก์บทความ
เลยสงสัยว่าคนที่มีความบกพร่องทางการได้ยินมาตั้งแต่กำเนิดมีการศึกษาหรือพัฒนาความเข้าใจ/การสร้างคำเล่นคำจากเสียงพูด (การเล่นภาษา จังหวะ ฯลฯ) กันเป็นพิเศษไหม
มันให้ความรู้สึกคล้ายการทำคณิตศาสตร์เชิงนามธรรมโดยไม่มีประสบการณ์ทางประสาทสัมผัสโดยตรง แต่ในขณะเดียวกันนักคณิตศาสตร์ก็อ้างว่าสามารถสร้างปรากฏการณ์เชิงประสบการณ์อย่างดนตรีขึ้นจากสิ่งนามธรรมของตนได้ จึงเป็นประเด็นที่น่าสนใจเหมือนกัน
ลิงก์ pdf ที่เกี่ยวข้อง
ฉันไม่ได้รู้โครงสร้างของ Whisper ลึกนัก แต่โดยทั่วไปโมเดล ASR จะให้ decoder ใช้เสียงถัดจาก chunk ปัจจุบันด้วยเพื่อเข้าใจบริบท ดังนั้นมันจึงถูกปรับด้วย language model เพื่ออนุมานรูปแบบที่เป็นธรรมชาติตามไวยากรณ์ เช่น “I like ice cream”
Run Whisper audio transcriptions with one FFmpeg command
ก่อนหน้านี้เคยมีการเพิ่มฟิลเตอร์ sr (super resolution) แต่เก่ามากแล้วจนการหา weights ก็ยังยุ่งยาก แม้ว่าจะมีการเพิ่มการรองรับไลบรารี ML หลายตัว (เช่น libtorch) แต่การเริ่มใช้งานก็ยังไม่ง่ายอยู่ดี
ถ้าสามารถรวมโมเดลพร้อมใช้ไว้ในโฟลเดอร์ “models” แล้วเรียกใช้งานโมเดลต่าง ๆ อย่างอัปสเกล, ตัดเสียงรบกวน, อัปสเกลข้อมูลอนุกรมเวลา ฯลฯ ได้อย่างรวดเร็ว ก็น่าจะดีกว่า
ทุกวันนี้งานวิจัยด้านฟิลเตอร์เสียงและวิดีโอส่วนใหญ่ก็อิง ML กันหมดแล้ว และ codec ใหม่ ๆ ก็น่าจะมีโอกาสสูงที่จะเป็น ML-based เช่นกัน
ดูคำอธิบายใน Wikipedia ของ Whisper
รายการโมเดล Whisper ทั้งหมด
ฉันมีหนังญี่ปุ่นเก่ามากเรื่องหนึ่ง แต่ไม่มีคำแปลภาษาอังกฤษเลย เลยดูไม่ได้
เคยลองหานักแปลใน Fiverr มาก่อน ตามอัตราทางการจะเป็นหลักหลายพันดอลลาร์ ต่อรองลงมาเหลือหลักหลายร้อยแล้ว แต่สุดท้ายเขาก็หายไป
คุณภาพขึ้นอยู่กับสำเนียงและคุณภาพเสียง และโมเดล "large-v3" ให้ผลลัพธ์ดีที่สุด
สามารถใช้ความสามารถที่รวมกับ ffmpeg ได้ด้วยคำสั่งแบบนี้
ffmpeg -i movie.mp4 -af whisper=model=large-v3:task=translate output.srtแม้แต่โมเดล “English” ก็จริง ๆ รองรับหลายภาษาและแปลเป็นอังกฤษได้โดยตรง
หรือจะถอดเสียงเป็นภาษาญี่ปุ่นก่อน แล้วค่อยใช้ตัวแปลอื่นแปลเป็นอังกฤษก็ได้ ถ้าเป็นบทสนทนาที่ซับซ้อนเชิงความหมาย วิธีนี้บางครั้งดีกว่า
ตัวอย่าง)
แปลตรง: ญี่ปุ่น→อังกฤษ: ลิงก์อ้างอิง whisper-standalone-win
มันมักสร้างเนื้อหาที่ไม่มีอยู่ในออดิโอขึ้นมา และถ้ามีหลายภาษาปะปนกันในวิดีโอ มันจะสับสนหนักมาก
มันไม่เข้าใจบริบทเลย จึงเห็นข้อผิดพลาดแบบที่เจอบ่อยในคำแปลอัตโนมัติของ YouTube
ประสิทธิภาพสูงสุดจะได้เมื่อใช้โมเดลขนาดใหญ่ที่สุด แต่ความเร็วขึ้นอยู่กับฮาร์ดแวร์
อีกทางหนึ่งคือใช้วิธีแบบ VideoToTextAI ที่ดึงซับออกมา → แปลได้มากกว่า 100 ภาษา → บันทึกเป็นไฟล์ SRT
มันมักสุ่มเติมประโยคที่ไม่มีอยู่จริงเข้าไป
ใช้กับงานจัดประเภทพอได้ แต่ยังไม่ดีพอสำหรับงานถอดซับ
ถ้าใช้บน Mac ได้เลยโดยไม่ต้องหาโมเดลเพิ่มก็น่าจะดี
เอกสาร SpeechTranscriber
เอกสาร SpeechAnalyzer
รีวิวการใช้งานจริงและการเปรียบเทียบกับ Whisper
กล่าวคือ
1. git clone whisper.cpp
2. ติดตั้ง dependency ของไลบรารีนั้น
3. build ให้สำเร็จ
4. ดาวน์โหลดโมเดลจริง
หลังจากนั้นถึงจะใช้ฟิลเตอร์
-af "whisper=model...ได้ถ้าไม่เตรียมพวกนี้ไว้ก่อนก็จะล้มเหลว และสำหรับมือใหม่มันน่าหงุดหงิดมาก
ฉันคิดว่าถ้าทำ Whisper avfilter แบบ native ไปเลย แล้วให้ผู้ใช้แค่ดาวน์โหลดโมเดลอย่างเดียว จะมีประสิทธิภาพกว่าและมีผู้ใช้งานจริงมากกว่านี้มาก
ต้องคำนึงถึงความเร็วในการเปลี่ยนแปลงของโปรเจกต์ whisper-cpp ด้วย
ถ้าเป็นกรณีที่ต้อง build dependency และดาวน์โหลดโมเดลเหมือนฟิลเตอร์อื่น ๆ (เช่น vmaf) ก็คาดว่าน่าจะมี precompiled binary สำหรับมือใหม่ออกมาในไม่ช้า (และ whisper-cpp ก็เป็นไลเซนส์ MIT ด้วย)
มีข้อผิดพลาดและอาการหลอนอยู่บ้าง แต่โดยรวมทำงานได้ดีพอสำหรับสิ่งที่ต้องการ
ในสถานการณ์แบบนั้น ฉันคิดว่าการรู้จำผู้พูด (speaker recognition) สำคัญมากเป็นพิเศษ