マルチメディアを編集、調整し、必要なものに正確に変換するオープン ソース ツールが数多く存在します。 Audacity や Handbrake のようなツールは素晴らしいものですが、時には、ファイルをあるフォーマットから別のフォーマットに素早く変更したい場合があります。 FFmpeg を使用します。
FFmpeg は、マルチメディア ファイルを処理するためのさまざまなプロジェクトの集合体です。 それはしばしば、他の多くのメディア関連プロジェクトの舞台裏で使用されます。 その名前にもかかわらず、Moving Picture Experts Group やそれが作成した無数のマルチメディア フォーマットとは何の関係もありません。
この記事では、コマンドライン ツール ffmpeg を通じて FFmpeg を使用しますが、これは FFmpeg プロジェクト内の単一の小さなピースに過ぎません。 これは多くの異なるオペレーティング・システムで利用可能で、いくつかのオペレーティング・システムにはデフォルトで含まれています。 FFmpeg の Web サイトから、またはほとんどのパッケージ マネージャーからダウンロードできます。
FFmpeg は、マルチメディア ファイルで想像できることならほとんど何でもできる強力なツールです。 この記事では、ファイルを変換するために使用することに興味があるので、その機能セット全体を深く掘り下げて説明することはしません。 FFmpeg の使用を検討する前に、まず、メディア ファイルが正確には何であるかを簡単に見ておく必要があります。
メディア ファイル
非常にハイレベルなビューで、メディア ファイルはコンテナーとそのストリームに分割されます。 ストリームには、映画のオーディオやビデオなど実際の AV コンポーネントが含まれ、特定のメディア エンコーディング、つまりコーデックを使用してエンコードされます。 コーデックには、それぞれ特性や長所、短所があります。 例えば、FLACコーデックは高品質のロスレスオーディオに適していますが、VorbisはMP3とファイルサイズを競いながら、より良い音質を提供するように設計されています。 つまり、FLACフォーマットのファイルはVorbisオーディオストリームよりはるかに大きくなりますが、より良い音質であるはずです。 それぞれが異なることを行おうとしているので、どちらも他より本質的に優れているわけではありません。
The container is the wrapper for the streams. メディア プレーヤやツールが相互作用できる単一のインターフェイスを提供します。 一部のコンテナは非常に高度であり、単一のコンテナ内の複数のビデオおよびオーディオ ストリームなど、あらゆる種類のストリームを許可します。 コンテナ内のストリームは、オーディオやビデオだけである必要はありません。 コンテナによって、字幕、チャプター情報、その他のメタデータなど、異なるストリームを使用することができます。 これは、メディア ファイルの抽象的な表現であり、コンテナー間の多くの相違をスキップします。 多くの場合、特定のストリームやメタデータを必要としたり、許可されるコーデックやコンテンツに制限を設けたりしています。 この説明は、この記事を読み終えるのに十分な量です。 もっと詳しく知りたい場合は、上記のリンクをクリックしてください。
ビデオおよびオーディオのエンコードを実行するには、非常に長い時間がかかることがあることに注意してください。 FFmpeg を使用するときは、しばらくは落ち着く覚悟が必要です。
基本的な変換
音声やビデオの変換に関してほとんどの人がつまずくのは、正しい形式とコンテナーを選択することでしょう。 幸いなことに、FFmpeg はデフォルト設定でかなり賢いです。 たとえば、MP3 ファイルがあり、それを OGG ファイルに変換する場合、
ffmpeg -i input.mp3 output.ogg
このコマンドは input.mp3 という MP3 ファイルを受け取り、output.ogg という OGG ファイルに変換します。 FFmpegの観点からは、これはMP3オーディオストリームをVorbisオーディオストリームに変換し、このストリームをOGGコンテナにラッピングすることを意味します。 FFmpeg がそれを判断したため、ストリームまたはコンテナー タイプを指定する必要はありませんでした。
これは動画でも機能します。
ffmpeg -i input.mp4 output.webm
WebM は明確に定義されたフォーマットなので、FFmpeg はサポートできるビデオおよびオーディオを自動的に認識し、ストリームを有効な WebM ファイルとなるよう変換します。 たとえば、Matroska などのコンテナーは、有効かどうかにかかわらず、ほとんどすべてのストリームを処理するように設計されています。 つまり、コマンド:
ffmpeg -i input.mp4 output.mkv
は input.mp4 と同じコーデックを持つファイルを生成するかもしれませんが、それはあなたが望むものであるかもしれませんし、そうでない可能性もあります。 FFmpeg の出番です!
このフラグにより、各ストリームに使用する異なるコーデックを設定することができます。 たとえば、オーディオ ストリームを Vorbis に設定するには、次のコマンドを使用します:
ffmpeg -i input.mp3 -c:a libvorbis output.ogg
オーディオ ストリームだけでなくビデオも同様に変更できます:
ffmpeg -i input.mp4 -c:v vp9 -c:a libvorbis output.mkv
これにより、VP9 ビデオ ストリームと Vorbis オーディオ ストリームで Matroska コンテナが作成されますが、基本的に以前に作った WebM と同じものです:
ffmpeg -codecs コマンドにより FFmpeg で使用できるすべてのコーデックが表示されます。 このコマンドの出力は、インストールされている FFmpeg のバージョンによって変化します。 正しいストリームを再エンコードするには、非常に時間がかかることがあります。 FFmpeg はこのような状況で役立ちます。
ffmpeg -i input.webm -c:v copy -c:a flac output.mkv
このコマンドは input.webm から output.mkv へビデオ ストリームをコピーし、Vorbis オーディオ ストリームを FLAC へエンコードします。 5661>
Changing a container
先の例は、オーディオとビデオの両方のストリームに適用でき、追加のストリーム エンコードを行うことなく、あるコンテナー形式から別の形式に変換できます:
ffmpeg -i input.webm -c:av copy output.mkv
Influencing the quality
これで、コーデックを理解したことになりますが、次の質問は各ストリームの品質をどう設定すればよいか、というものです。
最も簡単な方法は、ビットレートを変更することですが、その結果、品質が変わることもありますし、変わらないこともあります。 人間の視覚と聴覚の能力は、私たちが考えるほどきれいで明確なものではありません。 ビットレートを変えることで、主観的なクオリティに大きな差が出ることもあります。 また、ファイルサイズが変わるだけで、何もしないこともあります。 各ストリームのビットレートを設定するには、-b フラグを使用します。これは、コーデック オプションの代わりにビットレートを設定することを除いて、-c フラグと同様の方法で動作します。webm から音声をコピーし、ビデオを VP9 コーデック (-c:v vp9) に変換し、ビットレート 1M/s (-b:v) で、すべて Matroska コンテナー (output.mkv) にバンドルされます。
品質に影響を与えるもう 1 つの方法は、-r オプションを使用してビデオのフレーム レートを調整することです。
ffmpeg -i input.webm -c:a copy -c:v vp9 -r 30 output.mkv
これは、入力からのフレーム レートを使用する代わりに (-r 30) 、音声ストリームをコピーして、ビデオのフレーム レートを 30 フレーム/秒に強制した新しい Matroska を作成します。 最も簡単な方法は、あらかじめ決められたビデオサイズを使用することです:
ffmpeg -i input.mkv -c:a copy -s hd720 output.mkv
これは出力でビデオを 1280×720 に変更しますが、必要なら幅と高さを手動で設定できます:
ffmpeg -i input.mkv -c:a copy -s 1280x720 output.mkv
これは先のコマンドとまったく同じ出力になります。 FFmpeg でカスタム サイズを設定したい場合は、幅パラメーター (1280) が高さ (720) の前に来ることを覚えておいてください。
フレームレートとビットレートの調整は、メディア品質に影響を与える 2 つの粗雑だが効果的な手法です。 これらの値を非常に高く設定しても、既存のソースの品質がすでに低い場合は改善できません。
これらの設定を変更することは、高品質のストリームをすばやく縮小してより小さいファイル サイズにするために最も効果的です。 動画のサイズを調整しても品質は向上しませんが、テレビではなくタブレットにうまく収まるようにすることは可能です。 640×480 の動画のサイズを 4K に変更しても、品質は向上しません。
ファイルの品質を変更することは非常に主観的な問題であり、毎回うまくいく方法は 1 つもありません。 最良の方法は、いくつかの変更を加え、それがより良く見えるか、聞こえるかをテストすることです。
Modifying the streams
ファイルがほぼ完璧で、いくつかの部分を切り取る必要があることがよくあります。 これは、変更内容を表示するツールを使用するとより簡単に行えますが、トリミングしたい場所が正確に分かっている場合、FFmpeg でそれを行うのは非常に簡単です:
ffmpeg -i input.mkv -c:av copy -ss 00:01:00 -t 10 output.mkv
これはビデオとオーディオ ストリームをコピーしますが (-c:av コピー)、ビデオをトリミングします。 t オプションでカットする時間を 10 秒に設定し、-ss オプションでトリミングするビデオの開始点、この場合は 1 分 (00:01:00) に設定します。 必要であれば、時間、分、秒だけでなく、ミリ秒まで正確に指定できます。
オーディオを抽出する
ビデオにはあまり興味がなく、オーディオだけが必要な場合があります。 幸い、これは FFmpeg の -vn フラグで非常に簡単にできます。
ffmpeg -i input.mkv -vn audio_only.ogg
このコマンドは入力から音声のみを抽出し、Vorbis としてエンコードし、audio_only.ogg に保存します。 これで分離されたオーディオストリームができました。 5661>
GIF を作る
最近、アニメーション GIF (私はモンスターではないので、ハード g がついています) がカムバックしてきました。 個人的には、GIFはビデオに選ぶべき最悪のフォーマットだと思います。 圧縮の品質とサイズが最悪で、色、フレームレート、コンテナのメタデータに非常に厳しい制限があり、オーディオをサポートできません。 それでも、かなり人気があります。
音声なしの動画を作成したい場合、上で行ったのと同様に -an フラグを使用することは、アニメーション GIF を作成するより優れていますが、GIF をサポートしていても、別の動画形式をサポートしない場所がたくさんあります。 それらのすべてに対して:
ffmpeg -i input.mkv output.gif
このコマンドは、入力ファイルと同じ寸法のGIFを作成します。 GIF は他のビデオ形式に比べてあまり圧縮されないので、これはしばしば悪い考えです (私の経験では、GIF はソースビデオの約 8 倍の大きさになります)。 特に、入力ソースが HD ビデオのように非常に大きい場合、-s オプションを使用して、GIF を少し小さいものにリサイズすると便利な場合があります。 FFmpeg と併用することで、すべてを少し楽にするツールがあります。
Grabbing videos from YouTube
YouTube に何かをアップロードして、元のソース ビデオを失い、YouTube バージョンだけが残っているということはよくあることでしょう。 YouTube の動画のコピーを取得する最も簡単な方法は何でしょうか。
Youtube-dl は YouTube や他のいくつかのビデオ ストリーミング サービスから動画を取得するのに使用できる、気の利いた小さなツールです。 使い方はとても簡単です。
youtube-dl https://www.youtube.com/watch?v=2m5nW9CQLJ0
このコマンドは指定された URL でビデオをダウンロードし、ローカルに保存します。
Youtube-dl にはダウンロードしたビデオの品質と形式を制御するオプションがいくつかありますが、私は上のコマンドを使用する方が簡単だと思います。 最高品質のオーディオとビデオを 1 つのファイルにダウンロードし、FFmpeg を使用して、必要な形式に変換します。 これを実現するツールはいくつかありますが、私が気に入っているのは MediaInfo です。 MediaInfo は、メディア コンテナ内のすべての情報を、異なるストリームごとに、入力ファイルのメタデータと同様に表示します。 5661>
MediaInfo inputFile.mkv というコマンドを実行すると、入力ファイルに関する情報のリストが人間が読める形式で出力されます。 幸いなことに、FFmpeg とプロジェクトの他のツールのドキュメントは非常に優れており、チェックアウトする価値があります。 この犬ができる多くの異なるトリックについて、すべて教えてくれるでしょう。
マルチメディアを変換するためのグラフィカルインターフェースのツールをお探しなら、Handbrake は Linux、Mac OS X、および Windows で利用できる非常に優れたツールです。 Handbrake は FFmpeg (他のツールとの間で) を使用しています。