Ffmpeg 如何获取特定文件大小的音频文件?

Ffmpeg 如何获取特定文件大小的音频文件?,ffmpeg,audio-recording,Ffmpeg,Audio Recording,是否有任何方法可以使用ffmpeg将音频文件准确地分解为具有特定文件大小的较小文件,或从文件中提取特定数量的样本 我正在使用一个语音到文本的API,它需要160000字节的音频块,或者80000个16位的样本 我有一个视频流,我有一个ffmpeg命令从中提取音频: ffmpeg -i "rtmp://MyFMSWorkspace/ingest/test/mp4:test_1000 live=1" -ar 16000 -f segment -segment_time 10 out%04d.wav

是否有任何方法可以使用ffmpeg将音频文件准确地分解为具有特定文件大小的较小文件,或从文件中提取特定数量的样本

我正在使用一个语音到文本的API,它需要160000字节的音频块,或者80000个16位的样本

我有一个视频流,我有一个ffmpeg命令从中提取音频:

ffmpeg -i "rtmp://MyFMSWorkspace/ingest/test/mp4:test_1000 live=1" -ar 16000 -f segment -segment_time 10 out%04d.wav
现在我有10秒左右的音频块,采样率为16kHz。有没有办法使用ffmpeg将其分解成160kb,5秒的文件

我试过这个:

ffmpeg -t 00:00:05.00 -i out0000.wav outCropped.wav
但结果是:

Input #0, wav, from 'out0000.wav':
  Metadata:
    encoder         : Lavf56.40.101
  Duration: 00:00:10.00, bitrate: 256 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 16000 Hz, 1 channels, s16, 256 kb/s
Output #0, wav, to 'outCropped.wav':
  Metadata:
    ISFT            : Lavf56.40.101
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 16000 Hz, mono, s16, 256 kb/s
    Metadata:
      encoder         : Lavc56.60.100 pcm_s16le
Stream mapping:
  Stream #0:0 -> #0:0 (pcm_s16le (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
size=     156kB time=00:00:05.00 bitrate= 256.1kbits/s
但现在的大小是156kb

编辑:

我的命令是:

ffmpeg -i "url" -map 0:1 -af aresample=16000,asetnsamples=16000 -f segment -segment_time 5 -segment_format sw out%04d.sw

这个输出看起来完全正确。ffmpeg大小以
KiB
表示,尽管它表示
kB
。160000字节=
156.25 kB
+一些头数据。ffmpeg显示隐藏分数部分的大小。如果您想要一个没有标题的原始文件,请将其输出到
.raw
而不是
.wav

以供将视频文件转换为MP3并分成30分钟片段的人使用:

ffmpeg -i "something.MP4" -q:a 0 -map a -f segment -segment_time 1800 FileNumber%04d.mp3
-q
选项只能与libmp3lame一起使用,并对应于LAME
-V
选项()

是的,执行输出到。sw(原始类型)去掉了标题,并且我能够拨出一些其他选项来精确获得我需要的样本数。