Vùng chứa và codec

Derek Herman
Derek Herman
Joe Medley
Joe Medley

Để hỗ trợ nhiều trình duyệt, bạn cần sử dụng FFmpeg để chuyển đổi tệp .mov thành 2 vùng chứa khác nhau: vùng chứa MP4 và vùng chứa WebM. Trong thực tế, bạn có thể chỉ định một bộ mã hoá và giải mã cùng một lúc. Hiện tại, chúng ta sẽ cho phép FFmpeg sử dụng các giá trị mặc định.

Nếu bạn chưa quen với các khái niệm này, hãy đọc bài viết Kiến thức cơ bản về tệp nội dung nghe nhìn trước khi tiếp tục. Ngoài ra, nếu bạn chưa cài đặt FFmpeg, hãy đọc Kiến thức cơ bản về ứng dụng đa phương tiện để thiết lập ứng dụng bằng Docker.

Chúng tôi đang sử dụng bản cài đặt Docker đề xuất và tệp glocken.mov trong phần Chuẩn bị tệp đa phương tiện cho web được thêm bên trong thư mục media. Chúng tôi đã sử dụng FFmpeg phiên bản 4.3.2 cho tất cả các lệnh trong phần này.

Vùng chứa

Trước tiên, chúng ta cần tạo 2 vùng chứa từ tệp .mov có đuôi tệp .mp4.webm có cả luồng âm thanh và video bên trong tệp. Xem lại phần Kiến thức cơ bản về tệp phương tiện để biết thêm về vùng chứa và luồng nếu bạn không biết sự khác biệt giữa các vùng chứa và luồng.

  1. MP4

    /media # ffmpeg -i glocken.mov glocken.mp4
    
  2. WebM

    /media # ffmpeg -i glocken.mov glocken.webm
    

Quá trình tạo tệp WebM mất nhiều thời gian hơn so với tệp MP4. Không có gì đáng ngạc nhiên khi bạn nhìn vào kết quả. Mặc dù MP4 nén thành khoảng 83% kích thước của tệp gốc, nhưng WebM sẽ giảm xuống còn 78% so với kích thước gốc, nhưng có thể nhỏ hơn nhiều. Kết quả của bạn sẽ khác. Điều quan trọng cần lưu ý là FFmpeg 4.2.2 đặt tốc độ bit video mặc định thành 200k và trong 4.3.2, FFmpeg không đặt tốc độ bit mặc định. Vì vậy, video đó không còn chỉ là4% của video gốc nữa. Bạn có thể tự xem điều này bằng cách sử dụng lệnh bash ls -a trong thư mục chứa các tệp phương tiện của bạn.

Ví dụ:

/media # ls -l
-rw-r--r-- 1 root  root  12080306 Mar 7 12:16 glocken.mov
-rwx------ 1 root  root  10106446 Mar 7 12:33 glocken.mp4
-rwx------ 1 root  root   9503301 Mar 7 18:30 glocken.webm

Để tải một tệp nhỏ, bạn làm như sau:

/media # ffmpeg -i glocken.mov -b:v 200k glocken.webm
...
frame=  300 fps=3.6 q=0.0 Lsize=     483kB time=00:00:10.01 bitrate= 395.0kbits/s speed=0.121x
video:359kB audio:117kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.356068%
/media # ls -l
-rw-r--r-- 1 root  root  12080306 Mar 7 12:16 glocken.mov
-rwx------ 1 root  root  10106446 Mar 7 12:33 glocken.mp4
-rwx------ 1 root  root    494497 Mar 7 18:45 glocken.webm

Kiểm tra bài tập

Để xác minh kết quả, hãy sử dụng FFmpeg và Trình đóng gói Shaka như đã trình bày trong phần Kiến thức cơ bản về Ứng dụng đa phương tiện:

/media # packager input=glocken.mp4 --dump_stream_info
/media # ffmpeg -i glocken.mp4

Bộ mã hoá và giải mã

Tiếp theo là bộ mã hoá và giải mã. Như đã nêu trong phần Kiến thức cơ bản về tệp phương tiện, bộ mã hoá và giải mã không giống với vùng chứa (loại tệp). Hai tệp thuộc cùng một loại vùng chứa có thể chứa dữ liệu được nén bằng các bộ mã hoá và giải mã khác nhau. Ví dụ: định dạng WebM cho phép mã hoá âm thanh bằng Vorbis hoặc Opus. Để thay đổi bộ mã hoá và giải mã, chúng ta sử dụng FFmpeg. Ví dụ: lệnh này sẽ xuất ra một tệp .mkv có một bộ mã hoá và giải mã âm thanh vorbis và một bộ mã hoá và giải mã video av1.

/media # ffmpeg -i glocken.mov -c:a vorbis -c:v av1 glocken.mkv

Trong ví dụ này, cờ -c:a-c:v dùng để chỉ định bộ mã hoá và giải mã âm thanh và video tương ứng.

Trang Chuyển đổi nội dung nghe nhìn liệt kê các lệnh cần thiết để chuyển đổi bộ mã hoá và giải mã. Các bảng dưới đây tóm tắt các thư viện dùng trong FFmpeg để thực hiện chuyển đổi bộ mã hoá và giải mã cho các tệp WebM và MP4. Đây là các định dạng được đề xuất tương ứng cho DASH và HLS.

Video

Bộ mã hoá và giải mã Phần mở rộng Thư viện
av1 WebM, mkv libaom-av1
h264 MP4 libx264
vp9 WebM libvpx-vp9

Âm thanh

Bộ mã hoá và giải mã Phần mở rộng Thư viện
aac MP4 aac
opus WebM cung-thiên-bình
vorbis WebM đá libvorbis

Tiếp theo, chúng tôi sẽ hướng dẫn bạn cách thay đổi bitrate (tốc độ bit) của các tệp mới tạo.