web-dev-qa-db-ja.com

ffmpegで変換するときにコーデックを省略しても安全ですか?

私は今日、コーデックを指定せずに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を使用してこの方法でエンコードするときに考慮すべき落とし穴はありますか?コーデックを明示的に指定した場合とまったく同じ変換が行われると想定しても安全ですか?

2
Hashim

エンコーダーを指定するのが最善です

  • デフォルトの選択のいくつかは、レガシーまたは奇妙です。例えば:

    • 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.
3
llogan

コーデックを明示的に指定した場合とまったく同じ変換が行われると想定しても安全ですか?

必ずしも。動作するファイルを取得できるという点で「安全」です。 Ffmpegは、そのコンテナで動作する優先コーデックを選択します。ただし、別のファイル拡張子を使用すると、別のコーデックを選択できます(MAY)。また、優先コーデックは将来、またはFfmpegのコンパイル方法に基づいて変更される可能性があります。

1
szatmary