미디어를 사용하려면 비트 전송률이나 해상도와 같은 미디어 파일의 특성을 변경해야 하는 경우가 많습니다. 간단한 시작 방법을 찾는 일은 꽤 두려울 수 있습니다. 이 페이지에서는 사용되는 도구와 이러한 도구를 빠르게 설치하는 방법을 알아봅니다.
먼저 두 가지 일반적인 명령줄 미디어 유틸리티인 Shaka Packager 및 FFmpeg의 기본 사용법을 설명한 후 도구를 빠르게 설치하는 방법을 안내합니다. 두 가지 신청서를 다루는 이유는 무엇인가요? 둘 다 그 자체로 강력하고 유용하지만 웹용 미디어를 준비하는 데 필요한 모든 기능을 제공하지는 않습니다. 또한 이 두 애플리케이션의 더 많은 일반적인 작업을 보여주는 미디어 변환 및 미디어 암호화 페이지도 만들었습니다.
이러한 애플리케이션은 파일 조작 작업에 사용할 수 있는 유일한 옵션은 아니지만 가장 일반적이고 강력한 두 가지 옵션입니다. 다른 옵션으로는 GUI 애플리케이션 Miro, HandBrake, VLC가 있습니다. Zencoder, Amazon Elastic Encoder, Google Transcoder API와 같은 인코딩/트랜스코딩 서비스도 있습니다.
샤카 패키지러
Shaka Packager는 무료 미디어 패키징 SDK입니다. 사이트에서 미디어 플레이어를 사용하는 경우 Shaka Packager를 사용하여 파일을 준비합니다. 가장 일반적인 두 가지 동영상 스트리밍 프로토콜인 HTTP 동적 적응형 스트리밍 (DASH) 또는 HTTP 라이브 스트리밍 (HLS)의 변환을 지원합니다. Shaka Packager는 일반 암호화 및 Widevine 디지털 권리 관리 (DRM)와 같은 주요 보안 기능을 지원합니다. 라이브 스트리밍 및 주문형 동영상도 처리할 수 있습니다.
패키지에 명시된 내용과 달리 이 유틸리티는 C++ 개발자 이상의 사용자를 위한 것입니다. 미디어 소프트웨어를 빌드하기 위한 라이브러리로 사용하거나 웹 재생을 위해 미디어 파일을 준비하는 명령줄 유틸리티로 사용할 수 있습니다. 후자의 기능이 YouTube에 유용합니다. 실제로 웹 미디어 제작자의 경우 Shaka Packager는 값비싼 상용 애플리케이션에 돈을 지출하지 않고도 일부 작업을 할 수 있는 유일한 방법입니다.
다음은 Shaka Packager 명령어의 기본 패턴입니다.
packager stream_descriptor [stream_descriptor-2 [stream_descriptor-n]] [flags]
packager -help
를 입력하면 이 결과가 표시되지 않습니다. 이 예시는 추론하기 쉽고 Shaka 패키저 문서의 예시를 반영합니다. 패턴에는 여러 stream_descriptor
항목이 있습니다. 여기서는 보여주지 않지만 단일 명령어로 파일의 동영상 스트림과 오디오 스트림을 별도로 조작할 수 있습니다.
이 기본 패턴을 파일 특성을 표시하는 간단한 사용과 비교해 보세요. 이 예에서는 동등한 부분을 나열했습니다.
packager stream_descriptor [stream_descriptor-n] [flags]
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
미디어 파일 기본사항에 설명된 특성을 살펴보고 몇 가지 사항을 확인합니다. 높이와 너비가 풀 HD에 적합하며 오디오 및 동영상 코덱이 컨테이너 유형에 권장되는 코덱(오디오의 경우 AAC, 동영상의 경우 H264)입니다. 또한 스트림은 숫자로 식별됩니다. 오디오와 동영상을 별도로 조작하는 작업에 유용합니다.
위 출력에는 비트 전송률이 표시되지 않습니다. 누락된 항목이 있더라도 이 출력은 읽기 쉽기 때문에 가능하면 항상 사용합니다. 비트 전송률과 같이 Shaka Packager가 얻을 수 없는 정보가 필요할 때 FFmpeg를 사용합니다.
FFmpeg
FFmpeg은 미디어 파일을 녹화, 변환, 스트리밍하는 무료 애플리케이션이기도 합니다. 이 도구의 기능은 Shaka Packager의 기능보다 나쁘거나 좋지 않습니다. 단지 다르기만 할 뿐입니다.
FFmpeg 명령어의 기본 패턴은 다음과 같습니다.
ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output
Shaka Packager와 마찬가지로 이 애플리케이션은 여러 스트림을 처리할 수 있습니다. 일부 옵션은 여러 위치에서 사용되며 명령어의 위치에 따라 파일 출력을 다르게 조작합니다. Stack Overflow의 FFmpeg 질문 및 유사한 사이트를 살펴볼 때 이 점을 유의하세요.
파일 특성을 표시하는 예와 기본 패턴을 다시 비교해 보겠습니다.
ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output
ffmpeg -i glocken.mp4
요청한 정보 외에도 아래 예와 같이 오류 메시지도 출력됩니다. 이는 기술적으로 FFmpeg를 잘못 사용하기 때문입니다. Google에서 중요한 정보를 표시하기 때문에 Google에서 이 정보를 사용합니다.
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
Docker로 애플리케이션 설치
이 명령어를 따라 실행해 보려면 필요한 도구를 수동으로 설치하거나, 쉬운 방법으로 Docker를 사용하면 됩니다. Docker를 사용하는 것이 좋습니다. 시간을 많이 절약할 수 있기 때문입니다. 또한 빠르게 설정할 수 있는 안내도 제공해 드렸습니다.
먼저 컴퓨터의 어딘가에
media-tools
이라는 새 디렉터리를 만듭니다. 원하는 이름을 사용할 수 있습니다. 다음 안내에서는media-tools
을 디렉터리 이름으로 사용한다고 가정합니다.media-tools
내에docker
및media
디렉터리를 만듭니다. 이렇게 하면media
디렉터리가 빌드 컨텍스트에서 제외됩니다. 이는media
가 작업을 수행할 파일이 저장되는 위치이며 그중 일부는 상당히 클 수 있기 때문에 중요합니다.Dockerfile
를media-tools
에 직접 배치하면 나중에 설치된 버전을 변경하기 위해 이미지를 다시 빌드할 때 이미지 빌드 속도가 느려집니다./media-tools/docker/Dockerfile
를 만들고 다음 빌드 안내를 추가합니다.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"]
이미지를 빌드합니다.
docker build -t media-tools ./docker
이미지를 대화형 셸로 실행합니다. Linux의 경우:
docker run -w /media -v ${PWD}/media:/media -it --rm media-tools /media #
Windows:
docker run -w /media -v %cd%/media:/media -it --rm media-tools /media #
이미지를 실행하는 동안 FFmpeg 및 Shaka Packager 버전을 확인하여 ffmpeg -version
및 packager --version
를 실행하여 모든 것이 성공적으로 실행되었는지 확인할 수 있습니다. 출력은 다음과 같습니다.
/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
이제 Shaka Packager 및 FFmpeg를 사용해 보았으므로 다음으로 미디어 스트리밍 기본사항과 같은 기본 개념을 계속 학습할 수 있습니다.