当我使用此命令分割音频时
ffmpeg -i test.wav -f segment -segment_time 60 output_%03d.wav
我希望获得正好 60 秒长的片段。生成的片段是 00:01:00.03 和 00:00:59.90
Guessed Channel Layout for Input Stream #0.0 : mono
Input #0, wav, from 'output_001.wav':
Metadata:
encoder : Lavf59.25.100
Duration: 00:01:00.03, bitrate: 256 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 16000 Hz, mono, s16, 256 kb/s
第四部分
Guessed Channel Layout for Input Stream #0.0 : mono
Input #0, wav, from 'output_003.wav':
Metadata:
encoder : Lavf59.25.100
Duration: 00:00:59.90, bitrate: 256 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 16000 Hz, mono, s16, 256 kb/s
有没有什么办法解决这一问题?
答案1
音频样本在处理过程中被分成几帧。如果帧大小不能均匀划分采样率,则帧边界将不会在整秒内对齐。您可以使用asetnsamples
过滤器重新构图。
在您的情况下,采样率为 16000 Hz,因此让我们将其重新构造为每帧 160 个样本。
ffmpeg -i test.wav -filter:a "asetnsamples=160" -f segment -segment_time 60 output_%03d.wav