【问题标题】:How to specify file type in ffmpeg (-f) for both the input and output?如何在 ffmpeg (-f) 中为输入和输出指定文件类型?
【发布时间】:2026-02-13 19:55:02
【问题描述】:

我正在使用 ffmpeg 将标准输入(管道:0)转换为标准输出(管道:1)。 我的输入格式是“s16le”,输出格式是“wav”。 如何在 ffmpeg 命令中指定两种不同的格式?

我也在使用两个不同的频率(-ar),输入 44100Hz 和输出 22050Hz,如何在 ffmpeg 命令中指定这两个不同的频率?

【问题讨论】:

    标签: ffmpeg


    【解决方案1】:

    在 FFmpeg 中,对于特定的输入/输出,参数位于输入/输出之前。

    在你的情况下,你的命令看起来像:

    ffmpeg -sample_rate 44100 -f s16le -i - -ar 22050 -codec copy -f wav -
    

    在这种情况下,-ar 44100-f s16le 应用于输入,因为它们在输入之前。

    -ar 22050-codec copy-f wav 应用于输出,因为它们在输入之后但在输出之前。

    【讨论】:

    • 不要忘记-channels输入选项:对于s16le,默认值1。此外,这个解复用器的采样率输入选项名义上是-sample_rate,而不是-ar。见ffmpeg -h demuxer=s16le
    • 另外,我相信 ffmpeg 中的 stdin 是 pipe:0 而 stdout 是 pipe:1 而不是像大多数其他程序一样的“-”。
    • @CMalasadas -codec copy 启用stream copy 模式,这将避免重新编码。
    • 是的,出于习惯,如果我想要的话,我总是明确列出-codec copy。我的配置往往会随着时间的推移而更新,如果我更改可能具有不同默认编解码器用于其使用的容器,我不想通过忽略-codec copy 来意外开始转码。所以,我总是指定编解码器,即使在这种情况下没有必要。
    最近更新 更多