You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何FFmpeg生成的MPEG-2 PS含MPEG-1音频?如何输出带PCM的MPG?

问题原因分析

你遇到的这个问题,本质是ffmpeg的MPEG-2 Program Stream(PS)封装器默认会优先选择MPEG-1 Audio作为音频编码格式,即使你明确指定了pcm_s24be,也可能因为以下两个核心原因导致自动转码:

  • PS容器对PCM的封装有参数限制:MPEG-2 PS规范要求PCM音频的采样率必须是标准值(如48kHz、44.1kHz、32kHz),声道数也需符合容器兼容的配置(常见为立体声或5.1)。如果输入音频的参数(比如采样率、声道)和你指定的pcm_s24be不匹配,ffmpeg会自动回退到默认的MPEG-1 Audio编码。
  • 未明确约束封装器的音频逻辑:ffmpeg的PS封装器默认倾向于使用MPEG系列音频编码,若没有额外参数明确要求,它可能会忽略你的音频编码指定,自动选择兼容度更高的MPEG-1 Audio。
修正后的命令

要生成带有PCM 24-bit大端音频的MPEG-2 PS文件,你需要在命令中明确指定音频的标准参数,并强制封装器遵循你的编码要求。以下是修正后的命令:

ffmpeg -i "input.mov" \
  -vcodec mpeg2video -pix_fmt yuv422p -bf 2 -b:v 50000000 -maxrate 50000000 -minrate 50000000 \
  -s 1920x1080 -aspect 16:9 \
  -acodec pcm_s24be -ar 48000 -ac 2 -f mpegps \
  "output.mpg"
参数补充说明
  • -ar 48000:指定音频采样率为48kHz(PS容器兼容的标准采样率,若输入源是44.1kHz可改为44100)
  • -ac 2:指定声道数为立体声(若需要5.1声道可改为6,需确保输入音频本身支持该声道数)
  • -f mpegps:强制指定输出封装格式为MPEG-2 Program Stream,避免ffmpeg根据扩展名自动触发不合适的封装逻辑
结果验证方法

生成文件后,你可以用ffprobe命令快速验证音频编码是否符合预期:

ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "output.mpg"

如果输出结果为pcm_s24be,说明命令执行成功。

内容的提问来源于stack exchange,提问作者DMtd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:12:54