Tùy chọn của cùng một khu vực nào đó, hay cùng một khu vực khác nhau trong FFmpeg là gì? Có phải nó có nghĩa là cùng một chất lượng hay không?


29

Thông thường, tôi đã thấy các lệnh FFmpeg sử dụng sameqtùy chọn, ví dụ:

ffmpeg -i input.mp4 -sameq output.avi

Điều đó có nghĩa là gì? Nó có nghĩa là "cùng chất lượng"? Nếu không, tôi nên sử dụng cái gì thay thế?

Câu trả lời:


57

sameq không có nghĩa là "cùng chất lượng"

Một số tài nguyên trên web thúc đẩy việc sử dụng sameqhoặc same_quanttùy chọn, nhưng về bản chất, chúng đã sai. Việc sử dụng sameqkhông mang lại cho bạn kết quả với chất lượng như đầu vào.
Đừng bao giờ sử dụng nó.

Nguồn gốc của sự nhầm lẫn là tài liệu bằng văn bản kém ngụ ý rằng sử dụng tùy chọn này sẽ cung cấp chất lượng tương tự. May mắn thay, tùy chọn đã được gỡ bỏ.

Đây là những gì tài liệu FFmpeg nói:

Lưu ý rằng đây không phải là CÙNG CHẤT LƯỢNG. Không sử dụng tùy chọn này trừ khi bạn biết bạn cần nó.

Trong thực tế, các nhà phát triển FFmpeg đã thay đổi tên từ sameqđể same_quantchỉ để đảm bảo, và sau đó loại bỏ sameq/same_quant hoàn toàn; có nghĩa là tùy chọn này không tồn tại trong FFmpeg gần đây, nhưng bài viết này vẫn hữu ích cho những người sử dụng các bản dựng FFmpeg cũ hơn.


Làm thế nào để nén video hoạt động?

Bây giờ chúng tôi đã xóa điều này, hãy đi vào một số chi tiết kỹ thuật.

Để hiểu lý do tại sao nó không hoạt động đáng tin cậy, chúng ta cần nắm được khái niệm "chất lượng" nghĩa là gì đối với một bộ mã hóa video phổ biến và những gì ảnh hưởng đến chất lượng. Tại sao một video trông tốt hơn video kia khi được nén với tốc độ bit khác nhau? Điều gì làm cho một chuyển đổi bị mất và tại sao video nhỏ hơn bản gốc sau khi mã hóa?

Khi bạn mã hóa video, dữ liệu đầu vào của bạn được chuyển đổi sang một chiều khác bằng cách trước tiên áp dụng chuyển đổi toán học cho các khối pixel. Phép biến đổi này, chủ yếu là Biến đổi Cosine rời rạc , tạo ra một ma trận các số mô tả, giả sử, một trường có kích thước 8 × 8 pixel trong video.

Vì vậy, 8 × 8 pixel của bạn và ma trận tương ứng ban đầu sẽ trông như thế này: 1

Ảnh gốc  

Nhưng đây là quá nhiều dữ liệu! Nếu chúng ta muốn nén video, chúng ta thực sự có thể loại bỏ các con số ở phía dưới bên phải. Tôi sẽ không giải thích lý do tại sao điều này là chính xác, nhưng hãy nói rằng các số ở phía trên bên trái quan trọng hơn khi mô tả một khối như vậy. Toàn bộ ý tưởng của việc chuyển đổi về cơ bản là đặt những thứ quan trọng lên trên cùng bên trái.

Để loại bỏ các số ở dưới cùng bên phải, chúng ta có thể làm cho chúng là số không. Nếu một cái gì đó là "không có gì", hoặc chỉ lặp lại là 0s, chúng ta sẽ không phải lưu trữ nó, và theo cách đó chúng ta sẽ tiết kiệm không gian. Về mặt toán học, chúng ta cần lượng tử hóa ma trận đầu tiên này bằng cách áp dụng một ma trận khác, "ma trận lượng tử hóa".

Điều này sẽ dẫn đến một ma trận hiện có số lượng ít hơn đáng kể trong đó và rất nhiều số không:

Hình ảnh nén  

Kết quả của việc này là chúng tôi đã biến ma trận chất lượng cao đầu tiên có nhiều số thành ma trận vẫn giống với 8 × 8 pixel, nhưng với chất lượng kém hơn vì nó có ít số hơn để mô tả các pixel đó. Nếu bạn so sánh khối một cách trực quan, chúng tương tự nhau, nhưng không hoàn toàn giống nhau nữa.

Ở đây, ma trận lượng tử hóa quyết định chất lượng . Điều này quan trọng. Chúng ta có thể sử dụng các ma trận lượng tử hóa khác nhau cho chất lượng khác nhau. Một số ma trận lượng tử hóa để lại ma trận gốc gần như nguyên vẹn, một số khác thì không. Chúng tôi càng xóa nhiều số, chất lượng sẽ càng tệ , nhưng chúng tôi càng có thể nén video, vì về cơ bản chúng tôi có thể "vứt bỏ" các số 0 ở đây.

Điều đó có liên quan gì sameq?

Giả sử bạn mã hóa video và bạn muốn đặt chất lượng nhất định. Như chúng ta đã biết, các ma trận lượng tử hóa khác nhau dẫn đến chất lượng khác nhau, vì vậy khi chúng ta nói với bộ mã hóa của mình sử dụng chất lượng x, nó sẽ chọn ma trận lượng tử hóa phù hợp yđể có được chất lượng đó, bất kể đó là gì. Kết quả là một video được nén bằng yma trận. 2

Và đây là phần thú vị: sameqcó nghĩa là "cùng một lượng tử hóa". Không "cùng chất lượng". Nếu bạn có phiên bản FFmpeg không gần đây, bạn vẫn có thể tìm thấy nó trong ffmpeg --help:

ffmpeg --help 2>&1 | grep sameq

Vì vậy, khi bạn lấy video đã chuyển đổi đó và mã hóa lại, và bạn áp dụng sameqtùy chọn, FFmpeg sẽ, nói một cách đơn giản, chọn các ma trận lượng tử hóa tương tự được sử dụng cho video đầu vào.

Điều này phần nào hoạt động khi bạn sử dụng chính xác cùng một codec cho đầu vào và đầu ra, ví dụ như khi chuyển đổi từ video XviD sang video XviD, nhưng bạn vẫn sẽ có chất lượng kém hơn. 3 Đây là mã hóa bởi vì một cái gì đó đã được mã hóa sẽ làm mất đi nhiều thông tin hơn nữa. Trong ví dụ trên, chúng tôi sẽ tạo ra nhiều số 0 hơn trong ma trận của chúng tôi và kết quả sẽ trông tệ hơn.

Nó hoàn toàn không hoạt động trên các codec video khác nhau. Giả sử bạn đang chuyển đổi video được mã hóa XviD với x264. 4 Đối với hai loại tiền mã hóa này, ma trận lượng tử hóa được sử dụng trong nội bộ là khác nhau - chúng không có cùng hệ số. Vì vậy, tùy chọn này thậm chí không có ý nghĩa! Thật không may, FFmpeg vẫn cho phép bạn sử dụng nó.

Điểm mấu chốt: Vui lòng không sử dụng tùy chọn đó trừ khi bạn biết cụ thể bạn đang làm gì. Nếu bạn muốn mã hóa video của mình bằng một codec khác, nhưng vẫn giữ được chất lượng, thì bạn sẽ phải thử nghiệm và chỉ tự đặt chất lượng. Xem kết quả có thỏa mãn không, và nếu không, hãy đặt chất lượng cao hơn. Đó là về nhiều như bạn có thể làm.

Cuối cùng, nếu bạn muốn đọc về cách giữ chất lượng của mình khi mã hóa lại, hãy xem các bài đăng sau:


1) Ma trận không tương ứng với hình ảnh ở đây, thực sự. Đây chỉ là một ví dụ.
2) Trên thực tế, ngày nay, hầu hết các quy trình mã hóa không chỉ sử dụng một ma trận. Khi bạn đặt tốc độ bit nhất định, bộ mã hóa sẽ sử dụng các ma trận khác nhau để có tốc độ bit trung bình mỗi giây. Tương tự, khi thiết lập một chất lượng nhất định, các bộ mã hóa hiện đại sử dụng các ma trận khác nhau tùy thuộc vào nội dung. Điều này là do một số nội dung "dễ nén" hơn các nội dung khác và yêu cầu lượng tử hóa ít hơn để có cùng hệ số nén.
3) Ví dụ : ffmpeg -i input.avi -sameq -c:v libxvid output.avi. Không sử dụng cái này. Xin vui lòng.
4) Ví dụ : ffmpeg -i input.avi -sameq -c:v libx264 output.mp4. Đừng dùng cái này. Tôi nghiêm túc đấy


-sameqtùy chọn đã không được chấp nhận và sau đó bị xóa khỏi avconv
AzizSM
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.