Conversion สื่อ

Derek Herman
Derek Herman
Joe Medley
Joe Medley

ในบทความนี้ เราจะเรียนรู้คำสั่งทั่วไปสำหรับการแปลงและ ควบคุมลักษณะเฉพาะของไฟล์สื่อ แม้ว่าเราจะพยายาม แสดงการดำเนินการที่เทียบเท่าสำหรับกระบวนการทั้งหมด แต่ไม่ใช่ทุกการดำเนินการ ในแอปพลิเคชันทั้งสอง

ในหลายกรณี คำสั่งที่เราแสดงอาจรวมกันไว้ในคำสั่งเดียว และจะทำงานเมื่อมีการใช้งานจริง ตัวอย่างเช่น ไม่มีสิ่งใด ซึ่งทำให้คุณไม่สามารถตั้งค่าอัตราบิตของไฟล์เอาต์พุตในการดําเนินการเดียวกันกับ การแปลงไฟล์ สำหรับบทความนี้ เรามักจะแสดงการดำเนินการเหล่านี้เป็นการดำเนินการแยกกัน เพื่อความชัดเจน

การแปลงทำได้ด้วยแอปพลิเคชันต่อไปนี้:

ลักษณะการแสดงผล

คุณสามารถใช้ทั้ง Shaka Packager และ FFmpeg เพื่อตรวจสอบเนื้อหาของสื่อ จากนั้นจะแสดงลักษณะของสตรีม แต่ทั้ง 2 อย่าง สำหรับสื่อเดียวกัน

ลักษณะเฉพาะที่ใช้ Shaka Packager

packager input=glocken.mp4 --dump_stream_info

เอาต์พุตจะมีลักษณะดังนี้

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

ลักษณะเฉพาะที่ใช้ FFmpeg

ffmpeg -i glocken.mp4

เอาต์พุตจะมีลักษณะดังนี้

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 (แยก) สตรีมเสียงและวิดีโอ

Shaka Packager ต้องใช้ไฟล์ Demux เมื่อแปลงไฟล์ ข้อกำหนดที่จำเป็น ในการใช้เฟรมเวิร์กสื่อ

Shaka Packager Demuxing

MP4

packager input=myvideo.mp4,stream=video,output=myvideo_video.mp4
packager input=myvideo.mp4,stream=audio,output=myvideo_audio.m4a

หรือ

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

FFmpeg Demuxing

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 (รวม) สตรีมเสียงและวิดีโอ

ในบางสถานการณ์ คุณจะต้องรวมเสียงและวิดีโอไว้ด้วยกัน คอนเทนเนอร์ โดยเฉพาะอย่างยิ่งเมื่อไม่ได้ใช้เฟรมเวิร์กสื่อ นี่คือ FFmpeg สามารถจัดการได้ค่อนข้างดีและเป็นสิ่งที่ Shaka Packager ยังไม่รองรับในขณะนี้

ffmpeg -i myvideo_video.webm -i myvideo_audio.webm -c copy myvideo.webm

ลักษณะการเปลี่ยนแปลง

อัตราบิต

สำหรับ FFmpeg เราก็ทำได้เมื่อแปลงเป็น .mp4 หรือ .webm

ffmpeg -i myvideo.mov -b:v 350K myvideo.mp4
ffmpeg -i myvideo.mov -vf setsar=1:1 -b:v 350K myvideo.webm

ขนาด (ความละเอียด)

ffmpeg -i myvideo.webm -s 1920x1080 myvideo_1920x1080.webm

ประเภทไฟล์

Shaka Packager ประมวลผลไฟล์ .mov ไม่ได้ จึงไม่สามารถใช้ในการแปลงได้ จากไฟล์รูปแบบนั้น

.mov ถึง .mp4

ffmpeg -i myvideo.mov myvideo.mp4

.mov ถึง .webm

ffmpeg -i myvideo.mov myvideo.webm

ซิงค์ข้อมูลเสียงและวิดีโอ

แทรกคีย์เฟรมเพื่อให้เสียงและวิดีโอซิงค์กันในระหว่างการเล่น

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

เสียงสำหรับ 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

เสียงสำหรับ 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

วิดีโอออนดีมานด์และสตรีมมิงแบบสด

มีโปรโตคอลสตรีมมิง 2 ประเภทที่เราจะแสดงในส่วนนี้ วิธีแรกคือ Dynamic Adaptive Streaming ผ่าน HTTP (DASH) ซึ่งเป็น เทคนิคการสตรีมแบบปรับอัตราบิตได้และวิธีมาตรฐานเว็บของ การนำเสนอวิดีโอออนดีมานด์ ประเภทที่ 2 คือ HTTP Live Streaming (HLS) ซึ่งเป็น มาตรฐานของ Apple สำหรับสตรีมมิงแบบสดและวิดีโอออนดีมานด์สำหรับเว็บ

DASH/MPD

ตัวอย่างนี้สร้างไฟล์เอาต์พุตของคำอธิบายงานนำเสนอสื่อ (MPD) จากสตรีมเสียงและวิดีโอ

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

ตัวอย่างเหล่านี้จะสร้างไฟล์เอาต์พุต M3U8 จากสตรีมเสียงและวิดีโอ ซึ่งเป็นเพลย์ลิสต์มัลติมีเดียที่เข้ารหัสแบบ 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

หรือทำดังนี้

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"

เมื่อเราเข้าใจวิธีแปลงไฟล์แล้ว เราสามารถต่อยอด สิ่งที่เราได้เรียนรู้ในบทความนี้และไปดูข้อมูล การเข้ารหัสสื่อเป็นลำดับถัดไป