为何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
相关产品推荐
相关产品推荐

