Tới nội dung
Cloudj

Ứng dụng GPU

Chuyển mã video bằng GPU NVENC với FFmpeg trên máy chủ ở châu Á

Cách chuyển mã video bằng GPU NVENC cho đội làm video ở châu Á: card RTX phổ thông, lệnh FFmpeg dùng ngay, và vì sao giá băng thông quan trọng hơn giá GPU.

Cập nhật · 4 phút đọc

Chuyển mã video bằng GPU NVENC là một trong những cách dùng hiệu quả nhất cho một card phổ thông đi thuê. Bộ mã hóa phần cứng (NVENC) và bộ giải mã (NVDEC) của NVIDIA nằm ngay trên card, cạnh các nhân CUDA, nên một card RTX tầm trung chuyển mã nhanh hơn nhiều so với CPU cùng tầm giá, mà vẫn chạy không giao diện qua SSH. Với các đội làm video ở Đông Nam Á và Đông Á, điều bất ngờ thường không nằm ở giá GPU mà ở hóa đơn băng thông. Bài này đưa ra các lệnh, giải thích cách tính chi phí, và chỉ cách chọn host gần nơi đặt file gốc bằng các mã SG, HK và JP.

Ở Việt Nam, nhu cầu này rất phổ biến: agency dựng video TikTok cho nhãn hàng, kênh YouTube cần xuất nhiều độ phân giải, hay nền tảng khóa học online phải chuyển hàng trăm bài giảng sang định dạng nhẹ hơn. Bức tranh chung về vị trí ở châu Á có trong hướng dẫn thuê GPU châu Á.

Vì sao card RTX phổ thông là đủ

Mọi card GeForce RTX gần đây đều có NVENC và NVDEC. Khi chuyển mã, khối mã hóa làm phần việc nặng, nên bạn hiếm khi cần card lớn:

  • RTX 3060, 12 GB: mã hóa H.264 và HEVC, dư bộ nhớ cho giải mã và bộ lọc thay đổi kích thước.
  • RTX 4070, 12 GB: bộ mã hóa thế hệ mới hơn, có thêm mã hóa AV1.
  • RTX 4090, 24 GB: đáng dùng khi bạn kết hợp chuyển mã với các bước AI như upscale, tạo phụ đề hay nhận dạng giọng nói trên cùng máy.

Cả ba đều là card phổ thông, tài khoản mới dùng được. Driver GeForce có thể giới hạn số phiên mã hóa chạy đồng thời, nên hãy thử mức song song trên chính card bạn thuê thay vì tin vào một con số.

Cách tính chi phí: băng thông trước

Một job chuyển mã chuyển rất nhiều dữ liệu: file gốc đi vào, các bản xuất đi ra. Trên Cloudj, instance GPU tính theo phút cho GPU cộng ổ đĩa khi chạy, còn băng thông tính theo GB tải xuống và tải lên với giá niêm yết của từng máy. Với video, phần thứ hai thường chiếm ưu thế.

Ước tính một job như sau:

  1. Dữ liệu vào = tổng dung lượng file gốc bạn upload hoặc kéo về instance.
  2. Dữ liệu ra = tổng dung lượng mọi bản xuất bạn chép về hoặc đăng lên.
  3. Chi phí băng thông = dữ liệu vào x giá tải xuống + dữ liệu ra x giá tải lên.
  4. Chi phí tính toán = giá chạy x số giờ mã hóa.

Nếu kho video gốc lớn và mỗi file xuất nhiều bản, dòng băng thông có thể vượt dòng tính toán, kể cả trên GPU giá rẻ. Vì vậy cột băng thông quan trọng hơn bình thường. Bài ước tính chi phí GPU cloud có mẫu để tính. Giá theo thời gian thực của từng card có trên GPU cloud.

Chọn host gần file gốc, giá băng thông thấp

Mở trang triển khai với RTX 3060 và nhập SG, HK, JP vào ô Country. Sau đó dùng có chủ đích hai bộ lọc:

  • Giá băng thông tối đa theo TB cho tải xuống và tải lên. Bộ lọc này loại các host khiến job video trở nên đắt.
  • Tốc độ tải xuống tối thiểu. Kéo file gốc nhanh giúp GPU đỡ phải ngồi chờ.

Chọn nước gần nơi lưu file gốc, ví dụ gần kho lưu trữ hoặc gần đội dựng, để chuyển file nhanh hơn. Với đội ở Việt Nam, SG và HK thường là mã nên thử trước; VN có thể thêm vào nhưng máy tại Việt Nam không chắc có trong danh sách. Mỗi dòng ghi quốc gia ở cấp quốc gia, và tình trạng máy thay đổi trong ngày. Nếu không có máy phù hợp, nới nhẹ giới hạn băng thông, thử RTX 4070 hoặc card phổ thông khác, hay thêm TW và KR. Với chuyển mã hàng loạt không ai xem trực tiếp, host xa hơn vẫn ổn nếu giá truyền dữ liệu tốt.

Bài chuyển mô hình và dữ liệu giữa các khu vực GPU hướng dẫn cách chuyển nhanh và tiếp tục được khi bị ngắt.

Các lệnh chạy không giao diện

Cài FFmpeg trong template Ubuntu 22.04 + CUDA qua SSH, hoặc dùng Docker image công khai có sẵn bản FFmpeg hỗ trợ NVENC. Kiểm tra bản build nhận phần cứng:

nvidia-smi
ffmpeg -hide_banner -encoders | grep nvenc

Pipeline giải mã, đổi kích thước và mã hóa hoàn toàn trên GPU:

ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 \
  -vf scale_cuda=1280:720 -c:v h264_nvenc -preset p5 -cq 23 \
  -c:a copy output_720p.mp4

HEVC cho file nhỏ hơn, hoặc AV1 trên card có bộ mã hóa AV1:

ffmpeg -hwaccel cuda -i input.mp4 -c:v hevc_nvenc -preset p5 -cq 26 -c:a copy out_hevc.mp4
ffmpeg -hwaccel cuda -i input.mp4 -c:v av1_nvenc -preset p5 -cq 30 -c:a copy out_av1.mp4

Preset đi từ p1 (nhanh hơn) tới p7 (chất lượng trên mỗi bit tốt hơn). Hãy chỉnh -cq bằng cách xem chính video đầu ra của bạn. Tài liệu FFmpeg liệt kê mọi tùy chọn NVENC.

Chạy theo lô

Với cả thư mục file, hãy giữ đơn giản và có thể chạy tiếp:

mkdir -p out
for f in in/*.mp4; do
  [ -f "out/$(basename "$f")" ] && continue
  ffmpeg -hwaccel cuda -i "$f" -c:v h264_nvenc -preset p5 -cq 23 -c:a copy "out/$(basename "$f")"
done

Chạy trong tmux, và theo dõi tải bộ mã hóa bằng nvidia-smi dmon. Nếu GPU rảnh trong khi ổ đĩa hoặc mạng bận, thêm GPU cũng không giúp gì; tải nhanh hơn hoặc cache cục bộ mới giúp. Bài theo dõi tài nguyên máy chủ giải thích cách đọc mức tải CPU, ổ đĩa và mạng trên Linux.

Tách riêng phần frontend

Nếu bạn phát video cho người xem, đừng phục vụ trực tiếp từ host GPU. Ngày "available until" của nó sẽ tới, và nếu host mất kết nối thì không có cơ chế tự chuyển máy. Hãy chép các bản xuất hoàn chỉnh về kho lưu trữ hoặc origin của CDN, và giữ một VPS Singapore ổn định cho cổng upload, hàng đợi job và API. GPU khi đó chỉ là một worker bạn thay thoải mái.

Câu hỏi thường gặp

Có cần GPU data center để chuyển mã không?

Thường là không. Card RTX phổ thông có NVENC và NVDEC, và tài khoản mới dùng được.

Vì sao hóa đơn cao hơn mức giá GPU?

Do băng thông. Video chuyển nhiều dữ liệu vào ra, tính theo GB với giá niêm yết của host. Hãy lọc theo giá băng thông.

Có desktop để chạy phần mềm chuyển mã có giao diện không?

Không. Instance GPU chạy không giao diện; hãy dùng ffmpeg qua SSH.

Nên chọn nước nào?

Nước gần nơi đặt file gốc và có giá băng thông chấp nhận được. Thử SG, HK, JP rồi so sánh. Tiền trừ từ số dư tài khoản, nạp bằng chuyển khoản VND được.

Bắt đầu chuyển mã

Mở trang triển khai với RTX 3060, nhập SG, HK, JP và đặt giá băng thông tối đa trước tiên. Chạy thử một lô nhỏ, đo dữ liệu vào ra, rồi mở rộng khi các con số đã hợp lý.

Triển khai máy chủ hoặc mua proxy

Chọn vị trí trong console, xem giá trực tiếp và thanh toán từ số dư tài khoản.