如何用FFmpeg生成时长为0的空WAV文件?解析-t参数异常
问题解答
1. 为何-t 0会生成无限长音频而非时长为0的WAV文件?
FFmpeg中-t参数用于指定输出媒体的时长,但当取值为0时,会被解析为无效的终止条件。而anullsrc是一个持续生成静音音频的滤镜源,本身没有内置停止机制,一旦-t 0无法触发停止逻辑,FFmpeg就会持续从anullsrc读取并写入音频数据,直到磁盘空间耗尽。
另外WAV格式的文件头需要记录文件总大小,当FFmpeg持续写入但未收到停止信号时,无法正确计算并写入文件头的大小字段,后续还会触发文件大小无效的报错。
2. 如何用FFmpeg生成时长为0的空WAV/音频文件?
可以通过指定输出0帧音频的方式,让FFmpeg生成带有正确格式头但无音频数据的空WAV文件,命令如下:
ffmpeg -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=48000 -frames:a 0 -y $output
-frames:a 0:明确指定输出0帧音频,FFmpeg会自动处理格式头的生成,最终得到时长为0的合规WAV文件。- 也可以直接基于空输入生成:
ffmpeg -f wav -i /dev/null -y $output
不过这种方式需要确保FFmpeg能正确识别空输入并生成标准WAV头,推荐优先使用第一种方法,更适配自定义声道、采样率的需求。
附:该场景确实较为罕见,常规业务中一般不会需要生成时长为0的音频文件,但针对这种边界情况,通过指定帧数量而非时长的方式能有效规避无限写入的问题。
内容的提问来源于stack exchange,提问作者fishshrimp鱼虾爆栈
相关产品推荐
相关产品推荐

