出力ファイルの拡張子をmp4にした場合、ビデオコーデックと音声コーデックのデフォルトは何ですか？


### 背景

mpg動画をmp4動画に変換するために、以下のコマンドを実行しました。

[code]

    $ ffmpeg -i in.mpg out.mp4
    
[/code]

### 質問

ビデオコーデックと音声コーデックのデフォルト値について知りたいです。  
出力ファイルの拡張子を`mp4`にした場合、ビデオコーデック（`-codec:v`）と音声コーデック（`-codec:a`）のデフォルトは常に、H.264とAACでしょうか？  
それとも入力動画によって変わりますか？  
ビデオコーデックと音声コーデックのデフォルト値は、公式サイトのどのページに記載されていますか？

### 補足

以下の質問サイトに、  
<https://stackoverflow.com/questions/17793150/default-ffmpeg-codec-when-
nothing-is-specified>

> The encoders used will depend on how you configured ffmpeg. For example, if
> available libx264 will be the default encoder for mp4 output, but if not
> then mpeg4 will be used.

と記載されていたので、入力動画によってコーデックが変わることはなさそうです。




FFmpeg/libavformat
の該当モジュール(`movenc.c`)ソースコードに、出力ファイル拡張子に応じたデフォルトコーデックが定義されています。

  * 音声コーデック：MPEG AAC (`AV_CODEC_ID_AAC`)
  * 動画コーデック：ビルド時にlibx264有効ならば MPEG-4 AVC/H.264 (`AV_CODEC_ID_H264`)、そうでなければMPEG-4 Visual (`AV_CODEC_ID_MPEG4`)

<https://github.com/FFmpeg/FFmpeg/blob/n4.4/libavformat/movenc.c#L7291-L7309>

[code]

    AVOutputFormat ff_mp4_muxer = {
        .name              = "mp4",
        .long_name         = NULL_IF_CONFIG_SMALL("MP4 (MPEG-4 Part 14)"),
        .mime_type         = "video/mp4",
        .extensions        = "mp4",
        .priv_data_size    = sizeof(MOVMuxContext),
        .audio_codec       = AV_CODEC_ID_AAC,
        .video_codec       = CONFIG_LIBX264_ENCODER ?
                             AV_CODEC_ID_H264 : AV_CODEC_ID_MPEG4,
        //...
    };
    
[/code]

* * *

>
> 出力ファイルの拡張子をmp4にした場合、ビデオコーデック（-codec:v）と音声コーデック（-codec:a）のデフォルトは常に、H.264とAACでしょうか？  
>  それとも入力動画によって変わりますか？

デフォルトコーデックは出力ファイル形式（厳密にはmuxer）にのみ依存します。  
<https://ffmpeg.org/ffmpeg.html#Stream-handling>

> [...] If no `-codec` option is specified for a stream type, ffmpeg will
> select the default encoder registered by the output file muxer.

* * *

> ビデオコーデックと音声コーデックのデフォルト値は、公式サイトのどのページに記載されていますか？

2021年5月現在、公式サイト(ffmpeg.org)では直接的な記載を見つけられませんでした。（[Muxer > mov, mp4,
ismv](https://ffmpeg.org/ffmpeg-all.html#mov_002c-mp4_002c-ismv)にも説明なし）

FFmpegは非常に広範なメディアを処理できる反面、提供機能やインタフェースの変更もしばしば行われ、ドキュメンテーションも追いついていない印象を強く受けます。最終的にはソースコードを参照する必要が（割とよく）あります。




FFmpeg/libavformat
の該当モジュール(`movenc.c`)ソースコードに、出力ファイル拡張子に応じたデフォルトコーデックが定義されています。

  * 音声コーデック：MPEG AAC (`AV_CODEC_ID_AAC`)
  * 動画コーデック：ビルド時にlibx264有効ならば MPEG-4 AVC/H.264 (`AV_CODEC_ID_H264`)、そうでなければMPEG-4 Visual (`AV_CODEC_ID_MPEG4`)

<https://github.com/FFmpeg/FFmpeg/blob/n4.4/libavformat/movenc.c#L7291-L7309>

[code]

    AVOutputFormat ff_mp4_muxer = {
        .name              = "mp4",
        .long_name         = NULL_IF_CONFIG_SMALL("MP4 (MPEG-4 Part 14)"),
        .mime_type         = "video/mp4",
        .extensions        = "mp4",
        .priv_data_size    = sizeof(MOVMuxContext),
        .audio_codec       = AV_CODEC_ID_AAC,
        .video_codec       = CONFIG_LIBX264_ENCODER ?
                             AV_CODEC_ID_H264 : AV_CODEC_ID_MPEG4,
        //...
    };
    
[/code]

* * *

>
> 出力ファイルの拡張子をmp4にした場合、ビデオコーデック（-codec:v）と音声コーデック（-codec:a）のデフォルトは常に、H.264とAACでしょうか？  
>  それとも入力動画によって変わりますか？

デフォルトコーデックは出力ファイル形式（厳密にはmuxer）にのみ依存します。  
<https://ffmpeg.org/ffmpeg.html#Stream-handling>

> [...] If no `-codec` option is specified for a stream type, ffmpeg will
> select the default encoder registered by the output file muxer.

* * *

> ビデオコーデックと音声コーデックのデフォルト値は、公式サイトのどのページに記載されていますか？

2021年5月現在、公式サイト(ffmpeg.org)では直接的な記載を見つけられませんでした。（[Muxer > mov, mp4,
ismv](https://ffmpeg.org/ffmpeg-all.html#mov_002c-mp4_002c-ismv)にも説明なし）

FFmpegは非常に広範なメディアを処理できる反面、提供機能やインタフェースの変更もしばしば行われ、ドキュメンテーションも追いついていない印象を強く受けます。最終的にはソースコードを参照する必要が（割とよく）あります。

