如何获取特定文件大小的音频文件?
How do I get audio files of a specific file size?
有什么方法可以使用 ffmpeg 准确地将音频文件分成特定文件大小的较小文件,或者从文件中提取特定数量的样本?
我正在处理语音转文本API,它需要 正好 160,000 个字节或 80,000 个 16 位样本的音频块。
我有一个视频流,我有一个 ffmpeg 命令可以从中提取音频:
ffmpeg -i "rtmp://MyFMSWorkspace/ingest/test/mp4:test_1000 live=1" -ar 16000 -f segment -segment_time 10 out%04d.wav
所以现在我有大约 10 秒的音频块,采样率为 16 kHz。有什么方法可以使用 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
+ 一些 header 数据。 ffmpeg 显示隐藏小数部分的大小。如果你想要一个没有 headers 的原始文件,输出到 .raw
而不是 .wav
.
对于将视频文件转换为分成 30 分钟片段的 MP3 的人:
ffmpeg -i "something.MP4" -q:a 0 -map a -f segment -segment_time 1800 FileNumber%04d.mp3
-q
选项只能与 libmp3lame 一起使用,对应于 LAME -V
选项 (source)
有什么方法可以使用 ffmpeg 准确地将音频文件分成特定文件大小的较小文件,或者从文件中提取特定数量的样本?
我正在处理语音转文本API,它需要 正好 160,000 个字节或 80,000 个 16 位样本的音频块。
我有一个视频流,我有一个 ffmpeg 命令可以从中提取音频:
ffmpeg -i "rtmp://MyFMSWorkspace/ingest/test/mp4:test_1000 live=1" -ar 16000 -f segment -segment_time 10 out%04d.wav
所以现在我有大约 10 秒的音频块,采样率为 16 kHz。有什么方法可以使用 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
+ 一些 header 数据。 ffmpeg 显示隐藏小数部分的大小。如果你想要一个没有 headers 的原始文件,输出到 .raw
而不是 .wav
.
对于将视频文件转换为分成 30 分钟片段的 MP3 的人:
ffmpeg -i "something.MP4" -q:a 0 -map a -f segment -segment_time 1800 FileNumber%04d.mp3
-q
选项只能与 libmp3lame 一起使用,对应于 LAME -V
选项 (source)