Chuyển đổi nội dung nghe nhìn

Derek Herman
Derek Herman
Joe Medley
Joe Medley

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ả các quy trình, nhưng không phải thao tác nào cũng có thể thực hiện trong cả hai ứng dụng.

Trong nhiều trường hợp, các lệnh chúng tôi đ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 khi thực sự được sử dụng. Ví dụ: không có gì ngăn bạn đặt tốc độ bit của tệp đầu ra trong cùng một thao tác với hoạt động chuyển đổi tệp. Trong bài viết này, để đảm bảo sự rõ ràng, chúng tôi thường trình bày các thao tác này dưới dạng các lệnh riêng biệt.

Quá trình chuyển đổi được thực hiện bằng các ứng dụng sau:

Đặc tính màn hình

Bạn có thể sử dụng cả Shaka Packager và FFmpeg để kiểm tra nội dung của tệp đa phương tiện, sau đó hiển thị các đặc điểm của 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ác đặc điểm sử dụng Shaka Packager

packager input=glocken.mp4 --dump_stream_info

Kết quả 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 sử dụng FFmpeg

ffmpeg -i glocken.mp4

Kết quả 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 ẩn dữ liệu 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.

Ngả lưng 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

Bảo mật 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 lại âm thanh và video vào 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à điều mà FFmpeg có thể xử lý khá tốt nhưng Shaka Packager hiện chưa 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ộ hoá trong khi phát, hãy chèn 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ó 2 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à tính năng Phát trực tuyến thích ứng động qua HTTP (DASH). Đây là một kỹ thuật truyền trực tuyến theo tốc độ bit thích ứng và phương pháp dựa trên tiêu chuẩn web để trình bày video theo yêu cầu. Thứ hai là phát trực tiếp qua HTTP (HLS), đây là tiêu chuẩn của Apple đối với tính năng 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 đa phương tiện (MPD) từ 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)

Các ví dụ này tạo tệp đầu ra M3U8 từ luồng âm thanh và video, là 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"

Giờ đây, hy vọng rằng chúng ta đã nắm rõ cách chuyển đổi tệp, giờ đây, chúng ta có thể tiếp tục tìm hiểu về Mã hoá nội dung nghe nhìn dựa trên những điều đã tìm hiểu trong bài viết này.