我有几个长音频文件(每个 80 分钟;m4a),想将它们分成 5 分钟或 10 分钟的片段。
我看到很多关于在长时间停顿、音调等情况下分割音频文件的问题,但似乎找不到关于这个简单操作的问题。有人知道一个简单的方法吗?
当然,自动化和命令行也是可以的——甚至是更好的。
提前致谢!
答案1
使用最新的 ffmpeg(下载静态构建从这里):
ffmpeg -i in.m4a -f segment -segment_time 300 -c copy out%03d.m4a
这将使用段复用器并复制比特流。如果您的文件包含音频和视频流,您可以使用 禁用视频流-vn
。
ruby -e '(0..4500).step(300) { |x| system "ffmpeg -ss #{x} -i in.m4a -c copy -t 300 out-#{x}.m4a"}'
只需在同一个文件夹中执行该操作即可in.m4a
。它将复制音频比特流,因此执行此操作可能只需不到几秒钟。
解释:
- 4800 秒是音频文件的长度(80 分钟 × 60 秒),所以我们最后的分割是在 4500(4800 - 300 秒)。
- 我们从 0 到 4500,每 300 秒(5 分钟 × 60 秒)分割一次。
- FFmpeg 将在指定的时间启动
-ss
- 它会按照指定的时间进行复制
-t
- 它将写入几个名为 的输出文件
out-<x>.mp4
,其中<x>
是以秒为单位的开始时间。
答案2
我自己也在寻找解决方案。我发现最简单的方法是通过MP4盒:
mp4box -split 300 infile.m4a
其中“300”是以秒为单位的时间。MP4Box 将自动写入编号的输出文件。
(您不需要安装整个大型 GPAC 应用程序。您可以从存档中提取这些文件以使其运行:js.dll;libeay32.dll;libgpac.dll;MP4Box.exe;ssleay32.dll)
答案3
这个问题已经有一段时间没有被问到了,但是在使用了 Ruby 和 ffmpeg 之后,我决定在 Windows 中必须有一种更简单的方法来做到这一点,而且我发现确实有。
下载并安装 Audacity
在您可以找到的地方创建一个文本文件,并将以下字符串粘贴到其中:(300 秒间隔,即 5 分钟,10 分钟将是 600 个间隔,等等...)
0 300
300 600
600 900
900 1200
1200 1500
1500 1800
1800 2100
2100 2400
2400 2700
2700 3000
3000 3300
3300 3600
3600 3900
3900 4200
4200 4500
4500 4800
4800 5100
5100 5400
5400 5700
5700 6000
6000 6300
6300 6600
6600 6900
6900 7200
7200 7500
7500 7800
7800 8100
8100 8400
8400 8700
8700 9000
9000 9300
9300 9600
9600 9900
9900 10200
10200 10500
10500 10800
10800 11100
11100 11400
11400 11700
11700 12000
12000 12300
12300 12600
12600 12900
12900 13200
13200 13500
13500 13800
13800 14100
14100 14400
14400 14700
14700 15000
只需确保间隔数大于音频文件的总长度,我创建的这个文件运行超过三个小时,足够满足我的需要,可以添加更多内容以满足您的需要。
将音频文件导入 Audacity,进行所需的平衡和其他编辑,然后单击文件>标签>导入标签
选择您的文本文件,然后同时选择标签轨道和音轨,然后单击文件>导出多个。
更改您想要导出的文件类型并调整设置,然后选择目标文件夹。
我总是将编号模式更改为文件名前缀后的编号,然后在框中键入我想要的文件名,程序就会添加数字,点击导出,然后就大功告成了!
答案4
MP4Box 运行完美。当你能从终端完成任务时,感觉很棒。更快捷。
这是下载页面: https://gpac.wp.imt.fr/downloads/gpac-nightly-builds/ 您安装该程序后,就可以从终端工作,无需其他任何操作。
经过测试,命令 dfkt 表示完美运行:mp4box -split 59 infile.m4a
就我而言,我想将其拆分为 m4a <1min,以方便谷歌语音转文本使用。
Audacity 可以正常工作,但就我而言,我总是喜欢使用命令而不是图形用户界面。因此,对于 mp4box 来说,这是最佳解决方案。我没有提供新信息,功劳归于 dfkt(谢谢)。我只是确认这是一个很好的解决方案。