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

Derek Herman
Derek Herman
Joe Medley
Joe Medley

미디어로 작업하려면 종종 미디어 파일의 특성을 변경해야 하는데, 더 높은 해상도를 제공합니다. 간단한 시작 방법을 찾으면 꽤 겁나기 때문입니다. 이 페이지에서는 사용되는 도구와 빠르게 설치할 수 있습니다

먼저 두 가지 일반적인 명령줄 미디어 유틸리티의 기본적인 사용법을 설명합니다. Shaka PackagerFFmpeg를 활용하시면 도구를 빠르게 설치할 수 있도록 도와드립니다. 두 가지 애플리케이션을 다루는 이유 둘 다 그 자체로 강력하고 유용하지만, 웹용 미디어를 준비하는 데 필요한 모든 것을 제공하지는 않습니다. 또한 미디어 변환미디어 암호화 이 두 가지 애플리케이션에 대한 더 일반적인 작업을 보여주는 페이지.

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

샤카 패키지러

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

패키지에 명시된 내용에도 불구하고 이 유틸리티는 C++ 이상의 있습니다. 미디어 소프트웨어 빌드를 위한 라이브러리로도 사용할 수도 있고 웹 재생을 위한 미디어 파일을 준비하는 명령줄 유틸리티입니다. 바로 후자의 용량을 제공합니다 실제로 웹 미디어 제작자의 경우 Shaka Packager는 비용을 지불하지 않고 일부 작업을 수행할 수 있는 유일한 방법임 비싼 상용 애플리케이션입니다.

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

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

packager -help을 입력하면 제대로 표시되지 않습니다. 이 예는 보다 쉽게 추론할 수 있으며, 이는 인간의 머릿속에 있는 Shaka Packager 문서 여러 개의 stream_descriptor가 있습니다. 인코더에 전달합니다. YouTube에서 보여주지는 않지만 동영상을 조작할 수 있습니다. 단일 명령으로 파일의 오디오 스트림을 개별적으로 관리합니다.

이 기본 패턴을 파일 특성을 표시하는 간단한 사용과 비교해 보세요. 예에서는 동일한 부분을 정렬했습니다.

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

요청한 정보 외에도 오류 메시지도 출력됩니다. 아래 예와 같이 지정할 수 있습니다. 기술적으로 올바르지 않기 때문입니다. 있습니다. 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를 사용하면 많은 시간을 절약할 수 있습니다. 그 외에도 에서 빠르게 설정할 수 있도록 도움말을 제공했습니다.

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

  2. media-tools 내부에 dockermedia 디렉터리를 만듭니다. 이렇게 하면 media 디렉터리가 빌드 컨텍스트에서 제외됩니다. 중요한 일인데요. media은 작업을 실행할 파일이 저장되는 곳입니다. 일부는 꽤 클 수 있습니다. Dockerfile를 이미지를 다시 빌드하면 media-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 -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를 직접 사용해 보았으므로 기본 개념을 학습한 다음 미디어 스트리밍 기본사항으로 이동합니다.