关注this question我决定使用ffmpeg裁剪MP3。在another question我发现了这种方式:
ffmpeg -t 30 -acodec copy -i inputfile.mp3 outputfile.mp3
问题是我不想裁剪前30秒,我想从x到x + n裁剪,比如30s到100s。我该怎么做呢?
我正在阅读man for ffmpeg,但这并不是很简单,特别是因为我刚刚发现了ffmpeg并且我不熟悉音频/视频编辑软件,所以任何指针都会受到赞赏。
答案 0 :(得分:57)
看一下-t和-ss参数。他们应该做你想做的事。
-t持续时间
限制转码/捕获的视频 序列到指定的持续时间 秒。 hh:mm:ss [.xxx]语法也是 支持的。
-ss position'
以秒为单位寻找给定的时间位置。 hh:mm:也支持ss [.xxx]语法。
例如,ffmpeg -ss 30 -t 70 -i inputfile.mp3 -acodec copy outputfile.mp3
应该为您提到的范围(30s-100s)提供技巧。
答案 1 :(得分:1)
进一步说明迈克尔·麦德森(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
根据Main Options FFMPEG Documentation
中的规定 -t duration (input/output)
-ss position (input/output)
duration
和position
跟随Time Duration Syntax:
[-][HH:]MM:SS[.m...]
或[-]S+[.m...][s|ms|us]
侧面注:关于How to detect intervals of silence with 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
使用流复制得出结论,就好像我的特定文件中的最小搜索分辨率一样,(音频:mp3、44100 Hz,立体声,fltp,128 kb / s)< / em>是: