メディアを操作するには、多くの場合、ビットレートや解像度などのメディア ファイルの特性を変更する必要があります。何から始めればよいかというと 一筋縄ではいきませんこのページでは、使用するツールと、それらのツールをすばやくインストールする方法について説明します。
まず、2 つの一般的なコマンドライン メディア ユーティリティである Shaka Packager と FFmpeg の基本的な使用方法を説明し、ツールを迅速にインストールする方法を紹介します。2 つの用途をカバーする理由どちらも強力で便利ですが、ウェブ用メディアの準備に必要なすべての機能を備えていません。また、メディアの変換ページとメディア暗号化ページも作成しました。このページには、これら 2 つのアプリケーションでの一般的なオペレーションを多数紹介しています。
これらのアプリケーションは、ファイル操作タスクに使用できる唯一のオプションではありませんが、最も一般的で強力である 2 つのアプリケーションです。その他のオプションには、Miro、HandBrake、VLC の GUI アプリケーションがあります。Zencoder、Amazon Elastic Encoder、Google Transcoder API などのエンコード/コード変換サービスもあります。
Shaka Packager
Shaka Packager は、無料のメディア パッケージ SDK です。サイトでメディア プレーヤーを使用している場合は、Shaka Packager を使用してファイルを準備します。一般的な動画ストリーミング プロトコルである Dynamic Adaptive Streaming over HTTP(DASH)と HTTP Live Streaming(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
項目があります。ここでは説明しませんが、1 つのコマンドでファイルの動画ストリームと音声ストリームを個別に操作できます。
この基本的なパターンを、ファイルの特徴を示す簡単な使用方法と比較してみましょう。 この例では、同等の部分を並べています。
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 を使用することをおすすめします。さらに、簡単に設定するための手順もご案内します。
まず、パソコンに
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 の使用を実際に試したところで、次のメディア ストリーミングの基本で、引き続き基本的なコンセプトを学習します。