裁剪 MP3 到最后 N 秒

Crop MP3 to last N seconds

我想从现有的 MP3 文件生成一个新的(完全有效的)MP3 文件。新文件应仅包含曲目的最后 N 秒。

avconv 中有 -t 选项用于获取前 N 秒:

-t duration (output)

Stop writing the output after its duration reaches duration. duration may be a number in seconds, or in "hh:mm:ss[.xxx]" form.

是否有裁剪最后 N 秒的选项? avconv 对我来说不是必需的,所有其他工具都可以接受。

如果你想发布脚本,你应该检查以确保安装了 mp3info,以及参数计数等,但这应该让你开始。将其保存为 .sh 并使用 mp3lastnsecs.sh input.mp3 output.mp3 numsecs

调用它

此外,您还需要添加其他 ffmpeg 标志以用于标记、比特率等。

#!/usr/bin/bash

SECS=$(mp3info -p "%S" )
if [ "$SECS" -ge "" ]; then
  START=$((SECS-))
else
  echo 'Error: requested length is longer than the song.'
  exit 1
fi

#echo Starting song  from $START seconds.
ffmpeg -i "" -ss $START ""

示例输出:

[  @  tmp] ./lastN.sh 01-glaube.mp3 output.mp3 20
Starting song 01-glaube.mp3 from 96 seconds.
ffmpeg -i 01-glaube.mp3 -ss 96 output.mp3 # I had an echo in there for testing, it now calls ffmpeg directly
[  @  tmp] ./lastN.sh 01-glaube.mp3 output.mp3 1234
Error: requested length is longer than the song.

您可以简单地使用 ffprobe 来获取音频的持续时间。

ffprobe -i input_audio -show_entries format=duration -v quiet -of csv="p=0"

计算nth_second并与ffmpeg

一起使用
ffmpeg -i input_audio -ss nth_second output_file

以下是该过程的 shell 脚本。

#!/bin/bash
duration=$(ffprobe -i  -show_entries format=duration -v quiet -of csv="p=0")
nth_second=$(echo "${duration} - "|bc)
ffmpeg -i  -ss ${nth_second}