Tôi đang cố gắng chuyển đổi thư viện video của mình sang định dạng HEVC để có được không gian. Tôi đã chạy lệnh sau trên tất cả các tệp video trong thư viện của mình:
#!/bin/bash
for i in *.mp4;
do
#Output new files by prepending "X265" to the names
avconv -i "$i" -c:v libx265 -c:a copy X265_"$i"
done
Bây giờ, hầu hết các video chuyển đổi tốt và chất lượng vẫn như trước. Tuy nhiên, một vài video có chất lượng rất cao (ví dụ: một bản in phim có dung lượng 5 GB) sẽ mất chất lượng - tất cả video đều bị pixel.
Tôi không chắc phải làm gì trong trường hợp này. Tôi có cần sửa đổi crf
tham số trong dòng lệnh của mình không? Hay cái gì khác?
Vấn đề là, tôi đang thực hiện một chuyển đổi số lượng lớn. Vì vậy, tôi cần một phương pháp trong đó avconv
tự động điều chỉnh bất kỳ tham số nào cần điều chỉnh, cho mỗi video.
CẬP NHẬT-1
Tôi thấy đó crf
là núm tôi cần điều chỉnh. CRF mặc định là 28. Để có chất lượng tốt hơn, tôi có thể sử dụng thứ gì đó nhỏ hơn 28. Ví dụ:
avconv -i input.mp4 -c:v libx265 -x265-params crf=23 -c:a copy output.mp4
Tuy nhiên, vấn đề là đối với một số video, giá trị CRF là 28 là đủ tốt, trong khi đối với một số video, CRF thấp hơn là bắt buộc. Đây là điều mà tôi phải kiểm tra thủ công bằng cách chuyển đổi các phần nhỏ của video lớn. Nhưng trong chuyển đổi hàng loạt, làm cách nào để kiểm tra từng video theo cách thủ công? Là một số cách của họ avconv
có thể điều chỉnh CRF theo video đầu vào một cách thông minh?
CẬP NHẬT-2
Tôi thấy rằng có một --lossless
tùy chọn trong x265: http://x265.readthedocs.org/en/default/lossless.html .
Tuy nhiên, tôi không biết cách sử dụng nó một cách chính xác. Tôi đã thử sử dụng nó theo cách sau nhưng nó mang lại kết quả ngược lại (video thậm chí còn nhiều pixel hơn):
avconv -i input.mp4 -c:v libx265 -x265-params lossless -c:a copy output.mp4
--lossless
trong thực tế có thể phóng to tập tin, nếu nó giải mã codec bị mất trước đó và sau đó mã hóa những gì nó đã giải mã một cách dễ dàng. Chất lượng sẽ giữ chính xác như đầu vào.