在这个问题之后,我决定使用 ffmpeg 来裁剪 MP3。在另一个问题上,我发现了这种方法:
ffmpeg -t 30 -acodec copy -i inputfile.mp3 outputfile.mp3
问题是我不想裁剪前 30 秒,我想从 x 裁剪到 x+n,比如从 30 秒到 100 秒。我该怎么做呢?
我正在阅读有关 ffmpeg的文章,但这并不是很简单,特别是因为我刚刚发现了 ffmpeg 并且我不熟悉音频/视频编辑软件,所以任何指针都将不胜感激。
看一下 -t 和 -ss 参数。他们应该做你想做的事。
-t 持续时间
将转码/捕获的视频序列限制为以秒为单位指定的持续时间。还支持 hh:mm:ss[.xxx] 语法。
-ss位置'
以秒为单位寻找给定的时间位置。还支持 hh:mm:ss[.xxx] 语法。
例如,ffmpeg -ss 30 -t 70 -i inputfile.mp3 -acodec copy outputfile.mp3
应该为您提到的范围(30s-100s)做技巧。
扩展一下 Michael Madsens 的回答:
我发现以下任何一种方法都可以满足我修剪音频文件的要求:
ffmpeg -ss
<开始位置> -t
<持续时间> -i inputfile -c:a copy outputfile
ffmpeg -ss
<开始位置> -i inputfile -t
<持续时间> -c:a copy outputfile
注意:-acodec
是一个别名,codec:a
也可以指定为c:a
-t duration (input/output)
-ss position (input/output)
duration
并position
遵循持续时间语法:
[-][HH:]MM:SS[.m...]
或者[-]S+[.m...][s|ms|us]
旁注:关于如何使用 FFMPEG 检测静音间隔的答案也可能很有趣。
请注意,在大多数格式中,不可能精确查找,因此 ffmpeg 将查找位置之前最近的查找点。当转码和 -accurate_seek 启用(默认)时,搜索点和位置之间的这个额外段将被解码并丢弃。在进行流复制或使用 -noaccurate_seek 时,它将被保留。
我对以下文件做了几个测试:
Input #0, mp3, from 'test16s.mp3':
Duration: 00:00:16.20, start: 0.025057, bitrate: 128 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 128 kb/s
将 Audacity 中的输出与原始输出进行比较,得到以下结果:
ffmpeg -ss 3 -t 5 -i test16s.mp3 -c:a copy out.mp3
ffmpeg -ss 3 -i test16s.mp3 -t 5 -c:a copy out.mp3
ffmpeg -i test16s.mp3 -ss 3 -t 5 -c:a copy out.mp3
ffmpeg -t 5 -i test16s.mp3 -ss 3 -c:a copy out.mp3
为了查看搜索跳转,我使用以下方法发现了有趣的结果:
ffmpeg -ss
<秒> -i test16s.mp3 -t 5 -c:a copy out.mp3
ffmpeg -ss
<秒> -t 5 -i test16s.mp3 -c:a copy out.mp3
得出结论,使用Stream Copy,似乎我的特定文件中的最小搜索分辨率(Audio: mp3, 44100 Hz, stereo, fltp, 128 kb/s)是: