私は今日、コーデックを指定せずにffmpeg
を使用してビデオおよびオーディオストリームをエンコードまたはトランスコードできることに気付きました。これは、出力の拡張からビデオまたはオーディオコーデックがエンコードまたはトランスコードされていることを意味しているように見えるためです。 。この意味は:
ffmpeg "input.mp3" -c:a aac "output.m4a"
...次のように置き換えることができます:
ffmpeg "input.mp3" "output.m4a"
加えて:
ffmpeg "input.dts" -c:a copy -ac 2 "output.dts"
...次のように置き換えることができます:
ffmpeg "input.dts" -ac 2 "output.dts"
コーデックを常に明示的に含めることがffmpeg
を使用する最も一般的な方法であることを考えると、特にこのサイトで、これが当てはまる理由があるのではないかと思いました。
ffmpeg
を使用してこの方法でエンコードするときに考慮すべき落とし穴はありますか?コーデックを明示的に指定した場合とまったく同じ変換が行われると想定しても安全ですか?
デフォルトの選択のいくつかは、レガシーまたは奇妙です。例えば:
FLV出力にはflv1
が選択されています。ほとんどの人はH.264(libx264)を期待しています。
flac
はOGG/OGA出力に選択されます。ほとんどの人はVorbis(libvorbis)を期待しています。
出力形式のデフォルトとして使用されるエンコーダーは、ffmpeg
のコンパイルに使用された構成オプションによって異なります。したがって、ffmpeg
に--enable-libx264
がない場合、MP4の場合、libx264(H.264ビデオ)の代わりにエンコーダmpeg4(MPEG-4パート2ビデオ)が使用されます。ほとんどの人は、含まれている最も人気のあるライブラリをサポートするffmpeg
ビルドを使用しますが、それは時々起こります。
具体的にするのはそれほど大変な作業ではありません。
knowどのエンコーダーが選択されるか、またはチェックして検証する場合は、必要に応じていくつかのキーストロークを保存できます。コンソール出力のストリームマッピングを参照して、ffmpeg
が使用するエンコーダーを確認してください。例:
ffmpeg -i input.foo output.mp4
...
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
Stream #1:0 -> #0:1 (pcm_s16le (native) -> aac (native))
この場合、ビデオにはlibx264(-c:v libx264
)を使用し、オーディオにはネイティブAACエンコーダー(-c:a aac
)を使用しています。
特定のマルチプレクサの詳細を表示して、デフォルトで使用されるコーデックを確認できます。
ffmpeg -h muxer=mp4
...
Muxer mp4 [MP4 (MPEG-4 Part 14)]:
Default video codec: h264.
Default audio codec: aac.
コーデックを明示的に指定した場合とまったく同じ変換が行われると想定しても安全ですか?
必ずしも。動作するファイルを取得できるという点で「安全」です。 Ffmpegは、そのコンテナで動作する優先コーデックを選択します。ただし、別のファイル拡張子を使用すると、別のコーデックを選択できます(MAY)。また、優先コーデックは将来、またはFfmpegのコンパイル方法に基づいて変更される可能性があります。