如何将mp3从x裁剪到x+;n使用ffmpeg?

如何将mp3从x裁剪到x+;n使用ffmpeg?,mp3,ffmpeg,crop,Mp3,Ffmpeg,Crop,接下来,我决定使用ffmpeg来裁剪MP3。在上个月,我发现了这样做的方法: ffmpeg -t 30 -acodec copy -i inputfile.mp3 outputfile.mp3 问题是我不想裁剪前30秒,我想从x裁剪到x+n,比如从30秒裁剪到100秒。我该怎么做呢 我正在阅读,但这并不是很简单,特别是因为我刚刚发现了ffmpeg,并且我不熟悉音频/视频编辑软件,所以任何指针都会很受欢迎。看看-t和-ss参数。他们应该做你想做的事 -持续时间 限制转码/捕获的视频 将序列设置为

接下来,我决定使用ffmpeg来裁剪MP3。在上个月,我发现了这样做的方法:

ffmpeg -t 30 -acodec copy -i inputfile.mp3 outputfile.mp3
问题是我不想裁剪前30秒,我想从x裁剪到x+n,比如从30秒裁剪到100秒。我该怎么做呢


我正在阅读,但这并不是很简单,特别是因为我刚刚发现了ffmpeg,并且我不熟悉音频/视频编辑软件,所以任何指针都会很受欢迎。

看看-t和-ss参数。他们应该做你想做的事

-持续时间

限制转码/捕获的视频 将序列设置为中指定的持续时间 秒。hh:mm:ss[.xxx]语法也是 支持

-党卫军阵地'

以秒为单位搜索给定的时间位置。 hh:mm:ss[.xxx]语法也受支持


例如,
ffmpeg-ss 30-t 70-i inputfile.mp3-acodec copy outputfile.mp3
应该在您提到的范围内(30s-100s)执行此操作。

对Michael Madsens的回答进行一些扩展:

我发现以下任何一项都可以满足我的音频文件修剪要求:

  • ffmpeg-ss
    -t
    -i输入文件-c:复制输出文件
  • ffmpeg-ss
    -i输入文件-t
    -c:复制输出文件
注意:
-acodec
codec:a
的别名,也可以指定为
c:a

-t持续时间(输入/输出)

  • 当用作输入选项(在-i之前)时,限制从输入文件读取数据的持续时间
  • 当用作输出选项时(在输出url之前),在输出持续时间达到持续时间后停止写入输出
-ss位置(输入/输出)

  • 当用作输入选项(在-i之前)时,在此输入文件中查找位置
  • 当用作输出选项时(在输出url之前),解码但丢弃输入,直到时间戳到达位置
持续时间
位置
遵循以下步骤:

  • [-][HH:]MM:SS[.m..]
    [-]S+[.m..][S | ms | us]
旁注:关于的答案可能也很有趣


作为输入或输出的查找和持续时间之间的差异 请注意,在大多数格式中,不可能精确搜索,因此ffmpeg将在定位之前搜索到最近的搜索点。当转码和-精确搜索被启用时(默认),搜索点和位置之间的这个额外段将被解码并丢弃。当执行流复制或使用-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-ss3-t5-itest16s.mp3-c:一份拷贝。mp3
    • 开始:3s+00756样本(3.017142857s)
    • 结束:8s+02062样本(8.04675737s)
    • 持续时间:5s+01306个样本(5.029614512s)
  • ffmpeg-ss3-itest16s.mp3-t5-c:一份拷贝。mp3
    • 开始:3s+00756样本(3.017142857s)
    • 结束:8s+00910样本(8.020634921s)
    • 持续时间:5s+00154个样本(5.003492063s)
  • ffmpeg-itest16s.mp3-ss3-t5-c:一份拷贝。mp3
    • 警告:这创建了一个文件,一些mp3解码器在尝试打开时出错
    • 开始:2s+42184个样本(2.956553288s)
    • 结束:8s+01071样品(8.024285714s)
    • 持续时间:5s+02987个样本(5.067732426s)
  • ffmpeg-t5-itest16s.mp3-ss3-c:一份拷贝。mp3
    • 警告:这创建了一个文件,一些mp3解码器在尝试打开时出错
    • 开始:2s+42184个样本(2.956553288s)
    • 结束:5s+02043个样本(5.046326531s)
    • 持续时间:2s+03959样本(2.089773243)
在尝试查看seek跳跃时,我发现了有趣的结果 使用:

  • ffmpeg-ss
    -i test16s.mp3-t5-c:a copy out.mp3

    • =3,2.99,2.98,2.97
      • 开始时间:3s+00756samples(3.017142857s),持续时间:5s+00154
    • =2.96
      • 开始:同上,持续时间:4s+41951
    • =2.95
      • 开始:2s+43704(2.991020408),结束:7s+42707持续时间:4s+43103
    • =2.94,2.93
      • 开始:同上,持续时间:4s+41951
    • =2.92
      • 启动时间:2s+42552(2.964897959s),持续时间:4s+43103
  • ffmpeg-ss
    -t5-itest16s.mp3-c:a copy out.mp3

    • =3
      • 开始时间:3s+00756(3.017142857s),持续时间:5s+01306(5.029614512s)
    • =2.99,2.98,2.97
      • 开始:相同,持续时间:5s+00155
    • =2.96
      • 起始:相同,持续时间:4s+43103
    • =2.95
      • 开始:2s+43704(2.991020408),结束:7s+43859持续时间:5s+00155
    • =2.94,2.93
      • 起始:相同,持续时间:4s+43103
    • =2.92
      • 启动:2s+42552(2.964897959s),持续时间:5s+00155
结论是,使用流拷贝,似乎我的特定文件(音频:mp3,44100 Hz,立体声,fltp,128 kb/s)中的最小寻道分辨率是:

  • 搜索步骤:1152个样本,26.122449 ms
  • 寻道位置误差高达70毫秒

我认为这现在不起作用,-acodec的位置应该是:ffmpeg-ss 30-t 70-I inputfile.mp3-acodec copy outputfile.mp3似乎也应该首先使用
-I
选项使-I first不能跳到前30秒,-ss应该总是在-i-t之前,而-i-t应该在-i之后。ffmpeg-ss 30-i inputfile.mp3-t 70-acodec copy outputfi