强制 ffmpeg 输出 WAV_FORMAT_PCM
Force ffmpeg to output WAV_FORMAT_PCM
似乎ffmpeg(使用版本2.8.1)输出的任何包含采样率高于48000(例如88200或96000)的wav文件的格式代码将改为WAV_FORMAT_EXTENSIBLE格式WAV_FORMAT_PCM。即使它是具有 16 位深度的 2 通道源,或者如果这些设置是使用 -ac 2 -acodec pcm_s16le
.
强制的
ffmpeg为什么要这样做?无论采样率如何,是否有任何命令行选项强制将 WAV_FORMAT_PCM 写入格式?重采样太慢。如果没有可用的命令行选项,我可以从哪里开始查看源代码?
我找不到任何参考原因,也许它不常见。 MSDN页面只提到了多通道和高分辨率。
相关代码在libavformat/riffenc.c:
waveformatextensible = (enc->channels > 2 && enc->channel_layout) ||
enc->sample_rate > 48000 ||
enc->codec_id == AV_CODEC_ID_EAC3 ||
av_get_bits_per_sample(enc->codec_id) > 16;
似乎ffmpeg(使用版本2.8.1)输出的任何包含采样率高于48000(例如88200或96000)的wav文件的格式代码将改为WAV_FORMAT_EXTENSIBLE格式WAV_FORMAT_PCM。即使它是具有 16 位深度的 2 通道源,或者如果这些设置是使用 -ac 2 -acodec pcm_s16le
.
ffmpeg为什么要这样做?无论采样率如何,是否有任何命令行选项强制将 WAV_FORMAT_PCM 写入格式?重采样太慢。如果没有可用的命令行选项,我可以从哪里开始查看源代码?
我找不到任何参考原因,也许它不常见。 MSDN页面只提到了多通道和高分辨率。
相关代码在libavformat/riffenc.c:
waveformatextensible = (enc->channels > 2 && enc->channel_layout) ||
enc->sample_rate > 48000 ||
enc->codec_id == AV_CODEC_ID_EAC3 ||
av_get_bits_per_sample(enc->codec_id) > 16;