使用开始和停止时间修剪音频文件

使用开始和停止时间修剪音频文件

我有一个 FFmpeg 命令来修剪音频:

ffmpeg -ss 01:43:46 -t 00:00:44.30 -i input.mp3 output.mp3

我使用此命令的问题是该选项-t需要持续时间(以秒为单位)01:43:46。我想使用开始/停止时间修剪音频,例如在01:43:4600:01:45.02

这可能吗?

答案1

ffmpeg 似乎有一个新的选择-到文档:

-到 位置(输入/输出)
停止写入输出或读取输入位置位置 必须是持续时间规范,请参阅(ffmpeg-utils)ffmpeg-utils(1) 手册中的持续时间部分。

-to 和-t 是互斥的,并且-t 具有优先权。

具有两种时间格式的示例命令

ffmpeg -i file.mkv -ss 20 -to 40 -c copy file-2.mkv
ffmpeg -i file.mkv -ss 00:00:20 -to 00:00:40 -c copy file-2.mkv

这应该创建从 20 秒标记到 40 秒标记的 file.mkv 的副本 (file-2.mkv)。

答案2

如果您安装了 PHP,请将其设为脚本:

TimeDiff.php 内容:

<?php
// Create datetime objcects
$dt1 = new DateTime($argv[1]);
$dt2 = new DateTime($argv[2]);

// Conver difference to seconds
$dt3 = $dt2->format('U') - $dt1->format('U');

// echo $dt3."\n";
$h = (int)($dt3 / 3600);
$dt3 %= 3600;
$m = (int)($dt3 / 60);
$dt3 %= 60;
$s = $dt3;

// Dump as H:M:S
echo $h . ":" . $m . ":" . $s;

?>

audiochop.sh 内容:

#!/bin/bash
INFILE=$1
START=$2
STOP=$3
OUTFILE=$4

OFFSET=`php TimeDiff.php "$START" "$STOP"`

echo "Disecting $INFILE starting from $START to $STOP (duration $OFFSET)"
ffmpeg -ss "$START" -t "$OFFSET" -i "$INFILE" "$OUTFILE"

用法:

./audiochop.sh [input.mp3] [startchop] [stopchop] [output.mp3]

其中 [startchop] 和 [stopchop] 都是从曲目开头开始的绝对时间戳。

注意:脚本可能需要根据平台版本等进行调整......

相关内容