为什么分段会导致长度不精确?

为什么分段会导致长度不精确?

当我使用此命令分割音频时

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

相关内容