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

Derek Herman
Derek Herman
Joe Medley
Joe Medley

미디어를 사용하려면 비트 전송률이나 해상도와 같은 미디어 파일의 특성을 변경해야 하는 경우가 많습니다. 시작하는 데 도움이 되는 간단한 방법을 찾는 것은 쉽지 않을 수 있습니다. 이 페이지에서는 사용되는 도구와 이를 빠르게 설치하는 방법을 알아봅니다.

먼저 두 가지 일반적인 명령줄 미디어 유틸리티인 Shaka PackagerFFmpeg의 기본 사용법을 설명한 다음 도구를 빠르게 설치하는 방법을 안내합니다. 두 가지 신청서를 다루는 이유는 무엇인가요? 둘 다 그 자체로 강력하고 유용하지만 웹용 미디어를 준비하는 데 필요한 모든 기능을 제공하지는 않습니다. 또한 이 두 애플리케이션의 더 많은 일반적인 작업을 보여주는 미디어 변환미디어 암호화 페이지도 만들었습니다.

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

Shaka Packager

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

패키지에 표시된 내용과 달리 이 유틸리티는 C++ 개발자 외에도 다른 개발자에게도 유용합니다. 미디어 소프트웨어를 빌드하기 위한 라이브러리로 사용하거나 웹 재생을 위해 미디어 파일을 준비하기 위한 명령줄 유틸리티로 사용할 수 있습니다. 여기서는 후자가 유용합니다. 실제로 웹 미디어 제작자의 경우 Shaka 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를 잘못 사용하기 때문입니다. 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를 사용하는 것이 좋습니다. 시간을 많이 절약할 수 있습니다. 또한 빠르게 설정할 수 있는 안내도 제공해 드렸습니다.

  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 및 Shaka Packager 버전을 확인하여 ffmpeg -versionpackager --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를 사용해 보았으므로 다음으로 미디어 스트리밍 기본사항과 같은 기본 개념을 계속 학습할 수 있습니다.