Chuyển đổi video sang WebM với ffmpeg / avconv


18

Trong khi cố gắng tối ưu hóa kích thước của các video gia đình của mình, tôi đã chuyển đổi một số trong số chúng thành WebM dưới dạng thử nghiệm, sử dụng Pitivi trên Xubfox. Sự khác biệt kích thước là đáng kể. Tệp webm kết quả chỉ chiếm khoảng 10% so với tệp gốc, trong khi chất lượng hình ảnh trông khá giống với tôi.

Tôi cũng đã thử thực hiện chuyển đổi bằng cách sử dụng avconvđể tôi có thể viết kịch bản, nhưng tệp kết quả trông thực sự nhảm nhí. Sau khi xem các cài đặt kết xuất trong Pitivi, tôi đã thử một số tham số: avconv -i $1 -q 5 -qmin 0 -qmax 63 ${1%.*}.webmnhưng chất lượng vẫn trông như tào lao, vì vậy có vẻ như tôi đang thiếu / sử dụng một số thông số sai. Có ai đó biết đâu là thông số chính xác để sử dụng để chuyển đổi phim h264 sang webm và có chất lượng tương tự như từ Pitivi không?

Đây là các cài đặt trong Pitivi: tạo dự án Pitivi Kết xuất với webm (video html5) cấu hình codec

Câu trả lời:


53

Lưu ý: Thông tin này dựa trên Wiki FFmpeg về mã hóa VP9 . Vui lòng tham khảo bài viết đó để biết thêm thông tin - nó sẽ liên tục được duy trì và mở rộng. Để có kết quả tốt nhất, bạn nên sử dụng phiên bản gần đây ffmpegbằng cách tải xuống từ trang web của họ (bản dựng tĩnh sẽ đủ; nó chứa libvps-vp9bộ mã hóa).

Tốc độ bit biến

Mã hóa VBR cung cấp cho bạn chất lượng tổng thể tối ưu, vì bộ mã hóa có thể tự do chọn số lượng bit để gán cho một khung. Chọn chế độ này trừ khi bạn đang chuẩn bị video để truyền phát bitrate liên tục.

Tùy chọn 1: Mã hóa chất lượng không đổi

Thông thường, nếu bạn không muốn nhắm mục tiêu kích thước tệp cụ thể, bạn nên để bitrate thay đổi tự do, vì điều đó sẽ dẫn đến chất lượng cao nhất. Bạn có thể làm điều này bằng cách đặt bitrate thành 0 và hệ số tốc độ không đổi ( CRF ) thành mức chất lượng mục tiêu:

ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 output.webm

Giá trị CRF có thể từ 0 Dòng63. Giá trị thấp hơn có nghĩa là chất lượng tốt hơn. Giá trị được đề xuất nằm trong khoảng từ 15 FPV35, với 31 được khuyến nghị cho video HD 1080p. Google có một hướng dẫn với nhiều thông tin hơn về điều đó .

Tùy chọn 2: Mã hóa hai lần với tốc độ bit đích

Nếu bạn muốn tệp của mình có bitrate mục tiêu hoặc kích thước tệp cụ thể, bạn cần chỉ định tốc độ và sử dụng mã hóa hai lần (sẽ đảm bảo phân phối chất lượng tối ưu). Ở đây chúng tôi đang chọn 5 MBit / s, đủ cho nội dung 1080p.

ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 5M -pass 1 -f webm /dev/null && \
ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 5M -pass 2 output.webm

Người dùng Windows cần sử dụng NULthay vì /dev/null^thay vì \.

Tốc độ không đổi

Trước hết, libvpx cung cấp các chế độ mã hóa bitrate và bitrate không đổi . Nên tránh bitrate liên tục bất cứ khi nào có thể (trừ khi bạn nhắm mục tiêu kích thước tệp cụ thể hoặc kịch bản phát trực tuyến), vì chất lượng trung bình trên mỗi kích thước tệp sẽ tệ hơn. Tuy nhiên, bạn có thể thử đặt tốc độ bit không đổi nếu không có gì khác phù hợp với bạn, ví dụ với 1 MBit / s:

ffmpeg -i input.mp4 -c:v libvpx-vp9 -minrate 5M -maxrate 5M -b:v 5M output.webm

Nhìn vào đầu ra và tăng hoặc giảm tốc độ bit theo ý thích của bạn (hoặc các ràng buộc kích thước tệp). Ví dụ: bạn có thể sử dụng 500Khoặc 5M, et cetera.

Bạn cần phải xác định -minrate, -maxratevà bitrate -b:vđể các bộ mã hóa để sử dụng CBR. Tất cả đều phải có cùng một giá trị, nếu không, nó sẽ chọn một bitrate mục tiêu khác thay thế và thực hiện mã hóa VBR, nhưng với chất lượng kém.

Âm thanh

Bộ giải mã âm thanh hiện tại được lựa chọn cho mã hóa VP9 là Opus. FFmpeg sẽ chọn bộ mã hóa cần thiết và các tùy chọn của nó theo mặc định. Nếu bạn muốn thiết lập rõ ràng -c:a libopus, bạn cũng có thể làm điều đó. Tham khảo libopustài liệu để có thêm lựa chọn.


4
Hiện tại, đây là hướng dẫn tốt nhất để mã hóa VP8 trên toàn bộ internet. Làm tốt lắm, tôi ước mình có thể nâng cao hơn thế nữa!
evilsoup

@evilsoup Cảm ơn bạn. Tôi vẫn đang điều chỉnh nó và sẽ thêm một trang mới trên wiki FFmpeg sau.
slhck

Đây thực sự là một câu trả lời tuyệt vời! Bây giờ tôi đã hiểu tại sao video của mình luôn có chất lượng thấp như vậy, vì thực tế tôi luôn sử dụng mặc định 256 kBit / s. Cảm ơn rât nhiều!
jeroen

Sự khác biệt kích thước giữa mp4 ban đầu và webm được chuyển đổi là gì?
switz

1
@Dan Tôi vừa cập nhật hướng dẫn - nhận thấy rằng nó hơi lỗi thời. Thật vui khi bạn thấy nó hữu ích.
slhck
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.