Lập chỉ mục 669GB video GoPro bằng máy tính M1 Max và mô hình ML cục bộ
(iliashaddad.com)- Để tìm đúng khoảnh khắc mong muốn trong 2.207 video đạp xe GoPro mà không phải xem lại từng video, tác giả lập chỉ mục và tìm kiếm video bằng mô hình ML cục bộ, rồi gửi thẳng các clip tốt nhất vào timeline DaVinci Resolve
- Sử dụng phiên bản ứng dụng desktop được tối ưu cho Apple Silicon như M1 Max, có thể yêu cầu tác nhân hội thoại tìm cảnh mong muốn và chuyển trực tiếp sang timeline biên tập
- Xây dựng pipeline lập chỉ mục gồm phiên âm OpenAI Whisper, phân tích khung hình (nhận diện khuôn mặt, phát hiện đối tượng, văn bản trên màn hình, mô tả cảnh) và embedding vào vector DB
- Việc lập chỉ mục 628 video (668,68GB, 15 giờ 13 phút 18 giây) tiêu tốn tổng cộng 67 giờ 40 phút 42 giây tính toán, chậm hơn phát lại khoảng 4,4 lần
- Toàn bộ xử lý diễn ra trên GPU/CPU cục bộ nên có thể tìm kiếm thư viện video lớn không cần cloud, và dự án hiện vẫn đang được phát triển
Tổng quan dự án và động lực
- Tác giả đang lưu 2.207 video GoPro quay trong các chuyến đi xe đạp trên một SSD và muốn tìm kiếm những khoảnh khắc ấn tượng trong đó, nhưng không có thời gian xem lại toàn bộ
- Hầu hết mọi khoảnh khắc đều được quay bằng GoPro, nhưng để tìm được đoạn hay thì phải xem hết video, rất kém hiệu quả
- Lịch sử đạp xe: 2024 Casablanca→Imsouane (5 ngày, hơn 470KM), 2023 Kenitra→Tangier (1 ngày rưỡi, 220KM), cùng các chuyến mountain bike ở giữa
- Để giải quyết vấn đề này, tác giả tự xây dựng dự án edit-mind
- GitHub Repo: https://github.com/IliasHad/edit-mind
Vì sao dùng ứng dụng desktop
- Chọn phiên bản ứng dụng desktop tối ưu cho Apple Silicon, cho phép dùng tác nhân hội thoại để tìm khoảnh khắc mong muốn và gửi trực tiếp sang timeline biên tập DaVinci Resolve
- Phiên bản Docker không thể truy cập GPU của M1 Max, nên không tận dụng được hiệu năng GPU
- Ứng dụng desktop sử dụng quy trình lập chỉ mục tương tự bản source-available
Quy trình lập chỉ mục
- Khi chọn thư mục trong ứng dụng desktop, hệ thống chỉ quét các video bắt đầu bằng
GXđể phân biệt với video quay từ điện thoại - Nếu có audio track, toàn bộ video sẽ được phiên âm bằng mô hình OpenAI Whisper
- Sau đó chạy pipeline phân tích khung hình, chia video thành các cảnh riêng lẻ theo từng giây (1fps)
- Bao gồm plugin nhận diện khuôn mặt dùng dữ liệu khuôn mặt tùy chỉnh, phát hiện đối tượng, văn bản trong khung hình, kiểu shot và mô tả cảnh
- Dữ liệu khuôn mặt, bản phiên âm và mô tả của cảnh được embedding thành văn bản tài liệu và lưu vào vector DB cục bộ
- Các frame của cảnh được embedding vào bộ sưu tập vector DB embedding thị giác để tìm kiếm hình ảnh, còn audio của cảnh cũng được xử lý tương tự
- Cuối cùng thu được 3 bộ sưu tập vector DB chứa thông tin video
- Bao gồm metadata vị trí, tên camera, khuôn mặt được nhận diện, đối tượng được phát hiện, văn bản trên màn hình, bản phiên âm, mô tả từng cảnh, v.v.
Chỉ số hiệu năng
- Đây là số đo của video được lập chỉ mục bằng GPU và CPU của thiết bị, và vì dự án vẫn đang phát triển nên chưa phải con số cuối cùng
-
Chỉ số tổng thể
- Video đã lập chỉ mục: 628
- Tổng dung lượng video: 668,68 GB
- Tổng thời lượng video: 15 giờ 13 phút 18 giây
- Tổng thời gian tính toán: 67 giờ 40 phút 42 giây
- Tốc độ so với phát lại: 0,22x, tức chậm hơn phát lại khoảng 4,4 lần
- Số frame đã phân tích: 57.537
-
Phân tích theo từng bước (tổng thời gian / trung bình mỗi video / tỷ trọng tính toán)
- Phiên âm (Transcription): 25 giờ 12 phút 54 giây / 2 phút 25 giây / 37,3%
- Phân tích khung hình (Frame analysis): 24 giờ 55 phút 42 giây / 2 phút 23 giây / 36,8%
- Tạo cảnh (Scene creation): 48 phút 0 giây / 5 giây / 1,2%
- Embedding văn bản (Text embedding): 36 phút 42 giây / 5 giây / 0,9%
- Embedding thị giác (Visual embedding): 11 giờ 49 phút 17 giây / 1 phút 9 giây / 17,5%
- Embedding âm thanh (Audio embedding): 4 giờ 18 phút 7 giây / 27 giây / 6,4%
Tính năng tìm kiếm
- Tác giả thích cách đặt câu hỏi về video qua chat assistant, và có tùy chọn gửi ngay kết quả sang timeline biên tập DaVinci Resolve
- Khi dùng mô hình Qwen2.5-VL-7B-Instruct trong chế độ lập chỉ mục nâng cao, có thể thu được dữ liệu lập chỉ mục hiểu và mô tả video tốt hơn, nhưng tốc độ lập chỉ mục sẽ chậm hơn
- Theo cách này, tác giả lập chỉ mục video GoPro, tìm kiếm và chuyển các cảnh mong muốn để dựng thành video từ những clip hay
So sánh phần cứng và tình trạng phát triển
- Khi chạy trên GPU NVIDIA như RTX 3060 (12GB VRAM) thì nhanh hơn M1 Max
- Dự án vẫn đang được phát triển, và công việc cải thiện để tối ưu độ chính xác lẫn tốc độ vẫn đang tiếp tục
Ví dụ prompt sử dụng
- "Tìm tất cả các clip có tiếng chó sủa khi tôi đang đạp xe"
- "Tạo một highlight reel từ những khoảnh khắc đẹp nhất và thú vị nhất trong chuyến du lịch bằng xe đạp"
- "Cho tôi xem những khoảnh khắc đạp xe góc nhìn thứ nhất nhanh nhất có nghe thấy tiếng gió và gửi sang DaVinci Resolve, loại bỏ các cảnh trùng lặp"
1 bình luận
Ý kiến Hacker News
Thú vị là vài ngày trước tôi đã làm việc tương tự trên gần như đúng cùng một cỗ máy với kỹ thuật tương tự, và bài đó cũng đã lên trang nhất HN
https://news.ycombinator.com/item?id=48222733
https://blog.simbastack.com/indexed-a-year-of-video-locally/
Tôi chưa biết dự án này, nhưng thấy khá thú vị
Tôi đang thử thêm nhiều tính năng liên quan đến ảnh vào Framedex, và đúng là đây là thời điểm rất hào hứng vì ngày càng có nhiều việc có thể làm cục bộ
Cả bài viết lẫn dự án đều hay, và mô hình cục bộ đang ngày càng tốt hơn
Có vẻ những việc như thế này sẽ được làm bằng LLM cục bộ
Chạy các LLM nhanh, nhỏ nhưng mạnh trên máy cục bộ để lập chỉ mục dữ liệu cá nhân như ảnh, video, tài liệu, rồi làm giàu và gắn thẻ bằng metadata đã được làm giàu
Nếu muốn gom theo từng người thì chỉ cần tìm trong metadata đã gắn thẻ rồi nhóm lại, nếu muốn tìm ảnh bằng mô tả thì cũng dùng metadata đã gắn thẻ, và nếu muốn sắp xếp bất cứ thứ gì thì cũng dùng metadata đã gắn thẻ
Hy vọng việc này sẽ chấm dứt mớ hỗn độn trong khâu tổ chức file
Nhìn câu “chạy pipeline phân tích khung hình sẽ chia video thành các cảnh riêng (mỗi 1 giây hoặc 1fps)” và “57.537 khung hình đã phân tích” thì thấy hợp lý hơn nhiều
Con số này nghe thực tế hơn rất nhiều so với “669GB”, và tổng dung lượng thực tế của toàn bộ khung hình đã xử lý có lẽ chỉ khoảng 10~30GB
Ý tôi không phải chê bai công việc này, chỉ là khi tự làm ở nhà thì luôn phải tính đến tính thực dụng
Nếu “tổng thời gian tính toán là 67 giờ 40 phút 42 giây” thì tôi cũng tò mò không biết có lựa chọn trả phí nào để làm quy trình này nhanh hơn không. Chỉ cần dựng một GPU instance là được à?
Theo hiểu biết của tôi thì không cần giữ toàn bộ chất lượng gốc để có kết quả chính xác, và thử nghiệm cũng cho ra như vậy
Từ trước tới nay thì GPU NVIDIA như RTX 3060 với 12GB VRAM vẫn nhanh hơn M1 Max khá nhiều, và tôi vẫn đang tiếp tục tối ưu cả tốc độ lẫn độ chính xác
Tính năng khiến tôi thấy thích hơn dự kiến là Google Photos và Apple Photos gửi ảnh kỷ niệm và bộ sưu tập về nhiều khoảnh khắc trong cuộc sống của tôi và các con suốt 10 năm qua
Tôi khá lạc quan về việc quay nhiều video hơn cho bọn trẻ, vì sau này AI chắc sẽ ngày càng dễ biến chúng thành các video tổng hợp ngắn, đẹp mắt
Tôi đã thử một thí nghiệm nhỏ tạo video kiểu tổng kết cuối năm như Spotify Wrapped, và video xem trước ở đây https://github.com/IliasHad/edit-mind/tree/expirement/year-i...
Vài năm nữa có khi bạn sẽ nhận kiểu “Hãy xem mẫu xe đạp giá rẻ mới nhất của BIKE BRAND, bạn còn nhớ hồi trước từng đi xe đạp BIKE BRAND chứ”
DaVinci 21 có sẵn tính năng lập chỉ mục tên là AI IntelliSearch
Không phải để hạ thấp công việc này, nhưng giờ đây nó đã là tính năng dành cho khá nhiều người dùng. Vì trong tên có AI nên có lẽ chỉ dành cho người dùng Studio
Nhưng tôi tò mò không biết nó có tải video lên cloud hay xử lý cục bộ
Và cũng muốn biết liệu có thể cung cấp dữ liệu khuôn mặt tùy chỉnh để hỗ trợ việc gắn nhãn khuôn mặt trong video hay không
Có vẻ Adobe Premiere Pro cũng có tính năng tương tự, nhưng theo tôi biết thì là xử lý trên cloud
Làm rất tốt
Tôi chưa thực sự hiểu cách tạo reel thông qua agent
Có phải kiểu gọi công cụ AI để nhận link ảnh rồi dựng reel bằng một công cụ chỉnh sửa video nào đó không? Hay là cắt nối phần trước và sau các mốc thời gian được trả về từ chỉ mục cho một truy vấn cụ thể?
Khi bạn yêu cầu agent, mô hình Ollama sẽ hiểu yêu cầu và dùng các công cụ tìm kiếm sẵn có. Có thể tìm theo bản chép lời, khuôn mặt, thông tin hình ảnh, âm thanh hoặc kết hợp nhiều yếu tố
Nó khá giống cách Claude hay ChatGPT dùng công cụ tìm kiếm web để tìm thông tin trực tuyến
Sau đó tôi dùng Ollama để lọc các cảnh video nhằm hiển thị những cảnh chính xác hơn và ít trùng lặp hơn, rồi gửi kết quả đó tới API của DaVinci Resolve để tạo một timeline từ các clip video
Có chạy được với bộ sưu tập phim khiêu dâm không?
Hoặc sẽ cần mô hình bỏ kiểm duyệt, nhưng tôi không biết bên thị giác máy tính có làm được vậy không
Bạn cũng có thể muốn thêm fine-tuning YOLO để phát hiện cảnh và nhận diện khuôn mặt
Khi tôi đăng dự án lên Reddit cũng nhận đúng câu hỏi đó
Vì DeepSeek chạy cục bộ, liệu nó có hữu ích cho mục đích này không?
Tôi ngạc nhiên khi biết CPU M1 Max là ARM/SoC mà lại có thể đem ra so với Intel i9 thế hệ 11
Tôi hiểu vậy có đúng không? Windows ARM trên những CPU kiểu này cũng sẽ có hiệu năng tương tự chứ?
Tham khảo: https://www.cpubenchmark.net/compare/4585vs4245/Apple-M1-Max...
Nhờ bộ nhớ “hợp nhất”, toàn bộ bộ nhớ hệ thống có thể được dùng như VRAM, và còn có bộ tăng tốc AI chuyên dụng tích hợp
Chính hai điểm này khiến chip Apple Silicon có thể vượt xa CPU thông thường trong các khối lượng công việc mô hình AI như thế này
Tôi không rõ phía Windows ARM làm được đến đâu, nhưng tôi biết họ dùng chip Qualcomm Snapdragon
M1 Max có băng thông bộ nhớ 400GB/s, còn Snapdragon X2 Elite đầu bảng mới nhất cũng chỉ 228GB/s
Nhờ bus rộng hơn và độ trễ thấp hơn nên gần như không cùng đẳng cấp
Tôi vẫn chưa thử dự án này trên máy Windows hay cấu hình kiểu như vậy
https://archive.is/O6CLQ
Tôi định đọc bài, nhưng tiếc là website chính đang báo lỗi Cloudflare
Link đây https://iliashaddad.com/blog/i-indexed-669-gb-of-my-gopro-vi...