Bối cảnh và vấn đề nghiên cứu
Sự phát triển của mạng Internet và các nền tảng mạng xã hội, đặc biệt là giai đoạn sau các đợt bùng phát dịch COVID-19 vào nửa cuối năm 2021, đã thúc đẩy mạnh mẽ nhu cầu kết nối và tiêu thụ nội dung số. Trong số các định dạng truyền thông, video ngắn ghi nhận sự tăng trưởng rõ nét. Dữ liệu từ báo cáo của ICTNews được tác giả trích dẫn cho thấy tỷ lệ người dùng tiếp cận ứng dụng TikTok đã tăng từ 34% (năm 2020) lên 53% (năm 2021), cùng với đó thời lượng sử dụng ứng dụng cũng tăng gấp đôi từ 4% lên 8% trong năm 2021. Trước xu thế này, các tập đoàn công nghệ lớn như Meta và Alphabet đã lần lượt tích hợp các tính năng video ngắn như Facebook Reels và YouTube Shorts vào hệ sinh thái của mình.
Nhận thấy sự gia tăng về nhu cầu sản xuất nội dung video nhưng thay vì xây dựng một mạng xã hội cạnh tranh trực tiếp, đề tài hướng đến việc phát triển một công cụ hỗ trợ: xây dựng ứng dụng web chỉnh sửa video phục vụ nhóm người dùng mới bắt đầu với thao tác tối giản.
Nhiệm vụ nghiên cứu của đồ án bao gồm 5 nội dung chính:
- Tìm hiểu các tác vụ cơ bản trong quy trình chỉnh sửa video.
- Tìm hiểu về các giới hạn của ứng dụng web khi thực hiện việc chỉnh sửa video.
- Tìm hiểu và thiết kế giao diện ứng dụng web bằng framework Angular.
- Tìm hiểu về các công cụ cho phép can thiệp và thao tác lên dữ liệu video (tập trung vào FFmpeg).
- Tìm hiểu giới hạn và xây dựng hệ thống kết xuất (rendering) video bằng môi trường NodeJS.
Đối tượng sử dụng của hệ thống được xác định gồm ba nhóm chính:
- Người dùng mới bắt đầu làm quen với công việc chỉnh sửa video.
- Người dùng có nhu cầu cắt ghép video đơn giản nhưng thiết bị cá nhân bị giới hạn về hiệu năng phần cứng.
- Người dùng không chuyên, không có nhu cầu sử dụng các phần mềm xử lý chuyên sâu phức tạp.
Phạm vi nghiên cứu của đề tài tập trung vào việc hiện thực hóa các chức năng chỉnh sửa video thiết yếu trên trình duyệt web, bao gồm: cắt đoạn video (trim), ghép nối các đoạn video (merge), thay đổi kích thước và tỷ lệ khung hình, điều chỉnh tốc độ phát lại, thay đổi định dạng mở rộng của tệp và áp dụng bộ lọc màu cơ bản theo vòng tròn màu HUE. Hệ thống được triển khai theo mô hình Client - Server, sử dụng máy chủ trung gian để xử lý kết xuất thay vì thực thi toàn bộ trên thiết bị của người dùng cuối. Đồ án được hoàn thành vào tháng 6 năm 2023 tại Trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh.
Cơ sở lý thuyết và phương pháp
Khóa luận xây dựng hệ thống dựa trên nền tảng kiến trúc web hiện đại kết hợp với bộ công cụ xử lý đa phương tiện mã nguồn mở.
Khung công nghệ và công cụ sử dụng
Hệ thống được tổ chức theo mô hình tách biệt giữa giao diện phía máy khách (Front-end) và hệ thống xử lý phía máy chủ (Back-end):
- Phía máy chủ (Back-end): Sử dụng môi trường thực thi NodeJS và framework ExpressJS. NodeJS cung cấp mô hình xử lý bất đồng bộ theo cơ chế hướng sự kiện, cho phép tiếp nhận nhiều yêu cầu đồng thời và đồng bộ ngôn ngữ lập trình JavaScript/TypeScript trên toàn bộ dự án. Điểm hạn chế được tác giả chỉ ra là khả năng xử lý các tác vụ nặng đòi hỏi tính toán CPU cao của JavaScript đơn luồng và nguy cơ gặp lỗi callback hell khi cấu trúc mã nguồn phức tạp.
- Phía máy khách (Front-end): Sử dụng Angular 14 kết hợp ngôn ngữ TypeScript. Framework này tổ chức ứng dụng trang đơn (Single-Page Application - SPA) theo cấu trúc mô-đun hóa, phân tách rõ ràng giữa các tệp logic (TS), giao diện (HTML) và định kiểu (CSS).
- Bộ công cụ xử lý video: Phần mềm mã nguồn mở FFmpeg (phát triển từ năm 2000) được sử dụng làm lõi xử lý đa phương tiện. FFmpeg hỗ trợ các tác vụ cắt, ghép, co giãn (scaling), nén (compress), lọc (filtering) với tốc độ mã hóa và giải mã nhanh. Hạn chế của FFmpeg là không có giao diện đồ họa (UI), toàn bộ thao tác phải thông qua các câu lệnh dòng lệnh (command prompt).
- Môi trường phát triển: Sử dụng trình soạn thảo mã nguồn Visual Studio Code trên nền tảng hệ điều hành máy tính để xây dựng và quản lý mã nguồn.
Danh mục thư viện phần mềm
| STT |
Tên thư viện / Gói phụ thuộc |
Vị trí sử dụng |
Chức năng và mục đích áp dụng trong hệ thống |
| 1 |
Express |
Back-end |
Framework nhẹ hỗ trợ xây dựng các điểm cuối (endpoint API) và quản lý middleware. |
| 2 |
Nodemon |
Back-end |
Hỗ trợ tự động khởi động lại tiến trình server khi mã nguồn thay đổi trong quá trình phát triển. |
| 3 |
Body-parser |
Back-end |
Middleware xử lý và chuẩn hóa dữ liệu gửi qua phần thân (body) của HTTP request. |
| 4 |
Cors |
Back-end |
Quản lý chia sẻ tài nguyên chéo nguồn, cho phép client và server giao tiếp an toàn. |
| 5 |
Dotenv |
Back-end |
Quản lý và tải các biến môi trường cấu hình hệ thống từ tệp .env. |
| 6 |
Multer |
Back-end |
Middleware xử lý dữ liệu biểu mẫu đa phần (multipart/form-data) để tải tệp video lên máy chủ. |
| 7 |
Short unique id |
Back-end |
Sinh chuỗi định danh duy nhất ngắn cho các thư mục phiên làm việc (Session Folder). |
| 8 |
Nodemailer |
Back-end |
Tự động gửi thư điện tử chứa đường dẫn liên kết tải video đến hòm thư của người dùng. |
| 9 |
Cloudinary |
Back-end |
Tích hợp giao diện lưu trữ tệp đa phương tiện trên nền tảng đám mây Cloudinary. |
| 10 |
Json web token (JWT) |
Back-end |
Tạo và kiểm tra mã xác thực danh tính phiên người dùng có gắn thời hạn hiệu lực. |
| 11 |
Bcript (bcrypt) |
Back-end |
Băm chuỗi mã xác thực mật khẩu một lần (OTP) trước khi lưu vào cơ sở dữ liệu. |
| 12 |
Mysql |
Back-end |
Thư viện kết nối và thực thi các câu truy vấn tới hệ quản trị cơ sở dữ liệu MySQL. |
| 13 |
Node-cmd |
Back-end |
Hỗ trợ máy chủ NodeJS thực thi trực tiếp các câu lệnh dòng lệnh gọi chương trình FFmpeg. |
| 14 |
Angular 14 Framework pack |
Front-end |
Cung cấp hệ thống định tuyến, quản lý trạng thái và gói hoạt ảnh (animation) cho giao diện. |
| 15 |
File saver |
Front-end |
Hỗ trợ lưu trữ và tự động tải tệp kết quả từ máy chủ về máy khách. |
| 16 |
Angular2 uuid |
Front-end |
Sinh chuỗi định danh duy nhất hỗ trợ quản lý các đối tượng phân đoạn trong mảng dữ liệu. |
Phương pháp nghiên cứu
Tác giả kết hợp các phương pháp sau:
- Phương pháp phân tích lý thuyết: Nghiên cứu tài liệu kỹ thuật về kiến trúc Web Application, cơ chế tương tác HTTP/REST API giữa Angular và NodeJS, cơ chế hoạt động của FFmpeg.
- Phương pháp khảo sát và đối chuẩn: Khảo sát thực tế hai ứng dụng biên tập video tiêu biểu gồm nền tảng web Clipchamp (thuộc Microsoft) và phần mềm chuyên nghiệp DaVinci Resolve 18 (thuộc Blackmagic Design). Việc phân tích ưu nhược điểm của hai ứng dụng này cung cấp cơ sở để thiết kế quy trình biên tập và bố cục giao diện phù hợp với trình duyệt.
- Phương pháp mô hình hóa hướng đối tượng: Sử dụng hệ thống biểu đồ UML gồm sơ đồ lớp (Class Diagram), sơ đồ ca sử dụng (Use Case Diagram), sơ đồ tuần tự (Sequence Diagram), sơ đồ hoạt động (Activity Diagram) và sơ đồ thực thể mối quan hệ (ERD).
- Phương pháp kiểm thử phần mềm: Áp dụng phương pháp kiểm thử chức năng (Functional Testing) theo phương pháp hộp đen để xác thực từng luồng nghiệp vụ của hệ thống.
Thiết kế và triển khai hệ thống
Kiến trúc và luồng dữ liệu
Hệ thống hoạt động dựa trên cơ chế phân chia nhiệm vụ giữa máy khách và máy chủ:
- Phía máy khách (Angular): Người dùng tải video từ máy tính cá nhân lên trình duyệt. Giao diện cho phép xem trước, định vị các điểm cắt (start/end), sắp xếp lại thứ tự các phân đoạn video trên trục thời gian ảo, lựa chọn bộ lọc màu sắc (thông qua mô phỏng CSS/Canvas trên trình duyệt) và thiết lập tốc độ hoặc kích thước khung hình.
- Giao tiếp dữ liệu: Sau khi hoàn thành việc chỉnh sửa trực quan, client gửi một bản mô tả thông số (Render Request) kèm theo tệp video (hoặc định danh video) lên máy chủ qua HTTP POST.
- Phía máy chủ (NodeJS): Máy chủ tạo một thư mục làm việc riêng biệt (Session Folder) dựa trên mã
Short unique id. Sử dụng thư viện node-cmd, máy chủ phát lệnh thực thi FFmpeg để tiến hành cắt các đoạn video độc lập, ghép nối từng cặp video tuần tự, chuyển đổi tỷ lệ khung hình, thay đổi tốc độ hoặc áp dụng bộ lọc màu LUT theo thông số được gửi lên.
- Lưu trữ và phân phối: Video thành phẩm được đẩy lên dịch vụ lưu trữ đám mây Cloudinary. Máy chủ cập nhật đường dẫn vào cơ sở dữ liệu MySQL, đồng thời sử dụng thư viện
Nodemailer gửi liên kết truy cập video hoàn chỉnh về hòm thư của người dùng. Hệ thống có tiến trình định kỳ kiểm tra và xóa các thư mục phiên làm việc có thời gian tồn đọng vượt quá 7 ngày nhằm giải phóng dung lượng đĩa cứng trên máy chủ.
Phân tích ca sử dụng (Use Case)
Tài liệu phân loại 24 ca sử dụng thành ba nhóm tác nhân chính:
- Tác nhân Khách (Guest): Bao gồm UC_1 (Đăng ký tài khoản) và UC_2 (Đăng nhập vào hệ thống thông qua mã xác thực một lần OTP gửi qua email).
- Tác nhân Người dùng (User): Bao gồm UC_3 (Tải video từ ổ đĩa), UC_4 (Tạo điểm cắt video), UC_5 (Xóa điểm đánh dấu cắt), UC_6 (Xem trước video), UC_7 (Tạo vùng lặp lại), UC_8 (Điều khiển phát/dừng video), UC_9 (Sắp xếp thứ tự các đoạn video), UC_10 (Tạo bộ lọc màu LUT qua vòng tròn HUE), UC_11 (Yêu cầu tăng tốc video), UC_12 (Yêu cầu giảm độ phân giải), UC_13 (Gửi yêu cầu render), UC_14 (Đăng xuất), UC_15 (Quản lý danh sách dự án video đã thực hiện).
- Tác nhân Máy chủ / Hệ thống (Server): Bao gồm UC_16 (Cắt video theo tọa độ thời gian), UC_17 (Ghép nối các video theo cặp), UC_18 (Tiếp nhận và lưu trữ video từ client), UC_19 (Xử lý tăng tốc video), UC_20 (Thực thi chuỗi xử lý render video), UC_21 (Xóa dữ liệu cũ quá 7 ngày), UC_22 (Áp dụng bộ lọc màu LUT lên video), UC_23 (Tải video lên kho lưu trữ đám mây Cloudinary), UC_24 (Gửi thư điện tử chứa đường dẫn video cho người dùng).
Thiết kế cơ sở dữ liệu
Hệ thống sử dụng cơ sở dữ liệu quan hệ MySQL gồm 2 bảng dữ liệu chính để quản trị danh tính người dùng và thông tin phiên xử lý:
| Tên bảng |
Tên trường (Thuộc tính) |
Kiểu dữ liệu |
Vai trò khóa |
Mục đích sử dụng |
| Users |
Email |
Varchar |
Khóa chính (PK) |
Định danh tài khoản duy nhất cho mỗi người dùng trong hệ thống. |
|
Nickname |
Varchar |
|
Lưu trữ tên hiển thị của người dùng. |
|
OTP |
Varchar |
|
Lưu chuỗi mã mật khẩu một lần đã được băm; bị xóa sau khi đăng nhập thành công. |
|
Token |
Varchar |
|
Lưu trữ mã JSON Web Token cấp cho phiên đăng nhập hiện hành. |
|
expiredDate |
Date |
|
Ghi nhận thời điểm hết hạn phiên đăng nhập của người dùng. |
|
confirmEmail |
Varchar |
|
Lưu trạng thái xác thực hòm thư sau khi đăng ký thành viên. |
| Project_data |
video_id |
Varchar |
Khóa chính (PK) |
Chuỗi định danh duy nhất cho mỗi yêu cầu xử lý video. |
|
email |
Varchar |
Khóa ngoại (FK) |
Tham chiếu tới trường Email của bảng Users để xác định chủ sở hữu dự án. |
|
project_name |
Varchar |
|
Tên gợi nhớ của dự án video do người dùng đặt. |
|
video_status |
Tinyint |
|
Biểu diễn trạng thái xử lý của tệp video (đang xử lý hoặc đã hoàn thành). |
|
video_link |
Varchar |
|
Lưu trữ địa chỉ URL dẫn đến tệp video kết quả trên hệ thống Cloudinary. |
Kiểm thử hệ thống
Tác giả thiết lập các kịch bản kiểm thử hộp đen cho bốn chức năng cốt lõi của ứng dụng:
- Kiểm thử chức năng đăng nhập (Login - Bảng 31): Kiểm tra các trường hợp nhập email hợp lệ, email chưa đăng ký và nhập sai mã xác thực OTP. Kết quả hệ thống thông báo lỗi tương ứng khi sai dữ liệu và chỉ điều hướng về Dashboard khi nhập đúng OTP.
- Kiểm thử chức năng đăng ký (Sign Up - Bảng 32): Kiểm tra trường hợp nhập thiếu thông tin, định dạng email sai tiêu chuẩn, và trường hợp nhập đúng. Khi đăng ký thành công, hệ thống gửi thư xác thực về email người dùng.
- Kiểm thử chức năng tải lên (Upload Video - Bảng 33): Kiểm thử việc chọn tệp video từ bộ nhớ cục bộ, hệ thống tải tệp thành công, tạo thư mục phiên làm việc tại máy chủ và hiển thị giao diện xem trước kèm thanh điều khiển.
- Kiểm thử chức năng gửi yêu cầu và kết xuất (Render Video - Bảng 34): Thực hiện kiểm thử quy trình toàn vẹn từ việc đặt điểm cắt, gộp đoạn, chọn tỷ lệ khung hình, tốc độ và gửi lệnh render. Kết quả trả về giao diện chờ (loading), video hoàn thiện được đẩy lên Cloudinary và đường dẫn liên kết được gửi thành công đến hòm thư điện tử.
Nội dung chính theo từng chương
Chương 1. Tổng quan về đề tài
Chương mở đầu phân tích bối cảnh phát triển của nội dung video ngắn trên không gian mạng, sử dụng các số liệu thống kê về TikTok giai đoạn 2020–2021 và động thái triển khai Reels của Meta, Shorts của Alphabet. Tác giả nêu rõ lý do chọn đề tài là xây dựng một công cụ hỗ trợ biên tập video đơn giản trên web thay vì tạo lập mạng xã hội mới. Chương này cũng trình bày sơ bộ về việc lựa chọn công nghệ chủ đạo (Angular, NodeJS, ExpressJS, FFmpeg), xác định mục tiêu xây dựng một ứng dụng web dễ sử dụng và phương pháp tiếp cận nghiên cứu.
Chương 2. Cơ sở lý thuyết
Chương này đi sâu vào cơ sở kỹ thuật của ba thành phần cốt lõi:
- Phân tích chi tiết về NodeJS: cơ chế JavaScript Runtime xây dựng trên C++, ưu điểm về tính bất đồng bộ và hệ sinh thái thư viện npm, đi kèm các hạn chế về tác vụ nặng CPU và callback hell. Liệt kê và giải thích vai trò của 13 thư viện back-end (Bảng 1).
- Phân tích chi tiết về Angular 14: ưu điểm của ngôn ngữ TypeScript, kiến trúc component và SPA, nhược điểm về độ trễ cập nhật cú pháp mới từ JavaScript. Liệt kê 3 thư viện front-end chủ đạo (Bảng 2).
- Giới thiệu bộ công cụ FFmpeg: lịch sử 21 năm hình thành, các tính năng nén, chuyển mã, áp bộ lọc, ưu điểm mã nguồn mở và hiệu năng cao, cùng nhược điểm thiếu giao diện đồ họa người dùng.
Chương 3. Khảo sát hiện trạng và xác định yêu cầu
Chương 3 trình bày kết quả khảo sát thực tế đối với hai phần mềm đại diện:
- Dịch vụ web Clipchamp của Microsoft: Đánh giá giao diện kết hợp giữa Windows 11 và Material Design, tính tiện lợi của các mẫu dựng sẵn, cùng việc được tích hợp sẵn trên hệ điều hành Windows 11.
- Phần mềm máy tính DaVinci Resolve 18 của Blackmagic Design: Đánh giá bộ công cụ biên tập chuyên nghiệp, khả năng cân chỉnh màu sắc chuyên sâu và chính sách phát hành phiên bản miễn phí của nhà sản xuất.
Từ kết quả khảo sát, tác giả xác định 3 nhóm đối tượng sử dụng mục tiêu, liệt kê các yêu cầu chức năng (cắt, ghép, đổi kích thước, chỉnh tốc độ, lọc màu HUE, đổi đuôi mở rộng) và yêu cầu phi chức năng. Đồng thời làm rõ môi trường phát triển trên Visual Studio Code, phương pháp nghiên cứu và ý nghĩa thực tiễn của đề tài.
Chương 4. Phân tích và thiết kế hệ thống
Chương 4 chiếm dung lượng lớn nhất trong khóa luận, mô tả toàn bộ kiến trúc kỹ thuật của đồ án:
- Phân tích hệ thống: Trình bày sơ đồ lớp tổng quát (Hình 4); sơ đồ use case phân cấp theo 3 đối tượng gồm Khách (Hình 5), Người dùng (Hình 6) và Máy chủ (Hình 7); bảng mô tả chi tiết 24 ca sử dụng (Bảng 3); 11 bảng đặc tả use case tiêu biểu (từ Bảng 4 đến Bảng 14); các biểu đồ tuần tự cho chức năng tải video, tạo thông tin cắt ghép và xử lý video (Hình 8, 9, 10); các biểu đồ hoạt động (Hình 11, 12).
- Thiết kế hệ thống: Biểu diễn sơ đồ luồng chuyển trang của ứng dụng (Hình 13) và sơ đồ thực thể mối quan hệ ERD (Hình 14).
- Thiết kế cơ sở dữ liệu: Đặc tả chi tiết cấu trúc trường, kiểu dữ liệu và ràng buộc của hai bảng
Users (Bảng 15) và Project_data (Bảng 16).
- Thiết kế giao diện: Đặc tả chi tiết thành phần điều khiển, nút bấm, ô nhập liệu và liên kết trên 13 bảng mô tả giao diện (Trang chủ, Đăng nhập, Đăng ký, Dashboard, Trang 404, Giao diện chính, Tải video, Danh sách điểm cắt, Ghép video, Modal cài đặt cấu hình).
- Thiết kế xử lý dữ liệu video: Trình bày chi tiết thuật toán và giải pháp kỹ thuật cho 4 tác vụ xử lý video tại máy chủ (cắt video, ghép nối video tuần tự từng đôi một, tăng tốc video và áp dụng bộ lọc màu sắc HUE - từ Bảng 27 đến Bảng 30).
Chương 5. Cài đặt và kiểm thử
Chương này mô tả quy trình thiết lập môi trường vận hành cho cả máy chủ và máy khách. Tác giả tiến hành kiểm thử chức năng cho 4 nghiệp vụ trọng yếu của phần mềm thông qua 4 bảng kiểm thử chi tiết:
- Kiểm thử đăng nhập hệ thống (Bảng 31).
- Kiểm thử đăng ký thành viên mới (Bảng 32).
- Kiểm thử chức năng tải tệp video từ máy khách lên máy chủ (Bảng 33).
- Kiểm thử chức năng gửi yêu cầu và thực thi render video hoàn chỉnh (Bảng 34).
Chương 6. Kết luận và hướng phát triển
Chương tổng kết đánh giá mức độ hoàn thành đề tài trên cả hai khía cạnh lý thuyết và ứng dụng thực tiễn. Tác giả chỉ ra các nhược điểm kỹ thuật còn tồn tại của hệ thống, đặc biệt là gánh nặng tài nguyên phần cứng tại máy chủ và các giới hạn trong tương tác dòng lệnh với FFmpeg, đồng thời đề xuất các định hướng nâng cấp hệ thống trong giai đoạn tiếp theo.
Kết quả và đóng góp
Kết quả đạt được
Đồ án đã xây dựng hoàn chỉnh một ứng dụng web biên tập video với các kết quả cụ thể:
- Hiện thực hóa thành công giao diện người dùng trên nền tảng Angular 14, cung cấp không gian làm việc cho phép xem trước video, chọn các điểm đánh dấu bắt đầu và kết thúc (cut points), sắp xếp thứ tự các đoạn video, điều chỉnh tốc độ phát và tùy chỉnh tỷ lệ khung hình.
- Xây dựng hệ thống máy chủ NodeJS/ExpressJS có khả năng tiếp nhận yêu cầu từ máy khách, phân tách luồng dữ liệu, sinh mã phiên duy nhất và phối hợp với công cụ FFmpeg để thực thi các tác vụ xử lý video thực tế gồm: cắt đoạn chính xác, ghép nối tuần tự nhiều phân đoạn, tăng tốc độ phát lại và thêm lớp lọc màu HUE.
- Thiết lập quy trình xác thực tài khoản an toàn thông qua cơ chế mật khẩu dùng một lần (OTP) gửi qua thư điện tử, băm mật khẩu bằng thư viện
Bcript và quản lý phiên làm việc bằng chuỗi khóa Json web token (JWT) mà không cần lưu trữ mật khẩu tĩnh của người dùng trong cơ sở dữ liệu.
- Tự động hóa khâu phân phối thành phẩm: video sau khi render được tải lên đám mây Cloudinary, đường dẫn liên kết được ghi nhận vào bảng
Project_data của cơ sở dữ liệu MySQL và tự động gửi tới email của người dùng thông qua thư viện Nodemailer.
- Triển khai cơ chế quản trị bộ nhớ đệm tự động trên máy chủ: tự động xóa bỏ các thư mục làm việc (Session Folder) có thời gian lưu trữ vượt quá 7 ngày nhằm tránh tình trạng tràn bộ nhớ đệm.
Đóng góp của đề tài
- Về mặt kỹ thuật: Đề tài cung cấp giải pháp tích hợp giữa framework ứng dụng web hiện đại (Angular, NodeJS) với công cụ xử lý tệp tin đa phương tiện mức thấp (FFmpeg). Giải pháp này giải quyết được rào cản về việc trình duyệt web bị giới hạn tài nguyên tính toán khi thao tác với các tệp video dung lượng lớn bằng cách chuyển toàn bộ tiến trình render nặng về máy chủ.
- Về mặt thực tiễn: Đề tài cung cấp một mô hình phần mềm biên tập video đơn giản hóa, giúp người dùng không chuyên hoặc người dùng sở hữu thiết bị cấu hình yếu có thể thực hiện các thao tác cắt ghép video nhanh chóng trực tiếp trên trình duyệt web mà không cần cài đặt các gói phần mềm chuyên dụng nặng nề.
Hạn chế và hướng nghiên cứu tiếp
Hạn chế
Tác giả đã chỉ ra một số điểm hạn chế kỹ thuật trong báo cáo:
- Về mặt hiệu năng tính toán: Bản chất đơn luồng của môi trường NodeJS khiến hệ thống gặp trở ngại khi phải xử lý đồng thời nhiều tác vụ tiêu tốn nhiều tài nguyên CPU như việc mã hóa và kết xuất video.
- Về mặt cơ chế thực thi: Việc gọi lệnh FFmpeg thông qua tiến trình dòng lệnh (
node-cmd) tiềm ẩn độ trễ nhất định và thiếu cơ chế hàng đợi tác vụ chuyên biệt (job queue) để phân tải khi có nhiều yêu cầu gửi về cùng một thời điểm.
- Về mặt tính năng người dùng: Các tính năng biên tập còn ở mức cơ bản (cắt, ghép tuần tự từng đôi một, đổi tốc độ, lọc màu đơn giản); chưa hỗ trợ các hiệu ứng chuyển cảnh phức tạp, chưa có các lớp hòa trộn âm thanh riêng biệt và khả năng xem trước bộ lọc màu trên trình duyệt mới chỉ dừng ở mức giả lập qua thuộc tính hiển thị chứ chưa phản ánh tuyệt đối kết quả render từ FFmpeg.
- Hạn chế về tài nguyên lưu trữ: Hệ thống buộc phải áp dụng quy tắc xóa dữ liệu phiên sau 7 ngày để giải phóng đĩa cứng máy chủ, do đó người dùng không thể lưu trữ dự án dài hạn trên hệ thống.
Hướng nghiên cứu tiếp
Để hoàn thiện và mở rộng hệ thống, tác giả đề xuất các định hướng phát triển tiếp theo:
- Tối ưu hóa hiệu năng render phía máy chủ, nghiên cứu các giải pháp cân bằng tải hoặc tích hợp các hàng đợi xử lý nền chuyên dụng (như RabbitMQ hoặc Redis Queue) để quản lý hàng đợi kết xuất video ổn định hơn khi có lượng lớn người dùng.
- Mở rộng tập tính năng biên tập: Bổ sung thêm các hiệu ứng chuyển cảnh (transitions), hỗ trợ biên tập đa rãnh âm thanh (audio tracks), thêm văn bản và phụ đề động trực tiếp trên khung hình video.
- Nâng cấp trải nghiệm giao diện người dùng: Tối ưu thanh thời gian (timeline) hỗ trợ thao tác kéo thả mượt mà hơn, hoàn thiện thuật toán đồng bộ màu sắc giữa bộ lọc xem trước trên client và lệnh xử lý của FFmpeg trên máy chủ.
- Mở rộng khả năng lưu trữ và tích hợp: Cung cấp tùy chọn cho phép người dùng kết nối trực tiếp với các dịch vụ lưu trữ đám mây cá nhân (Google Drive, Dropbox) để lưu trữ tệp kết quả lâu dài.
Giá trị tham khảo
Đồ án là tài liệu tham khảo hữu ích cho các nhóm đối tượng cụ thể:
- Sinh viên chuyên ngành Công nghệ thông tin, Kỹ thuật phần mềm đang thực hiện khóa luận hoặc đồ án môn học liên quan đến phát triển ứng dụng web đa tầng (Full-stack Web Development).
- Lập trình viên đang tìm kiếm phương án tích hợp và điều khiển công cụ dòng lệnh xử lý đa phương tiện FFmpeg trong môi trường NodeJS để xây dựng các tiện ích xử lý video tự động.
- Người nghiên cứu quy trình thiết kế phần mềm theo chuẩn công nghệ phần mềm: Có thể tham khảo phương pháp phân rã ca sử dụng chi tiết (hệ thống 24 use case), cách thức xây dựng các biểu đồ tuần tự, biểu đồ hoạt động và lập ma trận ca kiểm thử (test cases) theo phương pháp hộp đen.
Các phần có giá trị tham khảo kỹ thuật cao trong văn bản:
- Bảng tổng hợp các thư viện back-end và front-end đi kèm giải thích lý do lựa chọn (Bảng 1 và Bảng 2).
- Quy trình đăng nhập phi mật khẩu sử dụng mã OTP gửi qua hòm thư điện tử kết hợp mã hóa băm bằng
Bcript và xác thực qua JWT (Bảng 4, Bảng 5, Bảng 15).
- Các kịch bản và thuật toán điều khiển lệnh FFmpeg để cắt, ghép nối từng cặp video và quản lý dọn dẹp các thư mục phiên làm việc theo chu kỳ 7 ngày (Bảng 10, Bảng 14, Bảng 27, Bảng 28).
Câu hỏi thường gặp
1. Hệ thống xử lý việc xác thực người dùng và bảo mật mật khẩu theo cơ chế nào?
Hệ thống sử dụng cơ chế đăng nhập không dùng mật khẩu cố định. Khi đăng nhập, người dùng nhập địa chỉ email và nhấn yêu cầu mật khẩu. Hệ thống sẽ sinh một mã OTP ngẫu nhiên gửi về hòm thư điện tử của người dùng thông qua thư viện Nodemailer. Mã OTP này được băm bằng thư viện Bcript trước khi lưu tạm vào trường OTP trong bảng Users của cơ sở dữ liệu MySQL. Sau khi người dùng nhập đúng mã OTP, hệ thống cấp phát một chuỗi Json web token (JWT) để duy trì phiên làm việc có gắn thời hạn (expiredDate), đồng thời xóa mã OTP trong cơ sở dữ liệu để vô hiệu hóa việc tái sử dụng.
2. Các tác vụ xử lý video nặng (cắt, ghép, chỉnh màu, render) được thực thi ở máy khách (client) hay máy chủ (server)?
Toàn bộ các tác vụ xử lý video thực tế được thực thi hoàn toàn tại máy chủ (server) bằng bộ công cụ FFmpeg. Phía máy khách (Angular) chỉ đóng vai trò cung cấp giao diện trực quan để người dùng thiết lập các điểm đánh dấu thời gian, chọn tỷ lệ khung hình, tốc độ hoặc xem trước màu sắc giả lập qua vòng tròn HUE. Sau đó, các tham số này được đóng gói thành một yêu cầu (Render Request) gửi lên máy chủ NodeJS để kích hoạt câu lệnh FFmpeg qua thư viện node-cmd.
3. Hệ thống giải quyết bài toán quản lý dung lượng ổ đĩa trên máy chủ như thế nào?
Để tránh tình trạng máy chủ bị tràn bộ nhớ do các tệp video tải lên và tệp tạm sinh ra trong quá trình render, hệ thống triển khai ca sử dụng deleteOldData (UC_21). Mỗi phiên làm việc của người dùng được gán một mã định danh ngắn qua thư viện Short unique id và lưu trong một thư mục phiên riêng biệt (SFolder). Máy chủ định kỳ kiểm tra thời gian tồn tại của các SFolder và tự động xóa bỏ toàn bộ các thư mục có thời gian tồn đọng vượt quá 7 ngày.
4. Kết quả video sau khi render hoàn tất được phân phối lại cho người dùng bằng cách nào?
Sau khi tiến trình FFmpeg kết xuất xong video thành phẩm, máy chủ NodeJS thực hiện việc tải tệp video này lên dịch vụ lưu trữ đám mây Cloudinary thông qua thư viện Cloudinary. Đường dẫn trực tuyến (URL) của video được cập nhật vào trường video_link trong bảng Project_data của cơ sở dữ liệu MySQL (trạng thái video_status chuyển sang hoàn thành). Đồng thời, máy chủ kích hoạt thư viện Nodemailer tự động gửi một email chứa liên kết tải video này trực tiếp đến hòm thư điện tử của người dùng.
5. Cấu trúc cơ sở dữ liệu của ứng dụng gồm những bảng nào và lưu trữ thông tin gì?
Cơ sở dữ liệu của hệ thống được xây dựng trên hệ quản trị MySQL và được thiết kế tinh giản với 2 bảng chính:
- Bảng
Users: Lưu trữ thông tin định danh và xác thực của người dùng, gồm các trường Email (khóa chính), Nickname, OTP (mật khẩu băm tạm thời), Token (JWT), expiredDate (thời hạn phiên) và confirmEmail (trạng thái xác thực email).
- Bảng
Project_data: Lưu trữ thông tin các dự án biên tập video, gồm các trường video_id (khóa chính), email (khóa ngoại liên kết với bảng Users), project_name (tên gợi nhớ của dự án), video_status (trạng thái xử lý của video) và video_link (đường dẫn tệp video thành phẩm trên Cloudinary).
Kết luận
Khóa luận tốt nghiệp của tác giả Trần Quốc Việt đã hoàn thành mục tiêu xây dựng một ứng dụng web biên tập video cơ bản, phục vụ nhóm người dùng phổ thông thông qua việc kết hợp giữa giao diện người dùng Angular 14 và máy chủ xử lý NodeJS. Đề tài đã giải quyết được vấn đề giới hạn phần cứng máy khách bằng cách chuyển đổi toàn bộ quy trình kết xuất video phức tạp về máy chủ thông qua bộ công cụ mã nguồn mở FFmpeg, tích hợp cơ chế xác thực OTP qua email và lưu trữ đám mây Cloudinary. Mặc dù hệ thống còn tồn tại các giới hạn về năng lực xử lý đa tiến trình của NodeJS và tính năng biên tập còn ở mức giản lược, đồ án đã chứng minh tính khả thi của mô hình xử lý đa phương tiện trên nền tảng web và thiết lập nền tảng kỹ thuật rõ ràng cho các định hướng tối ưu hóa hàng đợi render trong tương lai.