Tại sao CPU load chưa tới 100% mà phim HD vẫn giật hình, lệch tiếng?
Sự nghiệp chơi HD bằng PC ko đơn giản như HDbox, nào là đầu tư linh kiện gì, lắp đặt kết nối ra làm sao, cân chỉnh như thế nào... Vậy mà nhiều khi làm xong, xem HD cứ bị khựng khựng rất bực mình, rồi lại tiếng đi trước mồm nhóp nhép theo sau... Bật CPU usage lên thấy cũng tầm năm mấy sáu chục phần trăm, tức là CPU vẫn chưa hoạt động hết công suất, vậy sao lại giật hình, lệch tiếng?
Bài viết dưới đây em chắt lọc từ chút kiến thức còm, hy vọng sẽ tháo gỡ được phần nào thắc mắc của các bác mê HD.
CPU usage là gì? Đó là chỉ số thể hiện mức độ sử dụng CPU tại một thời điểm nhất định. CPU usage được tính dưới dạng số phần trăm: 0% = hệ thống nghỉ, CPU ko được sử dụng, 100% = CPU hoạt động hết công suất.
Khi các bác chơi phim HD bằng phương pháp giải mã dùng CPU (là cái kiểu config theo bài "Hướng dẫn xì trum A-Z" của em đã viết trước đây), lập tức usage CPU vọt lên. Tùy vào cấu hình mạnh yếu mà chỉ số này cao hay thấp. Chúng được tổng kết thành 1 biểu đồ (chart) mà các bác có thể tham khảo bằng cách nhấn Cltr + Alt + Del, chọn thẻ Performance:
Đồ thị trên là em đang bắt MPC tải 2 bộ phim cùng lúc để mô phỏng cho bài viết. Như các bác thấy trên đồ thị, MPC đang sử dụng chừng 50-60% năng lực của CPU, như vậy chưa hết công suất của CPU, nhưng hiện tượng giật hình vẫn xảy ra.
Máy tính vẽ biểu đồ trên bằng cách tính hiệu suất sử dụng CPU trong mỗi gói xung nhịp, sau đó tính trị số trung bình rồi cập nhật lên biểu đồ sau mỗi giây (second).
Em trích 1 đoạn nhỏ trong cái biểu đồ trên ra phân tích cho các bác dễ hình dung:
Biểu đồ trên được vẽ trong khoảng thời gian là 20 giây, các trị số CPU usage nhảy trong tầm trên dưới 55%.
Phim HD chúng ta chiếu thường có số khung hình trên giây (fps) là 24, tức là cứ mỗi 1/24s, CPU phải hoàn tất xong 1 công đoạn giải nén hình ảnh và đưa lên màn hình. Do tính chất phức tạp của mỗi frame là khác nhau nên CPU usage cho mỗi frame cũng có chỉ số khác nhau.
Cùng là trị số CPU usage trong biểu đồ trên, em kéo dãn trục thời gian ra và thay vào đó là trục frame (bullet time đó các bác
)) để thấy rõ CPU usage của từng frame:
Như các bác thấy, trong khi đường CPU show (là đường thể hiện trong biểu đồ Performance) khá ổn định trong tầm trên dưới 55% thì đường CPU usage thực tế có biên độ lớn hơn nhiều. Trung bình cộng của mỗi giây hình ảnh (là các trị số trong đường màu xanh dương) được tính ra để tạo nên đường CPU show (là các trị số trong đường màu xanh lá)
Trong đồ thị trên, có những frame mà tại đó nhu cầu vượt quá sức của CPU (vượt quá 100%) tại các frame: 63, 72, 78, 93, 97... Tại các frame này năng lực CPU ko đáp ứng nổi nên frame đưa ra màn hình ko kịp lúc, dẫn đến tình trạng giật hình (gọi là frame drop). Nếu tình trạng diễn ra thường xuyên và nhiều frame drop nối tiếp nhau, bộ đếm fps của hình ảnh và âm thanh sẽ không đồng bộ, dẫn đến lệch tiếng.
Như vậy, đồ thị performance của PC thể hiện cho chúng ta chỉ biểu diễn các trị số trung bình, đằng sau trị số có vẻ hiền lành này (50-60%) là những đợt sóng ngầm thực sự. Chỉ có những CPU đủ lực không cho phép ngọn sóng nào vượt quá 100% thì mới khiến bộ phim HD của chúng ta trơn tru mượt mà.
Để giải quyết tình trạng này, có thể thực hiện một trong các giải pháp sau, hoặc kết hợp nhiều giải pháp cùng lúc:
- cách tốt nhất là tinh chỉnh lại hệ thống windows nói chung, đảm bảo ko virus, ko chạy các chương trình ngốn tài nguyên khác đồng thời với phim HD (kéo torrent, download IDM, mở trình duyệt... ít nhiều đều ngốn CPU usage)
- từ bỏ giải pháp khử ô vuông của ffdshow (post processing) để đổi lấy một chút tốc độ xử lý.
- từ bỏ những bộ codec nặng nề (như ffdshow), dùng codec nhẹ nhàng hơn (chịu hy sinh một chút về chất lượng) như coreAVC
- từ bỏ các chế độ hỗ trợ chất lượng của MPC như DirectX, VMR9..., chuyển sang Hali render hoặc tệ hơn là Overlay Mixer
- đầu tư CPU mạnh hơn (cái này triệt để nhất và dễ dùng hơn cả, tuy có hơi tốn kém)
- đầu tư GPU hỗ trợ DXVA rồi setting theo kiểu enable DXVA (tham khảo các bài viết hướng dẫn trong diễn đàn)
5/3/9