Trong bài viết này, chúng ta sẽ tìm hiểu một số lệnh phổ biến để chuyển đổi và thao tác với các đặc điểm cụ thể của tệp nội dung nghe nhìn. Mặc dù chúng tôi đã cố gắng hiển thị các thao tác tương đương cho tất cả quy trình, nhưng không phải thao tác nào cũng thực hiện được trong cả hai ứng dụng.
Trong nhiều trường hợp, các lệnh mà chúng ta đang hiển thị có thể được kết hợp trong một thao tác dòng lệnh và sẽ được sử dụng thực sự. Ví dụ: không có gì cản trở bạn đặt tốc độ bit của tệp đầu ra trong cùng một thao tác như lượt chuyển đổi tệp. Trong bài viết này, chúng tôi thường hiển thị các thao tác này dưới dạng các lệnh riêng biệt để cho rõ ràng.
Quá trình chuyển đổi được thực hiện với các ứng dụng sau:
Đặc tính màn hình
Bạn có thể dùng cả Shaka Packager và FFmpeg để kiểm tra nội dung của tệp đa phương tiện rồi hiển thị các đặc điểm của một luồng. Tuy nhiên, cả hai đều cung cấp đầu ra khác nhau cho cùng một nội dung nghe nhìn.
Đặc điểm khi sử dụng Shaka Packager
packager input=glocken.mp4 --dump_stream_info
Kết quả đầu ra sẽ có dạng như 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
Đặc điểm khi sử dụng FFmpeg
ffmpeg -i glocken.mp4
Kết quả đầu ra sẽ có dạng như sau:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'glocken.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.83.100
Duration: 00:00:10.03, start: 0.000000, bitrate: 8063 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 1920x1080, 7939 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, 127 kb/s (default)
Metadata:
handler_name : SoundHandler
At least one output file must be specified
Demux (tách riêng) luồng âm thanh và video
Shaka Packager yêu cầu giải pháp phân tách khi chuyển đổi tệp. Đây cũng là yêu cầu bắt buộc để sử dụng khung nội dung đa phương tiện.
Hủy kết nối Shaka Packager
MP4
packager input=myvideo.mp4,stream=video,output=myvideo_video.mp4
packager input=myvideo.mp4,stream=audio,output=myvideo_audio.m4a
hoặc:
packager \
input=myvideo.mp4,stream=video,output=myvideo_video.mp4 \
input=myvideo.mp4,stream=audio,output=myvideo_audio.m4a
WebM
packager \
input=myvideo.webm,stream=video,output=myvideo_video.webm \
input=myvideo.webm,stream=audio,output=myvideo_audio.webm
Chia sẻ kết nối FFmpeg
MP4
ffmpeg -i myvideo.mp4 -vcodec copy -an myvideo_video.mp4
ffmpeg -i myvideo.mp4 -acodec copy -vn myvideo_audio.m4a
WebM
ffmpeg -i myvideo.webm -vcodec copy -an myvideo_video.webm
ffmpeg -i myvideo.webm -acodec copy -vn myvideo_audio.webm
Remux (kết hợp) luồng âm thanh và video
Trong một số trường hợp, bạn sẽ cần kết hợp âm thanh và video lại thành một vùng chứa duy nhất. Đặc biệt là khi không sử dụng khung nội dung đa phương tiện. Đây là tính năng mà FFmpeg có thể xử lý khá tốt và Shaka Packager hiện không hỗ trợ.
ffmpeg -i myvideo_video.webm -i myvideo_audio.webm -c copy myvideo.webm
Thay đổi đặc điểm
Tốc độ bit
Đối với FFmpeg, chúng ta có thể thực hiện việc này trong khi chuyển đổi sang .mp4
hoặc .webm
.
ffmpeg -i myvideo.mov -b:v 350K myvideo.mp4
ffmpeg -i myvideo.mov -vf setsar=1:1 -b:v 350K myvideo.webm
Kích thước (độ phân giải)
ffmpeg -i myvideo.webm -s 1920x1080 myvideo_1920x1080.webm
Loại tệp
Shaka Packager không thể xử lý các tệp .mov
nên không thể dùng để chuyển đổi các tệp từ định dạng đó.
.mov
đến .mp4
ffmpeg -i myvideo.mov myvideo.mp4
.mov
đến .webm
ffmpeg -i myvideo.mov myvideo.webm
Đồng bộ hoá âm thanh và video
Để đảm bảo âm thanh và video đồng bộ hóa trong khi phát, hãy chèn các khung hình chính.
ffmpeg -i myvideo.mp4 -keyint_min 150 -g 150 -f webm -vf setsar=1:1 out.webm
MP4/H.264
ffmpeg -i myvideo.mp4 -c:v libx264 -c:a copy myvideo.mp4
Âm thanh cho MP4
ffmpeg -i myvideo.mp4 -c:v copy -c:a aac myvideo.mp4
WebM/VP9
ffmpeg -i myvideo.webm -v:c libvpx-vp9 -v:a copy myvideo.webm
Âm thanh cho WebM
ffmpeg -i myvideo.webm -v:c copy -v:a libvorbis myvideo.webm
ffmpeg -i myvideo.webm -v:c copy -v:a libopus myvideo.webm
Video theo yêu cầu và phát trực tiếp
Có hai loại giao thức truyền trực tuyến mà chúng tôi sẽ minh hoạ trong bài viết này. Đầu tiên là Truyền phát thích ứng động qua HTTP (DASH), một kỹ thuật truyền trực tuyến với tốc độ bit thích ứng và phương thức trình bày video theo yêu cầu dựa trên tiêu chuẩn web. Loại thứ hai là Phát trực tiếp qua HTTP (HLS), đây là tiêu chuẩn của Apple để phát trực tiếp và video theo yêu cầu trên web.
DASH/MPD
Ví dụ này tạo tệp đầu ra Mô tả bản trình bày nội dung nghe nhìn (MPD) từ các luồng âm thanh và video.
packager \
input=myvideo.mp4,stream=audio,output=myvideo_audio.mp4 \
input=myvideo.mp4,stream=video,output=myvideo_video.mp4 \
--mpd_output myvideo_vod.mpd
HLS (Phát trực tuyến dựa trên HTTP)
Những ví dụ này tạo một tệp đầu ra M3U8
từ các luồng âm thanh và video. Đây là một danh sách phát đa phương tiện được mã hoá UTF-8.
ffmpeg -i myvideo.mp4 -c:a copy -b:v 8M -c:v copy -f hls \
-hls_time 10 -hls_list_size 0 myvideo.m3u8
HOẶC:
packager \
'input=myvideo.mp4,stream=video,segment_template=output$Number$.ts,playlist_name=video_playlist.m3u8' \
'input=myvideo.mp4,stream=audio,segment_template=output_audio$Number$.ts,playlist_name=audio_playlist.m3u8,hls_group_id=audio,hls_name=ENGLISH' \
--hls_master_playlist_output="master_playlist.m3u8"
Hy vọng rằng giờ đây, chúng ta đã nắm rõ cách chuyển đổi tệp, chúng ta có thể tiếp tục tìm hiểu về nội dung Mã hoá nội dung nghe nhìn.