75799
### 背景

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

```

    $ ffmpeg -i in.mpg out.mp4
    
```

### 質問

ビデオコーデックと音声コーデックのデフォルト値について知りたいです。  
出力ファイルの拡張子を`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.

と記載されていたので、入力動画によってコーデックが変わることはなさそうです。
CC BY-SA 4.0
2021-05-12T01:09:59.247
75793
2021-05-13T01:13:05.387
2021-05-13T01:13:05.387
32986
19524
question
ffmpeg
出力ファイルの拡張子をmp4にした場合、ビデオコーデックと音声コーデックのデフォルトは何ですか？
Ffmpeg のバージョンやビルドによっても結果が変わってくるかと思いますが、参照している投稿の
[別回答](https://stackoverflow.com/a/25144339) では `ffprobe`
コマンドで確認する方法法が紹介されています。

`-show_format` オプションを付けて実行するとファイルの各種情報が表示されるので、その中の "Stream" で "Video" と
"Audio" の箇所を確認してみてください。

[ffprobeで動画を解析する -
Qiita](https://qiita.com/makotok7/items/0e7d2f941e5da8cec8d1)

> ### フォーマット/コンテナ情報表示 [-show_format]
>
> フォーマット、サイズ、ビットレート情報を表示します。
```

>     % ffprobe XXX.ts -hide_banner -show_format
>     [mpegts @ 0x7ff284000400] start time for stream 0 is not set in
> estimate_timings_from_pts
>     Input #0, mpegts, from 'XXX.ts':
>       Duration: 00:00:02.04, start: 2.154811, bitrate: 1963 kb/s
>       Program 1
>         Stream #0:0[0x102]: Data: timed_id3 (ID3  / 0x20334449)
>         Stream #0:1[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B),
> yuv420p(tv), 1024x576 [SAR 1:1 DAR 16:9], 30 fps, 30 tbr, 90k tbn, 60 tbc
>         Stream #0:2[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100
> Hz, stereo, fltp, 94 kb/s
>  
```
CC BY-SA 4.0
2021-05-12T02:08:20.410
75795
2021-05-12T02:08:20.410
3060
75793
answer
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>

```

    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,
        //...
    };
    
```

* * *

>
> 出力ファイルの拡張子を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は非常に広範なメディアを処理できる反面、提供機能やインタフェースの変更もしばしば行われ、ドキュメンテーションも追いついていない印象を強く受けます。最終的にはソースコードを参照する必要が（割とよく）あります。
CC BY-SA 4.0
2021-05-12T05:22:20.477
75799
2021-05-12T05:34:23.483
2021-05-12T05:34:23.483
49
49
75793
answer