31 điểm bởi GN⁺ 2025-08-14 | 1 bình luận | Chia sẻ qua WhatsApp
  • Phiên bản FFmpeg 8.0 đã chính thức bổ sung tính năng hỗ trợ mô hình nhận dạng giọng nói Whisper
  • Whisper là mô hình nhận dạng giọng nói mã nguồn mở do OpenAI phát triển, được dùng để tự động chuyển đổi giọng nói ở nhiều ngôn ngữ
  • Việc đưa tính năng này vào giúp tăng khả năng tự động hóa quy trình chuyển giọng nói thành văn bản trực tiếp trong các tác vụ xử lý video và âm thanh
  • Khả năng ứng dụng và hiệu quả của FFmpeg được tăng cường đáng kể đối với các nhà phát triển và lĩnh vực tự động hóa media
  • Việc tích hợp sẵn tính năng nhận dạng giọng nói mới nhất giúp giảm gánh nặng phải dùng công cụ bên ngoài hoặc quy trình tích hợp phức tạp

Tổng quan về hỗ trợ Whisper trong FFmpeg 8.0

  • Phiên bản FFmpeg 8.0 bổ sung hỗ trợ mô hình nhận dạng giọng nói Whisper, qua đó cung cấp khả năng tự động chuyển dữ liệu giọng nói thành văn bản ở nhiều ngôn ngữ
  • Whisper sử dụng thuật toán dựa trên deep learning do OpenAI tạo ra, bảo đảm hiệu năng chuyển giọng nói thành văn bản với độ chính xác cao
  • Người dùng FFmpeg hiện tại có thể tạo phụ đề hoặc trích xuất nội dung lời nói từ tệp video và âm thanh thông qua tính năng hỗ trợ Whisper tích hợp sẵn, mà không cần qua công cụ bên ngoài

Những lợi ích chính của việc tích hợp Whisper

  • Nhờ tích hợp Whisper, các pipeline xử lý media và tự động hóa dựa trên FFmpeg có thể triển khai quy trình nhận dạng giọng nói hiệu quả và có khả năng mở rộng cao
  • Khi thuật toán nhận dạng giọng nói được tích hợp sẵn, nhà phát triển có thể nhận được kết quả chuyển giọng nói thành văn bản chỉ với lệnh đơn giản mà không phải gánh thêm công việc tích hợp phức tạp hay viết script riêng

Ý nghĩa công nghiệp của tổ hợp FFmpeg và Whisper

  • Trong nhiều lĩnh vực như quản lý khối lượng lớn tài sản media, tạo phụ đề, lưu trữ dữ liệu video, tổ hợp FFmpeg + Whisper có ưu thế hiện thực hóa đồng thời hiệu quả chi phí và tự động hóa
  • Trước đây cần tích hợp các công cụ nhận dạng giọng nói mã nguồn mở riêng với FFmpeg, nhưng giờ đây có thể xử lý trực tiếp trong chính FFmpeg, nhờ đó đơn giản hóa workflow và kỳ vọng cải thiện tốc độ xử lý

Chi tiết kỹ thuật

  • FFmpeg đã bổ sung bộ lọc âm thanh thực hiện nhận dạng giọng nói tự động (ASR) ngay bên trong FFmpeg, dựa trên thư viện Whisper.cpp
  • Có thể kích hoạt bằng tùy chọn --enable-whisper, và bắt buộc phải chỉ định đường dẫn mô hình (model)
  • Các tùy chọn chính: thiết lập ngôn ngữ (language), có dùng GPU hay không (use_gpu), kích thước hàng đợi (queue), định dạng đầu ra (format: text/srt/json), thiết lập mô hình và ngưỡng VAD (phát hiện hoạt động giọng nói), v.v.
    • Nếu giá trị queue nhỏ thì tính thời gian thực cao hơn nhưng độ chính xác giảm và tải CPU tăng; nếu lớn thì độ chính xác cao hơn nhưng độ trễ tăng
    • Có thể lưu kết quả vào tệp đầu ra, URL hoặc metadata bằng tùy chọn destination, đồng thời hỗ trợ giao thức AVIO
  • Bao gồm các kịch bản ví dụ như tạo phụ đề SRT, gửi HTTP ở định dạng JSON, phiên âm thời gian thực từ đầu vào micro (dùng VAD)
    • Ví dụ tạo tệp phụ đề 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 -  
      

1 bình luận

 
GN⁺ 2025-08-14
Ý kiến Hacker News
  • Tôi đã trải nghiệm rằng Whisper thực sự là một công cụ đáng kinh ngạc; nếu đưa prompt phù hợp, nó có thể tạo ra cảm giác như cuộc sống thay đổi theo hướng tích cực
    Tôi muốn giới thiệu Subtitle Edit (ủng hộ nhà phát triển cũng rất ổn). Subtitle Edit là một giao diện rất phù hợp để thử nghiệm với Whisper. Nếu trước đây từng dùng Aegisub thì có thể xem Subtitle Edit như Aegisub 2.0
    HOWTO: kéo tệp video hoặc audio vào khung bên phải, rồi vào Video > Audio to text (Whisper). Tôi thường thấy Faster-Whisper-XXL cho hiệu năng tốt nhất. Nếu có thể thì nên dùng large-v2 (large-v3 ngược lại còn có một số regression). Không hoàn hảo, nhưng vẫn có thể sửa đủ tốt bằng các tính năng như Tools > Fix common errors của Subtitle Edit
    Nếu dùng card đồ họa Nvidia đời mới thì cần nhập --compute_type float32 mới có thể hoạt động bình thường. Nếu gặp lỗi, có thể cần cài lại thư viện torch từ chỉ mục cụ thể như lệnh bên dưới
    pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118  
    
    uv pip install --system torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118  
    
    Nếu xử lý được lỗi như vậy, hãy để lại bình luận về vấn đề và cách khắc phục để giúp người khác (và cũng hữu ích khi tìm kiếm trên web)
    Trang chủ Subtitle Edit
    Trang ủng hộ nhà phát triển Subtitle Edit
    Bản phát hành mới nhất của Subtitle Edit
    • Khi cài các gói liên quan đến torch bằng uv, nó sẽ tự động chọn phiên bản tensor phù hợp với driver cuda. Tuy vậy, nên dùng trong môi trường ảo (venv) thay vì Python hệ thống
      Có thể dùng lệnh sau để tự động chọn backend
      uv pip install torch torchvision torchaudio --torch-backend=auto
      Liên kết hướng dẫn chi tiết
      Các gói liên quan đến torch sẽ được tải từ torch index, còn phần còn lại từ PyPI nên không cần lo xung đột
    • Aegisub vẫn đang được phát triển thông qua fork. Hai phần mềm này có tính chất khác nhau nên khó so sánh trực tiếp, và có thể dùng bổ trợ cho nhau. Subtitle Edit phù hợp hơn nhiều cho công việc chép lời thực tế, còn Aegisub vẫn mạnh ở các tác vụ như typography
    • Subtitle Edit rất tuyệt, nhưng có thể bị ràng buộc bởi phần cứng (Python, Nvidia GPU, v.v.). Nếu không có GPU hoặc ngại cấu hình máy chủ, thì các API đơn giản và rẻ như lemonfox.ai cũng là một lựa chọn
    • Tôi tò mò không biết bạn có thể nêu ví dụ cụ thể về việc Whisper đã cải thiện cuộc sống của bạn đáng kể như thế nào không
    • Hiệu năng của Whisper rất tốt, nên tôi thắc mắc vì sao phụ đề tự động của YouTube vẫn chưa tốt. Ngay cả model nhỏ nhất của Whisper cũng tốt hơn giải pháp của Google; không biết là vì vấn đề giấy phép hay khó khăn khi triển khai ở quy mô lớn
  • Tôi hy vọng nếu transcription cục bộ được ứng dụng đa dạng hơn, các nhà làm video sẽ bớt nhúng cứng những phụ đề chớp nháy gây xao nhãng trực tiếp vào video
    Tôi từng thấy cả trong các video kỹ thuật được sản xuất chuyên nghiệp vẫn có phụ đề không cần thiết và không thể bỏ đi. Đây đâu phải video mèo, làm vậy là quá đà
    Nếu dùng transcription cục bộ thì có thể tự động dịch, đồng thời tránh trải nghiệm khó chịu khi phải hiển thị thêm một lớp phụ đề đè lên phụ đề đã bị đóng cứng sẵn
    • Có ý kiến chỉ ra rằng việc đưa phụ đề burn-in vào video chủ yếu nhằm tăng 'engagement' hơn là cải thiện trải nghiệm người dùng
    • Nếu phải so sánh, tôi thấy phụ đề theo chủ đề cho phần mở đầu anime do fan làm ngày xưa còn ngầu hơn nhiều so với kiểu phụ đề burn-in của video ngày nay
    • Cuối cùng thì ảnh hưởng của thuật toán mới là lớn nhất. Dù có phụ đề thời gian thực chính xác 100% trên mọi thiết bị, nếu video có hiệu suất tốt hơn thì người ta vẫn sẽ tiếp tục dùng phụ đề burn-in
    • Phụ đề burn-in có vấn đề là không thể đổi ngôn ngữ
    • Hiện tượng này một phần cũng do tính năng 'tự động phát không có âm thanh' của YouTube. Phụ đề đóng cứng giúp kéo người xem vào video
  • Whisper là model chép lời audio, nhưng tôi thắc mắc liệu nó có khả năng trong lúc nghe sẽ sửa lại phần trước đó về sau hay không
    Ví dụ như “I scream” và “Ice cream” phát âm giống nhau nhưng nghĩa hoàn toàn khác; tôi muốn biết liệu thông tin xuất hiện ở đoạn sau, dựa trên ngữ cảnh dài hơn, có thể khiến kết quả văn bản trước đó bị thay đổi hay không
    Tôi nghĩ đây là điều kiện cần để vừa có tính thời gian thực vừa đảm bảo độ chính xác. Thực tế tôi đã thấy transcription trên Android điều chỉnh văn bản từng lúc khi người ta đang nói
    • Tôi xin giới thiệu tiêu đề bài báo yêu thích nhất của mình
      "How to wreck a nice beach you sing calm incense"
      Liên kết bài báo
    • Tôi nghĩ những người làm phụ đề hay biên kịch hẳn luôn phải cân nhắc nên chuyển các câu mơ hồ có chủ ý, chơi chữ, hoặc lời thoại mà sự hiểu lầm là quan trọng với cốt truyện thành văn bản như thế nào. Việc diễn đạt cái mình nghe được và việc viết ra nguyên văn lời nói không giống nhau
      Tôi cũng tò mò liệu những người khiếm thính bẩm sinh có nghiên cứu riêng để hiểu/tạo ra các kiểu chơi chữ bằng âm thanh (ngôn ngữ, nhịp điệu, v.v.) hay không
      Nó giống như cảm giác xử lý toán học trừu tượng mà không có trải nghiệm cảm tính; dù vậy các nhà toán học cũng nói rằng từ cái trừu tượng của họ vẫn có thể tạo ra những hiện tượng mang tính trải nghiệm như âm nhạc, nên điều này cũng rất thú vị
    • Whisper hoạt động theo các chunk 30 giây. Nhờ cấu trúc mạng như vậy, nó có thể nhìn cả ngữ cảnh trước/sau rồi thay đổi kết quả. Nhưng vì thế cũng phát sinh rất nhiều hallucination
    • “I scream” có vẻ nhấn mạnh âm 'I' hơn so với “ice cream”. Nhưng tôi đồng ý rằng ngữ cảnh là rất cần thiết
    • Nếu tò mò về chủ đề này, tôi khuyên đọc giáo trình “Speech and Language Processing” của Stanford từ chương 16.3 trở đi
      Liên kết pdf tương ứng
      Tôi không hiểu quá rõ kiến trúc của Whisper, nhưng nhìn chung các model ASR để decoder hiểu ngữ cảnh sẽ tham chiếu cả âm thanh sau chunk hiện tại. Vì vậy chúng được hiệu chỉnh bằng language model để suy ra các dạng tự nhiên về ngữ pháp như “I like ice cream”
  • Nhân tiện, xin giới thiệu bài blog do tác giả của bản vá này viết
    Run Whisper audio transcriptions with one FFmpeg command
  • Tôi hy vọng đây sẽ là khởi đầu để FFmpeg có thêm nhiều filter dựa trên ML hơn nữa
    Trước đây từng có filter sr (super resolution) được thêm vào, nhưng đã cũ nên ngay cả việc lấy weights cũng phức tạp; nhiều hỗ trợ cho các thư viện ML khác nhau (libtorch, v.v.) cũng đã được thêm nhưng việc bắt đầu vẫn không hề dễ
    Sẽ tốt hơn nếu có thể gom các model sẵn sàng sử dụng vào thư mục “models”, rồi nhanh chóng dùng nhiều model khác nhau cho upscale, khử nhiễu, upscale theo chuỗi thời gian, v.v.
    Phần lớn nghiên cứu filter audio·video ngày nay đều dựa trên ML, và các codec mới sau này có lẽ cũng sẽ thiên về ML
  • Whisper được nói tới ở đây có đúng là model AI nhận dạng giọng nói do OpenAI tạo ra không?
    Xem giải thích trên Wikipedia về Whisper
    • Đúng vậy, và cũng có bản triển khai C++ là whisper.cpp trên GitHub
    • Đúng. Trích nguyên văn từ tài liệu

      It runs automatic speech recognition using the OpenAI's Whisper model.

    • Không hoàn toàn chỉ là một model, mà là một 'họ model chép lời audio' (nhiều phiên bản và dòng model khác nhau)
      Danh sách đầy đủ các model Whisper
  • Tôi hoàn toàn không biết gì về Whisper, nhưng muốn hỏi liệu nó có dùng cho dịch tự động không, đặc biệt là tiếng Nhật → tiếng Anh
    Tôi có một bộ phim Nhật rất cũ mà không có bản dịch tiếng Anh nên không xem được
    Trước đây tôi từng tìm dịch giả trên Fiverr, tính theo đơn giá chính thức thì lên tới vài nghìn đô, thương lượng xuống vài trăm đô nhưng cuối cùng họ mất liên lạc
    • Whisper chắc chắn có thể chép lời và dịch từ tiếng Nhật sang tiếng Anh
      Chất lượng tùy thuộc vào phương ngữ và chất lượng audio, còn model "large-v3" cho kết quả tốt nhất
      Có thể dùng tích hợp ffmpeg bằng lệnh như sau
      ffmpeg -i movie.mp4 -af whisper=model=large-v3:task=translate output.srt
    • Theo trải nghiệm của tôi thì nhìn chung là dùng được
      Model “English” thực ra vẫn hỗ trợ nhiều ngôn ngữ và dịch thẳng sang tiếng Anh
      Ngoài ra cũng có thể chép lời bằng tiếng Nhật trước rồi dùng công cụ dịch khác để chuyển sang tiếng Anh. Nếu hội thoại phức tạp về mặt ngữ nghĩa thì cách này đôi khi còn tốt hơn
      Ví dụ)
      Dịch trực tiếp:
      faster-whisper-xxl.exe --language English --model large-v2 --ff_vocal_extract mdx_kim2 --vad_method pyannote_v3 --standard   
      
      Tiếng Nhật → tiếng Anh:
      faster-whisper-xxl.exe --language Japanese --task translate --model large-v2 --ff_vocal_extract mdx_kim2 --vad_method pyannote_v3 --standard   
      
      Liên kết tham khảo whisper-standalone-win
    • Theo trải nghiệm của tôi thì transcription đã thất bại hoàn toàn
      Nó thường tạo ra nội dung không hề có trong audio, và nếu trong video trộn nhiều ngôn ngữ thì nó sẽ rối hoàn toàn
      Nó không hiểu ngữ cảnh chút nào, nên thường thấy các lỗi giống như dịch tự động trên YouTube
    • Có thể dùng Whisper để tạo phụ đề và dịch video tiếng Nhật, nhưng chỉ sang tiếng Anh
      Hiệu năng tốt nhất đạt được khi dùng model lớn nhất, nhưng tốc độ sẽ khác nhau tùy phần cứng
      Một cách khác là dùng kiểu VideoToTextAI để trích xuất phụ đề → dịch sang hơn 100 ngôn ngữ → lưu thành tệp SRT
    • Hallucination của Whisper là một vấn đề nghiêm trọng
      Nó thường ngẫu nhiên thêm vào những câu không tồn tại
      Dùng cho phân loại lớp thì ổn, nhưng với transcription phụ đề thì vẫn còn thiếu
  • Tôi tò mò liệu speech API sắp ra mắt của Apple có thể được thêm vào ffmpeg không
    Nếu có thể chạy ngay trên Mac mà không cần tự tìm model thì sẽ rất hay
    Tài liệu SpeechTranscriber
    Tài liệu SpeechAnalyzer
    Bài đánh giá thực tế và so sánh với Whisper
  • Vấn đề duy nhất của PR/bản vá này là nó chỉ cung cấp avfilter wrapper cho thư viện whisper.cpp, còn người dùng phải tự quản lý dependency
    Tức là,
    1. git clone whisper.cpp
    2. cài dependency của thư viện đó
    3. build thành công
    4. tải model thực tế
    Chỉ sau đó mới có thể dùng filter -af "whisper=model...
    Nếu không làm sẵn các bước chuẩn bị thì sẽ thất bại, và đây sẽ là nguồn gây nản lòng lớn cho người mới bắt đầu
    Tôi nghĩ hiệu quả hơn là làm Whisper avfilter theo kiểu native, chỉ cần tải model thôi; như vậy số người dùng thực tế cũng sẽ tăng lên rất nhiều
    • Với người dùng cuối thì chắc chắn tốt hơn, nhưng về phía FFmpeg sẽ khó ở khía cạnh bảo trì
      Cần tính đến tốc độ thay đổi của dự án whisper-cpp
      Với các trường hợp như những filter khác (vmaf, v.v.) cần build dependency và tải model, có lẽ sớm muộn cũng sẽ có precompiled binary cho người mới bắt đầu (whisper-cpp cũng dùng giấy phép MIT)
  • Tôi đang dùng FFmpeg và Whisper để ghi âm, chép lời theo thời gian thực luồng audio máy quét cảnh sát của thành phố tôi, rồi cập nhật ngay lên website
    Có lỗi và hallucination, nhưng nhìn chung hoạt động đủ tốt cho nhu cầu của tôi
    • Nếu website đó đang công khai thì tôi rất muốn xem
    • Tôi từng muốn áp dụng tính năng này cho các cuộc họp hội đồng quận ở địa phương
      Trong những tình huống như vậy, nhận diện người nói (speaker recognition) có lẽ đặc biệt quan trọng