Codec (ví dụ DivX là gì?) Và nó khác với Định dạng tệp (ví dụ MPG) như thế nào?


95

Tôi rất bối rối ... sự khác biệt giữa codec âm thanh / video (rõ ràng là cách viết tắt của "bộ mã hóa / giải mã", giống như cách "modem" thực sự là "bộ điều biến / giải mã") và âm thanh / định dạng video?
(Tôi thậm chí có sử dụng thuật ngữ chính xác không?)

tức là: sự khác biệt giữa việc nói điều gì đó là "MPEG-4" và nói điều gì đó sử dụng codec "DivX"? Tại sao Windows Media Player đôi khi chạy .mpgcác tệp, và đôi khi không?

Ngoài ra, cái nào sau đây là codec, cái nào là định dạng tệp và cái nào không?

  • MOV thời gian nhanh
  • MPEG (1, 2, 3, 4)
  • WMV
  • FFmpeg
  • AVC
  • Xvid
  • DivX (nó khác với palindrom của nó như thế nào, Xvid?)
  • H.264

2
Nhìn vào câu hỏi của chính tôi 6 năm sau và tất cả những gì tôi có thể nghĩ là "làm sao bạn không biết điều này?!"
Mehrdad

1
Tất cả chúng tôi bắt đầu từ một nơi nào đó. ;)
Hashim

Câu trả lời:


146

Một số định nghĩa chính:

  • Một codec (ví dụ, H.264, HEVC, VP9) chỉ chịu trách nhiệm cho phần video hoặc âm thanh và một hoặc nhiều codec có thể được hợp nhất vào một thùng chứa.
  • Một thùng chứa (ví dụ, MP4, MKV) có trách nhiệm giữ chúng lại với nhau và đây cũng là thứ bạn thường mở trong trình phát đa phương tiện của mình.
  • Một bộ mã hóa cụ thể (ví dụ: x264, libvpx) chịu trách nhiệm biến luồng đầu vào thành dòng bit tuân thủ codec. Thường có nhiều bộ mã hóa cho một codec cụ thể.

Như bạn có thể thấy, chúng ta sẽ phải giải thích một vài điều ở đây.

Codec là gì?

Một codec là viết tắt của bộ mã hóa / giải mã, về cơ bản chỉ có nghĩa như sau: Dữ liệu được tạo bởi bộ mã hóa luôn có thể được giải mã bởi một bộ giải mã thích hợp. Điều này xảy ra là hợp lệ cho video, âm thanh, nhưng bạn cũng có thể nghĩ về mật mã (một bộ mã hóa cần một bộ giải mã thích hợp để hiển thị một tin nhắn được mã hóa).

Ngày nay, khi một codec video được chỉ định, các tổ chức tham gia vào nó thường chỉ xác định cú pháp của tiêu chuẩn. Ví dụ, họ sẽ nói: "Định dạng dòng bit phải như thế này", "Ở 0x810429AABđây sẽ được dịch sang đó", v.v. Thông thường họ cung cấp một bộ mã hóa và giải mã tham chiếu, nhưng sau đó một bộ mã hóa được viết như thế nào để khớp với như vậy định dạng hoàn toàn là tùy thuộc vào nhà sản xuất.

Đây là lý do tại sao bạn sẽ tìm thấy rất nhiều bộ mã hóa cho cùng một codec, và một số trong số chúng thậm chí là thương mại.

Một ví dụ điển hình - H.264

Trước khi chúng ta trộn lẫn thuật ngữ, hãy lấy một ví dụ. Hãy xem xét trường hợp cho H.264 . Tên của chuẩn là H.264 - đó không phải là tên của bộ mã hóa thực tế. Mainconcept là một bộ mã hóa thương mại rất tốt, trong khi x264 là một mã nguồn mở và miễn phí. Cả hai yêu cầu để cung cấp chất lượng tốt, tất nhiên.

Thực tế là bạn có thể tối ưu hóa mã hóa tạo nên sự cạnh tranh ở đây. Cả hai bộ mã hóa sẽ cung cấp một dòng bit được tiêu chuẩn hóa mà luôn có thể được giải mã bằng bộ giải mã tương thích H.264.

Tóm tắt

Vì vậy, tất cả trong tất cả, hãy nói rằng một bộ mã hóa sẽ:

  • lấy khung hình video
  • tạo ra một dòng bit hợp lệ

Dòng bit sau đó được ghép vào một thùng chứa.

Bộ giải mã sẽ:

  • lấy dòng bit hợp lệ đó
  • xây dựng lại các khung hình video từ nó

Cả hai đều phù hợp với một tiêu chuẩn codec. Đó là tất cả!


Codec hiện tại

Những ngày này, có lẽ bạn sẽ chỉ tìm thấy các video được mã hóa bằng các codec tôi sẽ đề cập dưới đây. Điều thú vị là hầu hết tất cả chúng đều được tạo bởi Nhóm chuyên gia hình ảnh chuyển động (MPEG). Nhưng cũng có một số loại tiền mã hóa miễn phí bản quyền khác, ví dụ như các loại được tạo bởi Google hoặc Liên minh cho phương tiện mở, là đối thủ cạnh tranh của các tiêu chuẩn MPEG.

Lưu ý rằng "MPEG" có thể đề cập đến cả codec và container, như bạn sẽ thấy bên dưới. Điều này làm tăng thêm sự nhầm lẫn, nhưng chỉ biết rằng "MPEG" không có nghĩa gì cả, ví dụ: "Tôi có một tệp ở định dạng MPEG" rất mơ hồ ".

MPEG-2

MPEG-2 khá cũ. Bản phát hành công khai đầu tiên của nó là từ năm 1996. Video MPEG-2 chủ yếu được sử dụng cho phát sóng DVD và TV, ví dụ DVB-T hoặc vệ tinh và các ứng dụng cũ trong đó khả năng tương thích là quan trọng. Các video MPEG-2 hầu hết được tìm thấy trong một thùng chứa .MPG .

MPEG-4 Phần 2

Đây có lẽ là cái được sử dụng chủ yếu để mã hóa video cho web vào giữa những năm 2000, nhưng nó đã được thay thế trong thời gian đó. Nó cung cấp chất lượng tốt ở kích thước tệp thực tế, điều đó có nghĩa là bạn có thể ghi toàn bộ phim có thời lượng 90 phút vào CD 600 MB (trong khi với MPEG-2, bạn sẽ cần DVD, xem câu trả lời của tôi ở đây ). Nó không hoạt động tốt cho nội dung HD hoặc 4K nữa.

Một số bộ mã hóa xuất video MPEG-4 Phần 2 là DivX , XviD có nguồn gốc mở của nó và Nero Digital .

Các video MPEG-4 Phần 2 hầu hết đều có trong một thùng chứa AVI , nhưng MP4 cũng được nhìn thấy thường xuyên.

MPEG-4 Phần 10 / AVC / H.264

Điều này còn được gọi là Mã hóa video nâng cao MPEG-4 (AVC) hoặc H.264 ; nó là codec được sử dụng nhiều nhất hiện nay Nó cung cấp chất lượng tốt ở kích thước tệp nhỏ và do đó hoàn toàn phù hợp cho tất cả các loại video cho Internet hoặc thiết bị di động. Bạn sẽ tìm thấy H.264 trong hầu hết mọi ứng dụng hiện đại, từ điện thoại đến máy quay phim. Trên các đĩa Blu-ray, video hiện được mã hóa thành H.264.

Một số bộ mã hóa cho nó là: x264 , NVENC (từ NVIDIA), Mainconcept . Các video chủ yếu có trong các thùng chứa MP4 , MKV hoặc MOV .

HEVC / H.265

Còn được gọi là MPEG-H Phần 2, đây là sự kế thừa của MPEG-4 Phần 10 / AVC / H.264. Nó nhắm đến độ phân giải cao hơn (lên tới 8K ) và có thể cung cấp hiệu suất mã hóa cao hơn tới 50% (về chất lượng so với bitrate) so với H.264 ( ví dụ, xem bài viết này ).

Tiêu chuẩn được công bố vào năm 2013, và dần dần, codec bắt đầu được sử dụng ngày càng nhiều, ví dụ, đối với IPTV hoặc truyền video trực tuyến. HEVC cũng được Apple sử dụng để lưu trữ video và hình ảnh (sử dụng HEIF ) trên iOS. Tuy nhiên, thực tế là có nhiều nhóm bằng sáng chế liên quan đến HEVC có nhiều công ty (gần như tất cả trừ Apple) chuyển sang các lựa chọn thay thế miễn phí bản quyền. HEVC cũng không được hỗ trợ bởi tất cả các trình duyệt, khiến nó không thể sử dụng để phát trực tuyến web.

Bộ mã hóa nổi tiếng nhất là x265 . Ngoài ra còn có NVENC . Các video thường có trong các thùng chứa MP4 .

VP9 và AV1

VP9 (sự kế thừa của VP8) là một codec chủ yếu được phát triển bởi Google. Nó là mở và miễn phí bản quyền, và được thực hiện trong nhiều trình duyệt . Chất lượng của nó gần như tốt như HEVC, và đôi khi còn tốt hơn (xem bài viết này của Netflix). VP9 là những gì bạn nhận được khi xem YouTube trên trình duyệt hỗ trợ nó.

VP9 có thể được mã hóa bằng bộ mã hóa libvpx và nó thường có trong các thùng chứa WebM hoặc MKV .

Một số công ty đã cùng nhau tạo thành một đối thủ cạnh tranh mạnh mẽ hơn với HEVC - nhưng như một sự thay thế miễn phí bản quyền. AV1 sẽ là sự kế thừa của VP9, ​​và nó dựa trên những gì được cho là trở thành VP10. Nó được hỗ trợ bởi Liên minh Truyền thông mở (được thành lập bởi Amazon, Cisco, Google, Intel, Microsoft, Mozilla và Netflix). Đọc thêm về nó ở đây .

Bộ mã hóa libaom có thể được sử dụng để tạo dòng bit AV1, nhưng nó vẫn đang thử nghiệm.


Một định dạng (container) là gì?

Cho đến bây giờ chúng tôi chỉ giải thích "dòng bit" thô, về cơ bản chỉ là dữ liệu video thực sự thô. Bạn thực sự có thể tiếp tục và xem video bằng cách sử dụng một dòng bit thô như vậy. Nhưng trong hầu hết các trường hợp đó là không đủ hoặc không thực tế.

Do đó, bạn cần phải bọc video trong một container. Có nhiều lý do tại sao:

  • Có thể bạn muốn một số âm thanh cùng với video
  • Có thể bạn muốn bỏ qua một phần nào đó trong video (như, "chuyển đến 1: 32: 20.12")
  • Cả âm thanh và video phải được đồng bộ hóa hoàn hảo
  • Video có thể cần được truyền qua một mạng đáng tin cậy và chia thành các gói trước khi
  • Video thậm chí có thể được gửi qua một mạng bị mất (như 3G) và chia thành các gói trước đó

Vì tất cả những lý do đó, các định dạng container được phát minh, một số đơn giản, một số nâng cao hơn. Tất cả những gì họ làm là "bọc" dòng bit video vào dòng bit khác.

Một thùng chứa sẽ đồng bộ hóa các khung hình video và âm thanh theo Dấu thời gian trình bày (PTS) của chúng, đảm bảo chúng được hiển thị cùng một lúc. Nó cũng sẽ đảm nhiệm việc thêm thông tin cho các máy chủ phát trực tuyến, nếu cần thiết, để một máy chủ phát trực tuyến biết khi nào nên gửi phần nào của tệp.

Chúng ta hãy xem một số container phổ biến.


Container phổ biến

Bạn sẽ tìm thấy các video chủ yếu được bọc trong các thùng chứa sau đây. Cũng có những cái khác ít phổ biến hơn, nhưng như tôi đã nói, hầu hết, đó là:

AVI

Audio Video Interleave - đây là bộ chứa cơ bản nhất, nó chỉ ở đó để xen kẽ âm thanh và video. Nó được viết vào năm 1992 và vẫn còn được sử dụng cho đến ngày nay, nhưng được coi là di sản, vì vậy đừng sử dụng nó nữa.

MP4

còn được gọi là MPEG-4 Phần 14 và dựa trên định dạng tệp QuickTime. Đây là định dạng chuyển sang cho video H.264, nhưng nó cũng bao bọc HEVC, MPEG-4 Phần 2 và MPEG-2.

Container này cũng có thể chỉ bao gồm âm thanh, đó là lý do tại sao bạn sẽ tìm thấy rất nhiều tệp .mp4 không có video mà là âm thanh được mã hóa AAC , cũng trong các tệp .m4a (chỉ là một phần mở rộng khác nhau). Phần mở rộng .m4v thường được lấy cho các luồng video.

MKVWebM

Matroska Video (MKV) là một định dạng tệp mở và miễn phí thường được tìm thấy ngày nay, vì nó hỗ trợ về cơ bản bất kỳ codec nào, từ H.264 đến VP9, ​​và tất nhiên cũng có nhiều codec âm thanh.

WebM dựa trên MKV và chủ yếu được sử dụng cho video VP9 và âm thanh Opus - nó là nơi chứa sự lựa chọn cho video phát trực tuyến web khi các codec này được sử dụng.

Ôi

Bộ chứa Ogg là bộ chứa lựa chọn cho bộ giải mã video Theora (và bộ giải mã âm thanh Vorbis ), cũng được tạo bởi Quỹ Xiph.Org. Nó cũng miễn phí và là nguồn mở (giống như codec).

FLV

Định dạng video Flash được tạo bởi Adobe, để sử dụng trong các ứng dụng phát trực tuyến của họ. Nó không còn được sử dụng nhiều nữa, vì cách truyền phát được thực hiện đã thay đổi đáng kể trong những năm qua.


Codec và định dạng phổ biến

Ngoài ra, cái nào sau đây là codec, cái nào là định dạng tệp và cái nào không?

  • Quicktime MOV : .mov là phần mở rộng tệp cho Định dạng tệp QuickTime , là một thùng chứa được tạo bởi Apple. Container này sau đó đã được điều chỉnh cho MP4. Nó có thể mang tất cả các loại tiền mã hóa. Quicktime thực sự là một khung phương tiện truyền thông hoàn toàn, nó không thực sự chỉ định bất kỳ codec nào theo như tôi quan tâm.
  • MPEG (1, 2, 3, 4) : Các tiêu chuẩn được xác định bởi Nhóm chuyên gia hình ảnh chuyển động. Xem bài viết của tôi ở trên để biết chi tiết.
  • WMV : Video truyền thông Windows. Đây thực sự là một codec được chứa trong bộ chứa Định dạng Hệ thống Nâng cao , sử dụng lại phần mở rộng .wmv . Lạ, nhưng đó là như vậy.
  • FFmpeg : Đây không phải là codec hay container. Nó là một thư viện các công cụ video cũng cho phép chuyển đổi giữa các codec và container khác nhau. FFmpeg dựa vào nguồn mở libavcodeclibavformatcác thư viện để tạo codec và container tương ứng. Hầu hết các công cụ video bạn tìm thấy ngày nay đều dựa trên nó.
  • AVC : Đồng nghĩa với MPEG-4 Phần 10 hoặc H.264.
  • DivX : Một loại bộ mã hóa khác cho video MPEG-4 Phần 2.
  • Xvid : Một loại bộ mã hóa cho video MPEG-4 Phần 2. Nó chỉ là mã nguồn mở, phiên bản miễn phí của DivX, tất nhiên đã dẫn đến một số tranh cãi.
  • H.264 : Đồng nghĩa với MPEG-4 Phần 10 hoặc AVC.

Còn một chú ý đáng nói:

Tôi thậm chí có sử dụng thuật ngữ chính xác?

Tôi đoán một lần sẽ thích sử dụng cụ thể "codec" và "container" thay vì "format" để tránh hiểu lầm. Một định dạng về mặt lý thuyết có thể là bất cứ điều gì, bởi vì cả codec container đều chỉ định một định dạng (tức là cách dữ liệu nên được biểu diễn).

Điều đó đang được nói, thuật ngữ FFmpeg sẽ sử dụng "định dạng" cho container. Điều này cũng là do sự khác biệt giữa:

  • libavcodec, thư viện mã hóa / giải mã
  • libavformat, thư viện cho các container

33
Bây giờ, đó là những gì người ta có thể gọi đúng khi trả lời một câu hỏi. Làm tốt.
Francesco

1
Câu trả lời tuyệt vời, nhưng bạn đã bỏ lỡ định dạng container Ogg.
Ignacio Vazquez-Abrams

7
Đây là câu trả lời tuyệt vời nhất mà tôi đã thấy trong một thời gian. Cảm ơn rất nhiều cho những lời giải thích tuyệt vời! :)
Mehrdad

@Mehrdad Vui mừng tôi có thể làm sáng tỏ chủ đề này. Cảm ơn bạn :)
slhck

1
Đôi khi bạn ước mình có thể thực hiện nhiều câu trả lời cho một câu trả lời :)
Dolf Andringa

3

Nói chung, định dạng 'phương tiện' thực sự là một thùng chứa, chứa một luồng âm thanh (của một số codec âm thanh) và một luồng video (của một số codec video) và đôi khi là thông tin bổ sung. hầu hết các 'tệp' bạn có một kiểu tệp dựa trên vùng chứa và không phải là codec

FFmpeg không phải là một thùng chứa cũng không phải là một codec - đó là một bộ thư viện, codec và phần mềm linh hoạt để chuyển đổi các tập tin làm nền tảng cho nhiều bộ chuyển đổi và máy nghe nhạc.

H.264 / AVC và xvid / divx là codec

AVI (mà các tệp divx / xvid là), mp4, mpeg là các thùng chứa.

Tôi không chắc chắn về quicktime Mov - .mov là một container, quicktime là một codec.


Không có codec "Quicktime". Quicktime là một khung đa phương tiện, bao gồm .mov container, phần mềm để mã hóa, giải mã và hiển thị một loạt các codec, cũng như các sự tò mò khác như Quicktime VR.
stib

1

codeccontainer (định dạng tệp). Codec mô tả cách dữ liệu được mã hóa / giải mã. Cái khác mô tả cách dữ liệu được mã hóa được đặt bên trong tệp.

Hầu hết các trình phát phương tiện hỗ trợ nhiều loại codec và container. Điều này thật khó hiểu, vì vậy tôi khuyên bạn nên đọc tài liệu tham khảo của tôi để biết thêm thông tin


-1

Định dạng là tên được đặt cho một loại định dạng tệp và loại nén cụ thể (hầu hết video được nén để giảm kích thước) và codec là thứ thực sự có thể nén, đọc và dịch nó thành video bạn nhìn thấy bằng cách giải nén nó . Nói cách khác, một là một loại tệp, nhưng loại kia là một phần mềm.

Chúng tôi thường đề cập đến hầu hết các video theo tên định dạng, vì vậy Quicktime MOV, MPEG và WMV là các định dạng.

FFmpeg (tôi chưa bao giờ nghe về điều này) dường như là tên của một phần mềm để chuyển đổi các định dạng khác nhau sang các định dạng khác.

AVC và H.264 giống nhau và là định dạng để mã hóa video HD.

DivX là một codec được bán thương mại.

Xvid là một codec cho MPEG-4.


1
ffmpeg có khá nhiều phần phụ trợ cho 99% bộ chuyển đổi FOSS.
Journeyman Geek

Câu trả lời này là sai. Trong số 7 câu chỉ có số 6 và 7 là chính xác, ngay cả những câu thiếu chi tiết.
jiggunjer
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.