修剪音频文件的最后 x 秒

修剪音频文件的最后 x 秒

我有一堆音频文件,我需要从每个文件中删除最后 1 秒。音频文件的长度是任意的。

执行此操作的最佳工具/方法是什么?

我对 ffmpeg 有点熟悉,但据我所知,它没有直接选项来执行此操作(必须使用 -ss 和 -to 提供开始和结束时间)。

答案1

你必须使用迂回的方法。提取文件两次,并将第二次输入的时间戳偏移您要修剪的末尾的持续时间。然后使用 set 将两个流通过管道传输到另一个 ffmpeg 实例-shortest。在第二个 ffmpeg 实例中,仅保存第二个输入中的流。

ffmpeg -i in.mp3 -itsoffset 1 -i in.mp3 -map 0:a:0 -map 1:a:0 -c copy -shortest -f nut - | ffmpeg -f nut -i - -c copy -map 0:1 out.mp3

答案2

您可以使用媒体信息获取持续时间(以毫秒为单位),然后切至持续时间 - 1:

duration=$(mediainfo FILE.mp3 --Inform="Audio;%Duration%")
ffmpeg -to $(($duration / 1000 - 1)) -i FILE.mp3 -c copy FILE_NEW.mp3

答案3

受到该网站上其他问题答案的启发,我也能够编造一些东西。该命令可以find作为exec选项传递给

ffmpeg -i FILE1.wma -ss 0 -to $(echo $(ffprobe -i FILE1.wma -show_entries format=duration -v quiet -of csv="p=0") - 1 | bc) -c copy FILE2.wma

中间的部分$(echo $(ffprobe -i FILE1.wma -show_entries format=duration -v quiet -of csv="p=0") - 1 | bc)首先获得所需的持续时间。管道bc以浮动格式进行计算。然后,其输出作为参数传递给-to主命令。

为了便于理解,将上面的长单行命令分解:

    ffmpeg -i FILE1.wma -ss 0 -to
      $(echo 
        $(ffprobe -i FILE1.wma -show_entries format=duration -v quiet -of csv="p=0") 
        - 1 | bc
        )
    -c copy FILE2.wma

相关内容