【问题标题】:How to split 8GB WAVE files (24h lasting) into smaller files (1h lasting) in R?如何在 R 中将 8GB WAVE 文件(持续 24 小时)拆分为更小的文件(持续 1 小时)?
【发布时间】:2021-08-02 14:25:29
【问题描述】:

我想将 8 GB(持续 24 小时)的 WAVE 文件拆分为更小的 WAVE 文件(持续 1 小时)。我有大约 800 个大文件要拆分,所以我无法手动执行此操作。

我尝试使用包:tuneR、seewave 和 phonTools。以下是我在 R 中的脚本片段:

example1=readWave("example.wav", from=0, to=1, units= "hours")
savewav(example1,f=48000)

example2=readWave("example.wav", from=22, to=23, units= "hours")
savewav(example2,f=48000)

当我运行示例 1 时,一切都是正确的。我收到了持续一小时的 WAVE 文件。 问题在于拆分后几个小时的 8 GB 文件,如示例 2 中所示。我在控制台中得到评论:readBin(con, int, n = N, size = bytes, signed = (bytes != 1), ': invalid 'n' argument.

可能 R 对这个文件的大小有问题,因为 WAVE 被限制为 4GB,所以太大了。我确信这个文件包括所有 24 小时录音,因为我在音频软件 Audacity 中将文件从 WAVE 更改为 FLACK,并且所有数据都在那里。

还有其他解决方案可以在 R 中吐出这么大的文件吗?

【问题讨论】:

    标签: r audio wav


    【解决方案1】:

    使用 ffmpeg:

    ffmpeg -i example.wav -f segment -segment_time 3600 -c copy out%03d.wav
    

    参考:https://www.ffmpeg.org/ffmpeg-formats.html#segment_002c-stream_005fsegment_002c-ssegment

    【讨论】:

    • 我认为这也是要走的路。 ffmpeg 更适合这种任务。如果 OP 想在 R 中使用它,他们总是可以使用system()。他们也可以像这样使用soxsox example.wav out.wav trim 0 3600 : newfile : restart。 +1
    • 谢谢。当我使用你的代码时,程序只创建了 12 个文件(低于 4GB)。但是当我在代码中添加额外的信息时,一切都是正确的。我使用以下代码:D:\Desktop\ffmpeg\bin>ffmpeg -f s16le -ar 48000 -i example.wav -f segment -segment_time 3600 -c copy out%03d.wav.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 2011-09-19
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多