使用ffmpeg,sntool和sox连接多个24位96 kHz WAV音频文件

迈克尔·J

我正在尝试连接15个wav音频文件,记录为24位,96kHz,线性PCM。我用ffmpeg,sntool和sox进行了实验,结果却不同。

这些文件是由Zoom H2n记录器创建的,该记录器将大约15小时的连续记录(实时)分为几个文件,以适应SD存储卡规格。

前14个文件各为2,147,385,344字节(时间为1:02:08.04),最后一个文件为1,838,248,046字节(时间为53:11.35)。原始文件报告的比特率为4608 kb / s(使用ffmpeg -i)。

使用ffmpeg

使用文件名创建一个文本文件:

printf "file '%s'\n" ./*.WAV > mylist.txt

连接文件:

ffmpeg -f concat -i mylist.txt -c copy output-ffmpeg.wav

这将生成一个31,901,151,444字节的文件,但报告的时间仅为53:08。ffmpeg -i报告的比特率为80,049 kb / s,远高于原始的4,608 kb / s。

使用shntool

加入文件:

shntool join -r none 01.wav 02.wav [etc]

这将生成一个31,901,151,386字节的文件-与ffmpeg串联的文件不同-但报告的时间为53:08.16。ffmpeg -i再次报告了80,049 kb / s的比特率,远高于原始的4,608 kb / s。

使用袜

连接文件:

sox 01.wav 02.wav [etc] output-sox.wav

这将生成一个31,901,151,422字节的文件-与ffmpeg和shntool都不同-但报告时间为01:02:08.26。ffmpeg -i报告的比特率为68,452 kb / s,远高于原始的4,608 kb / s,但与ffmpeg或shntool转换不同。

问题

1)如何使文件反映其实际时间?将这31 Gb /〜15小时的录音带入认为只有53分钟左右的音频软件中可能会出现问题。

2)为什么这三个串联的文件大小不同?例如,出于某种原因,我应该使用某个标志或设置来填充长度吗?不同的文件大小是否是为什么文件认为它们只有53:08或01:02:08长的线索?

当我第一次看到53:08时,我想是的,这是将最终文件的时间长度写入标头中-但是最终文件的时间长度实际上是53:11。当我第一次看到01:02:08.26时,我想是的,它正在写FIRST文件的时间长度,但是可悲的是,没有(接近,但不准确)。

似乎我最好的线索是所连接文件的比特率不正确(?)。我很惊讶流副本或文件串联更改了这一点。也许仅仅是元数据错误?

贝菲兹

.wavRIFF 文件格式(msdn)

RIFF块数据的大小以32位存储。(最大无符号值是4294967295)

RIFF限制为每个文件约4.2 GB。

当软件创建非常大的RIFF块时,其存储大小为32位值。

在某个时候发生整数溢出,并且丢弃更高的数字位

示例文件:6.220 GBytes / 3:00:00 / 96000 Hz / 24位/ 2通道/ 4608 kbit / s

Real file size(hex):              01 72 C9 E0 86  (6 220 800 134)
Readed from RIFF header(hex) :       72 C9 E0 7E  (1 925 832 830)

Real file size(binary):            1 01110010 11001001 11100000 10000110  //33 bits
Readed from RIFF header(binary):     01110010 11001001 11100000 01111110  //32 bits

01 这里是丢弃的部分。

ffprobe报告:

Duration: 00:55:43.46, bitrate: 14884 kb/s
 Stream #0:0: Audio: pcm_s24le ([1][0][0][0] / 0x0001), 96000 Hz, 2 channels, s32 (24 bit), 4608 kb/s

FF探测错误的持续时间/比特率

FFprobe找不到文件中的任何元数据,并尝试根据真实数据进行计算

  1. 一串码率:4608 kbit / s(96000 Hz * 24 bit * 2 chan)
  2. RIFF块大小:1 925 832 830(是,但错了:D)

持续时间为(整个块大小除以比特率):

1 925 832 830 / (4 608 000 / 8) = 3343.459 seconds

/ 8是因为比特率是每秒位数(一个字节是8位)

3343.459就是00:55:43.459

平均?)整个文件的比特率是SizeOfFile / TotalSeconds:

6 220 800 134 / 3343.459 = 1860588.1316字节s / s(14884705.053s / s)


如何获得一个大文件?

使用其他格式存储它,例如:

FLAC / .rf64 / .w64 /等

使用ffmpeg(FFmpeg Wiki页面连接连接文件

ffmpeg -f concat -i mylist.txt -c:a flac output-ffmpeg.flac

这里mylist.txt

file '/path/to/file1.wav'
file '/path/to/file2.wav'
file '/path/to/file3.wav'

已经有很大的WAV文件了吗?

你可以它。所有的。有招。
我们将RIFF数据块的大小设置为0这将导致某些(?)音频播放器读取整个数据块(直到文件末尾)。

来自已编辑文件的FFprobe报告:

Duration: 03:00:00.00, bitrate: 4608 kb/s
 Stream #0:0: Audio: pcm_s24le ([1][0][0][0] / 0x0001), 96000 Hz, 2 channels, s32 (24 bit), 4608 kb/s

注意:在HEX编辑器中保存文件时,不需要重写完整文件

  1. 下载免费的HEX编辑器(例如HxD)
  2. 制作屏幕快照或标记字节的副本。(作为备份)
  3. 用填充它00
  4. 如果使用HxD:立即按,save然后Cancel按钮(以防止创建完整的备份副本)
  5. 打开。(在VLC / MPC-HC中测试。但是WMP失败:D)十六进制编辑器中的大wav


同样,FLAC可以使用选项--ignore-chunk-sizes对其进行转换

但是,如果.WAV在文件末尾包含一些元数据则FLAC将丢弃错误
经过Audacity测试。使用HEX编辑器进行了检查,并在文件末尾找到了元数据。

FLAC:ERROR: got partial sample
但文件长度为2:59:59秒。并且没有md5校验和。
这意味着我们还没有真正的flac文件(读取损坏)。
但是可读。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

24kHz 音频文件问题:不支持比特率 64000

来自分类Dev

使用ffmpeg javascript将wav音频文件转换为pcm音频文件

来自分类Dev

使用ffmpeg javascript将wav音频文件转换为pcm音频文件

来自分类Dev

FFMPEG从MP4视频中获取单声道WAV音频8khz 16位

来自分类Dev

如何从文件夹将音频文件拆分为多个音频WAV文件

来自分类Dev

为什么我的 8kHz wav 文件的 mel 特征在 sr = 16kHz 和 44.1kHz 中的提取方式不同

来自分类Dev

WAV文件(.wav)和WAVE音频文件(.wave)有什么区别?

来自分类Dev

使用iOS检测中等(17 kHz-20 kHz)音频频率

来自分类Dev

连接音频文件

来自分类Dev

如何根据音频文件的截止频率(实际比特率)(kHz)对音频文件进行排序?

来自分类Dev

使用音频文件服务写入32位Float Wav文件

来自分类Dev

使用音频文件服务写入32位Float Wav文件

来自分类Dev

FFmpeg中的哪些音频编码器支持8 kHz?

来自分类Dev

如何在C ++中通过FFmpeg将原始文件转换为音频文件(.wav)

来自分类Dev

使用ffmpeg连接多个视频和音频文件

来自分类Dev

使用ffmpeg连接多个视频和音频文件

来自分类Dev

使用LAME将音频文件从.wav转换为MP3时出现问题

来自分类Dev

FFmpeg跳过音频文件

来自分类Dev

如何播放音频文件(.mp3、.flac、.wav),然后使用 ffmpeg 循环播放(每隔几秒混合一次)另一个音频文件(wav)

来自分类Dev

使用sox交叉淡入淡出多个音频文件

来自分类Dev

使用sox交叉淡入淡出多个音频文件

来自分类Dev

ffmpeg:concat视频和音频文件

来自分类Dev

如何在Perl中使用HTTP POST接收wav音频文件并在Asterisk AGI中播放

来自分类Dev

ffmpeg使用Android将多个音频文件合并为单个音频文件

来自分类Dev

使用AVAudioPlayer播放多个音频文件

来自分类Dev

如何将多个WAV / FLAC /音频CD合并到一个主大音频文件(> 4GB)中

来自分类Dev

AVPlayer无法播放FFMPEG的音频文件

来自分类Dev

FFmpeg使用外部音频文件替换音频中的通道

来自分类Dev

快速添加或连接音频文件

Related 相关文章

  1. 1

    24kHz 音频文件问题:不支持比特率 64000

  2. 2

    使用ffmpeg javascript将wav音频文件转换为pcm音频文件

  3. 3

    使用ffmpeg javascript将wav音频文件转换为pcm音频文件

  4. 4

    FFMPEG从MP4视频中获取单声道WAV音频8khz 16位

  5. 5

    如何从文件夹将音频文件拆分为多个音频WAV文件

  6. 6

    为什么我的 8kHz wav 文件的 mel 特征在 sr = 16kHz 和 44.1kHz 中的提取方式不同

  7. 7

    WAV文件(.wav)和WAVE音频文件(.wave)有什么区别?

  8. 8

    使用iOS检测中等(17 kHz-20 kHz)音频频率

  9. 9

    连接音频文件

  10. 10

    如何根据音频文件的截止频率(实际比特率)(kHz)对音频文件进行排序?

  11. 11

    使用音频文件服务写入32位Float Wav文件

  12. 12

    使用音频文件服务写入32位Float Wav文件

  13. 13

    FFmpeg中的哪些音频编码器支持8 kHz?

  14. 14

    如何在C ++中通过FFmpeg将原始文件转换为音频文件(.wav)

  15. 15

    使用ffmpeg连接多个视频和音频文件

  16. 16

    使用ffmpeg连接多个视频和音频文件

  17. 17

    使用LAME将音频文件从.wav转换为MP3时出现问题

  18. 18

    FFmpeg跳过音频文件

  19. 19

    如何播放音频文件(.mp3、.flac、.wav),然后使用 ffmpeg 循环播放(每隔几秒混合一次)另一个音频文件(wav)

  20. 20

    使用sox交叉淡入淡出多个音频文件

  21. 21

    使用sox交叉淡入淡出多个音频文件

  22. 22

    ffmpeg:concat视频和音频文件

  23. 23

    如何在Perl中使用HTTP POST接收wav音频文件并在Asterisk AGI中播放

  24. 24

    ffmpeg使用Android将多个音频文件合并为单个音频文件

  25. 25

    使用AVAudioPlayer播放多个音频文件

  26. 26

    如何将多个WAV / FLAC /音频CD合并到一个主大音频文件(> 4GB)中

  27. 27

    AVPlayer无法播放FFMPEG的音频文件

  28. 28

    FFmpeg使用外部音频文件替换音频中的通道

  29. 29

    快速添加或连接音频文件

热门标签

归档