이 도움말에서는 미디어 파일의 특정 특성을 변환하고 조작하는 데 사용되는 몇 가지 일반적인 명령어를 알아봅니다. 모든 절차에 동일한 작업을 표시하려고 했지만 두 애플리케이션 모두에서 모든 작업이 가능한 것은 아닙니다.
표시되는 명령어는 대부분 단일 명령줄 작업으로 결합될 수 있으며 실제로 사용될 때는 결합됩니다. 예를 들어 파일 변환과 동일한 작업에서 출력 파일의 비트 전송률을 설정하는 데 아무런 문제가 없습니다. 이 도움말에서는 명확성을 위해 이러한 작업을 별도의 명령어로 표시하는 경우가 많습니다.
다음 애플리케이션으로 전환이 이루어집니다.
디스플레이 특성
Shaka Packager와 FFmpeg는 모두 미디어 파일의 콘텐츠를 검사한 후 스트림의 특성을 표시하는 데 사용할 수 있습니다. 그러나 둘 다 동일한 미디어에 대해 서로 다른 출력을 제공합니다.
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
오디오 및 동영상 스트림을 분리 (디뮤싱)
Shaka Packager는 파일을 변환할 때 디뮤싱이 필요합니다. 이는 미디어 프레임워크를 사용하는 경우에도 필요합니다.
Shaka 패키저 디멀티플렉싱
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 디멀티플렉싱
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
오디오 및 동영상 스트림 리믹스 (결합)
경우에 따라 오디오와 동영상을 단일 컨테이너에 다시 결합해야 할 수 있습니다. 특히 미디어 프레임워크를 사용하지 않는 경우 이는 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
VOD 및 라이브 스트리밍
이 도움말에서는 두 가지 유형의 스트리밍 프로토콜을 설명합니다. 첫 번째는 적응형 비트 전송률 스트리밍 기술인 DASH (Dynamic Adaptive Streaming over HTTP)로, 주문형 동영상을 제공하는 웹 표준 기반 메서드입니다. 두 번째는 웹의 라이브 스트리밍 및 주문형 동영상을 위한 Apple의 표준인 HTTP 라이브 스트리밍 (HLS)입니다.
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
이 예에서는 오디오 및 동영상 스트림에서 UTF-8 인코딩된 멀티미디어 재생목록인 M3U8
출력 파일을 생성합니다.
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"
이제 파일을 변환하는 방법을 잘 이해했으므로 이 도움말에서 배운 내용을 바탕으로 다음으로 미디어 암호화에 대해 알아보겠습니다.