미디어 애플리케이션 기본사항

데릭 허먼
데릭 허먼
조 메들리
조 메들리

미디어로 작업하려면 비트 전송률이나 해상도와 같은 미디어 파일의 특성을 변경해야 하는 경우가 많습니다. 간단하게 시작하는 방법을 찾는 것은 꽤 부담스러울 수 있습니다 이 페이지에서는 사용되는 도구와 빠른 설치 방법을 알아봅니다.

먼저 일반적인 두 가지 명령줄 미디어 유틸리티인 Shaka PackagerFFmpeg의 기본 사용법을 설명하고, 도구를 빠르게 설치할 수 있도록 지원합니다. 왜 두 가지 응용 분야를 다룰까요? 두 가지 모두 그 자체로 강력하고 유용하지만, 웹용 미디어를 준비하는 데 필요한 모든 기능이 있는 것은 아닙니다. 또한 이 두 애플리케이션의 더 많은 일반적인 작업을 보여주는 미디어 변환미디어 암호화 페이지도 만들었습니다.

이러한 애플리케이션이 파일 조작 작업에 사용할 수 있는 유일한 옵션은 아니지만, 가장 일반적이고 강력한 두 가지 옵션입니다. 다른 옵션으로는 GUI 애플리케이션 Miro, HandBrake, VLC가 있습니다. Zencoder, Amazon Elastic Encoder, Google Transcoder API와 같은 인코딩/트랜스코딩 서비스도 있습니다.

샤카 패키저

Shaka Packager는 무료 미디어 패키징 SDK입니다. 사이트에서 미디어 플레이어를 사용하는 경우 파일을 준비할 때 Shaka Packager를 사용합니다. 가장 일반적인 두 가지 동영상 스트리밍 프로토콜인 HTTP 동적 적응형 스트리밍 (DASH) 또는 HTTP 실시간 스트리밍 (HLS)의 변환을 지원합니다. Shaka Packager는 일반 암호화 및 Widevine 디지털 권한 관리 (DRM)와 같은 주요 보안 기능을 지원합니다. 또한 라이브 스트리밍과 VOD도 처리할 수 있습니다.

패키지에 명시된 내용과 달리 이 유틸리티는 C++ 개발자 이상을 위한 것입니다. 이 도구는 미디어 소프트웨어를 빌드하기 위한 라이브러리 및 웹 재생용 미디어 파일을 준비하는 명령줄 유틸리티로 사용할 수 있습니다. 여기서 유용한 것은 후자의 용량입니다. 실제로 웹 미디어 제작자에게 Shaaka Packager는 값비싼 상용 애플리케이션에 비용을 지출하지 않고 일부 작업을 수행할 수 있는 유일한 방법입니다.

다음은 Shaka Packager 명령어의 기본 패턴입니다.

packager stream_descriptor [stream_descriptor-2 [stream_descriptor-n]] [flags]

packager -help를 입력하면 표시되는 것과는 다릅니다. 이 예는 추론이 더 쉬우며 Shaka Packager 문서의 예를 반영합니다. 패턴에는 여러 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를 잘못 사용했기 때문입니다. 우리가 중요하게 생각하는 정보를 표시하기 때문에 이 정보를 사용합니다.

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를 사용하면 많은 시간을 절약할 수 있으므로 Docker를 사용하는 것이 좋습니다. 또한 Google에서 빠르게 설정할 수 있는 방법을 제공해 드리고 있습니다.

  1. 먼저 컴퓨터 어딘가에 media-tools라는 새 디렉터리를 만듭니다. 원하는 이름을 사용할 수 있습니다. 다음 안내에서는 media-tools을 디렉터리 이름으로 사용한다고 가정합니다.

  2. media-tools 안에 dockermedia 디렉터리를 만듭니다. 이렇게 하면 media 디렉터리가 빌드 컨텍스트에서 제외됩니다. 이것이 중요한 이유는 media는 작업을 실행할 파일이 저장되는 위치이며 일부 파일은 상당히 클 수 있기 때문입니다. Dockerfilemedia-tools에 직접 배치하면 나중에 다시 빌드할 경우(예: 설치된 버전 변경) 이미지 빌드 속도가 느려질 수 있습니다.

  3. /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"]
    
  4. 이미지를 빌드합니다.

    docker build -t media-tools ./docker
    
  5. 이미지를 대화형 셸로 실행합니다. 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 -versionpackager --version를 실행하여 FFmpeg와 Shaka Packager 버전을 확인하여 모든 것이 성공했는지 확인할 수 있습니다. 출력은 다음과 같습니다.

/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를 사용해 보았으므로 이제 기본 개념인 미디어 스트리밍 기본사항을 계속 학습할 수 있습니다.