開始時間と停止時間を使用してオーディオファイルをトリミングする

開始時間と停止時間を使用してオーディオファイルをトリミングする

オーディオをトリミングするFFmpegコマンドがあります。

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

このコマンドの問題は、オプション-tに秒単位の期間が必要であることです。01:43:46。たとえば、開始/停止時間を使用してオーディオをトリミングしたいとします。01:43:46そして00:01:45.02

可能ですか?

答え1

ffmpegの新しい代替案があるようです。- 到着存在する文書:

- 到着 場所入力する/出力)
出力書き込みまたは入力読み出しを停止します。場所場所 期間仕様でなければなりません。参考(ffmpeg-utils) ffmpeg-utils(1) マニュアルの期間セクションです。

-toと-tは相互に排他的で、-tが優先されます。

2つの時間形式を使用したコマンドの例

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]はどちらもトラックの先頭の絶対タイムスタンプです。

注:プラットフォームのバージョンなどに応じてスクリプトを調整する必要があります。

関連情報