Khi xử lý nội dung nghe nhìn, bạn thường phải thay đổi các đặc điểm của tệp nội dung nghe nhìn, chẳng hạn như tốc độ bit hoặc độ phân giải. Việc tìm một cách đơn giản để bắt đầu có thể khá đáng lo ngại. Trên trang này, bạn sẽ tìm hiểu về các công cụ được dùng và cách cài đặt nhanh chóng.
Trước tiên, chúng tôi mô tả cách sử dụng cơ bản cho hai tiện ích đa phương tiện dòng lệnh phổ biến: Trình đóng gói Shaka và FFmpeg, sau đó chúng tôi sẽ giúp bạn nhanh chóng cài đặt các công cụ này. Tại sao phải đề cập đến hai ứng dụng? Mặc dù cả hai đều mạnh mẽ và hữu ích, nhưng không có công cụ nào có đủ mọi thứ cần thiết để chuẩn bị nội dung nghe nhìn cho web. Chúng tôi cũng đã tạo các trang Chuyển đổi nội dung nghe nhìn và Mã hoá nội dung nghe nhìn để hiển thị nhiều thao tác phổ biến hơn với hai ứng dụng này.
Các ứng dụng này không phải là tuỳ chọn duy nhất hiện có để thực hiện các thao tác đối với tệp, nhưng là hai trong số những ứng dụng phổ biến và mạnh mẽ nhất. Các tuỳ chọn khác bao gồm ứng dụng GUI Miro, HandBrake và VLC. Ngoài ra, còn có các dịch vụ mã hoá/chuyển mã như Zencoder, Amazon Elastic Encoder và Google Transcoder API.
Bộ đóng gói Shaka
Trình đóng gói Shaka là một SDK đóng gói nội dung đa phương tiện miễn phí. Nếu đang sử dụng trình phát nội dung đa phương tiện trên trang web, bạn nên dùng Trình đóng gói Shaka để chuẩn bị các tệp. Tính năng này hỗ trợ lượt chuyển đổi cho 2 giao thức truyền video phổ biến nhất: Truyền phát thích ứng động qua HTTP (DASH) hoặc Phát trực tiếp qua HTTP (HLS). Trình đóng gói Shaka hỗ trợ các tính năng bảo mật chính: mã hoá chung và quản lý quyền kỹ thuật số (DRM) của Widevine. Lớp này cũng có thể xử lý tính năng phát trực tiếp và video theo yêu cầu.
Mặc dù nội dung trên gói có ghi như vậy, nhưng tiện ích này không chỉ dành cho các nhà phát triển C++. Bạn có thể sử dụng thư viện này vừa làm thư viện để xây dựng phần mềm đa phương tiện vừa làm tiện ích dòng lệnh để chuẩn bị các tệp phương tiện cho việc phát trên web. Đây là dung lượng sau cùng hữu ích cho chúng ta ở đây. Trên thực tế, đối với nhà sáng tạo nội dung đa phương tiện trên web, Trình đóng gói Shaka là cách duy nhất để thực hiện một số tác vụ mà không cần chi tiêu cho các ứng dụng thương mại đắt tiền.
Dưới đây là mẫu cơ bản cho lệnh Trình đóng gói Shaka:
packager stream_descriptor [stream_descriptor-2 [stream_descriptor-n]] [flags]
Đây không phải là nội dung bạn nhận được nếu nhập packager -help
. Ví dụ này dễ hiểu hơn và phản ánh các ví dụ trong tài liệu về Trình đóng gói Shaka. Lưu ý rằng có nhiều mục stream_descriptor
trong mẫu. Mặc dù chúng tôi không hiển thị, nhưng bạn có thể thao tác riêng luồng video và luồng âm thanh của một tệp trong một lệnh.
So sánh mẫu cơ bản này với một cách sử dụng đơn giản để hiển thị các đặc điểm của tệp. Trong ví dụ này, chúng tôi đã sắp xếp các phần tương đương.
packager stream_descriptor [stream_descriptor-n] [flags]
packager input=glocken.mp4 --dump_stream_info
Lệnh này sẽ trả về kết quả sau:
File "glocken.mp4":
Found 2 stream(s).
Stream [0] type: Video
codec_string: avc1.640028
time_scale: 30000
duration: 300300 (10.0 seconds)
is_encrypted: false
codec: H264
width: 1920
height: 1080
pixel_aspect_ratio: 1:1
trick_play_factor: 0
nalu_length_size: 4
Stream [1] type: Audio
codec_string: mp4a.40.2
time_scale: 48000
duration: 481280 (10.0 seconds)
is_encrypted: false
codec: AAC
sample_bits: 16
num_channels: 2
sampling_frequency: 48000
language: eng
seek_preroll_ns: 20833
Tìm các đặc điểm được thảo luận trong bài viết Kiến thức cơ bản về tệp nội dung nghe nhìn và lưu ý một số điều. Chiều cao và chiều rộng chính xác cho độ phân giải full HD, đồng thời bộ mã hoá và giải mã âm thanh và video nằm trong số các bộ mã hoá và giải mã ưu tiên cho loại vùng chứa, AAC cho âm thanh và H264 cho video. Ngoài ra, hãy lưu ý rằng các luồng được xác định bằng số. Các hàm này rất hữu ích cho các thao tác thao tác riêng biệt âm thanh và video.
Lưu ý rằng kết quả ở trên không hiển thị tốc độ bit. Mặc dù thiếu một số thông tin, nhưng kết quả này dễ đọc hơn, vì vậy, chúng ta sẽ sử dụng kết quả này bất cứ khi nào có thể. Khi cần thông tin mà Trình đóng gói Shaka không thể lấy, chẳng hạn như tốc độ bit, chúng ta sẽ sử dụng FFmpeg.
FFmpeg
FFmpeg cũng là một ứng dụng miễn phí để ghi, chuyển đổi và truyền trực tuyến các tệp phương tiện. Khả năng của công cụ này không tốt hơn hay kém hơn so với Shaka Packager. Chúng chỉ khác nhau.
Mẫu cơ bản cho lệnh FFmpeg có dạng như sau:
ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output
Giống như Trình đóng gói Shaka, ứng dụng này có thể xử lý nhiều luồng. Một số tuỳ chọn của lệnh này được sử dụng ở nhiều vị trí và thao tác với đầu ra tệp theo cách khác nhau tuỳ thuộc vào vị trí của các tuỳ chọn đó trong lệnh. Hãy lưu ý điều này khi bạn xem các câu hỏi về FFmpeg trên Stack Overflow và các trang web tương tự.
Chúng ta sẽ so sánh lại mẫu cơ bản với ví dụ về việc hiển thị các đặc điểm của tệp.
ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output
ffmpeg -i glocken.mp4
Ngoài thông tin mà chúng tôi yêu cầu, lệnh này cũng in thông báo lỗi như trong ví dụ bên dưới. Đó là vì về mặt kỹ thuật, đây là cách sử dụng FFmpeg không chính xác. Chúng tôi sử dụng hồ sơ này vì nó hiển thị thông tin mà chúng tôi quan tâm.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'glocken.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.17.100
Duration: 00:01:47.53, start: 0.000000, bitrate: 10715 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 1920x1080, 10579 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
handler_name : SoundHandler
At least one output file must be specified
Cài đặt ứng dụng bằng Docker
Nếu dự định làm theo và thử các lệnh của chúng tôi, bạn có thể cài đặt các công cụ cần thiết theo cách thủ công hoặc sử dụng Docker. Bạn nên sử dụng Docker, vì điều này sẽ giúp bạn tiết kiệm rất nhiều thời gian. Ngoài ra, chúng tôi cũng đã cung cấp hướng dẫn để bạn thiết lập nhanh chóng.
Bắt đầu bằng cách tạo một thư mục mới trên máy tính có tên là
media-tools
; bạn có thể sử dụng bất kỳ tên nào bạn muốn, chỉ cần lưu ý rằng hướng dẫn sau đây giả định bạn đang sử dụngmedia-tools
làm tên thư mục.Tạo thư mục
docker
vàmedia
bên trongmedia-tools
. Thao tác này sẽ tách thư mụcmedia
của bạn khỏi ngữ cảnh bản dựng. Điều này rất quan trọng vìmedia
là nơi lưu trữ các tệp mà chúng ta dự định thực hiện các thao tác và một số tệp có thể khá lớn. Việc đặtDockerfile
trực tiếp vàomedia-tools
sẽ làm chậm quá trình tạo hình ảnh nếu bạn đã từng xây dựng lại hình ảnh – có thể bạn phải thay đổi các phiên bản đã cài đặt.Tạo
/media-tools/docker/Dockerfile
và thêm hướng dẫn tạo sau đây:FROM google/shaka-packager:release-v2.4.3 as packager FROM jrottenberg/ffmpeg:4.3.2-alpine38 COPY --from=packager /usr/bin /usr/bin ENTRYPOINT ["sh"]
Tạo hình ảnh:
docker build -t media-tools ./docker
Chạy hình ảnh dưới dạng một màn hình shell tương tác. Trên Linux:
docker run -w /media -v ${PWD}/media:/media -it --rm media-tools /media #
Trên Windows:
docker run -w /media -v %cd%/media:/media -it --rm media-tools /media #
Trong khi chạy hình ảnh, bạn có thể kiểm tra phiên bản cho cả FFmpeg và Trình đóng gói Shaka để xác thực mọi thứ đã thành công bằng cách chạy ffmpeg -version
và packager --version
. Kết quả đầu ra sẽ có dạng như sau:
/media # ffmpeg -version
ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 6.4.0 (Alpine 6.4.0)
configuration: --disable-debug --disable-doc --disable-ffplay --enable-shared --enable-avresample --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-gpl --enable-libass --enable-fontconfig --enable-libfreetype --enable-libvidstab --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libxcb --enable-libx265 --enable-libxvid --enable-libx264 --enable-nonfree --enable-openssl --enable-libfdk_aac --enable-postproc --enable-small --enable-version3 --enable-libbluray --enable-libzmq --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-libopenjpeg --enable-libkvazaar --enable-libaom --extra-libs=-lpthread --enable-libsrt --enable-libaribb24 --extra-cflags=-I/opt/ffmpeg/include --extra-ldflags=-L/opt/ffmpeg/lib
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
/media # packager --version
packager version v2.4.3-dd9870075f-release
Giờ đây, khi đã thử sử dụng trình đóng gói Shaka và FFmpeg, bạn có thể tiếp tục tìm hiểu các khái niệm cơ bản, tiếp theo là Kiến thức cơ bản về truyền phát nội dung nghe nhìn.