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


34

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

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

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

これは可能ですか?


1
開始時間と継続時間の代わりに開始時間と停止時間を使用してオーディオファイルのセクションを抽出したいのですが、それは正しいですか?

1
@Nashaそうですね。わかりやすくするために投稿を編集します。
user8547

1
それに応じてあなたの質問を言い換えました。確かにffmpeg、開始時間と期間以外は提供していないようです。そして、mplayerそうでもありません。

回答:


45

ffmpegのは、新しいオプションの持っているようだ-to文書を

-to 位置入力 / 出力
を停止し、出力を書き込むか、の入力を読み取る位置位置 は期間の指定である必要があります。(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

これにより、file.mkvのコピー(file-2.mkv)が20秒マークから40秒マークに作成されます。


2
Tx、それはうまく機能します。copyオーディオ/ビデオが同期していない部分を削除しないと、それを削除して追加する-async 1と、魅力のように機能することがわかりました。もちろん、再エンコードが必要なので、改善はcopy同期問題のないが許可するコマンドになります。
user8547

1
複数の間隔を設定して、それらを結合することは可能ですか?すなわちffmpeg -i file.mp3 -ss 10 -to 11 -ss 20 -to 21 -ss 30 -to 31 ....
アヴナーバー

@AvnerBarrこれがFFmpegだけで可能かどうかはわかりませんが、Mencoderで可能だということは知っています。これは、-toオプションを使用して機能しますffmpeg -i mmm.mp4 -ss 00:04:04 -to 00:04:35 -c copy output1.mp4 && ffmpeg -i mmm.mp4 -ss 00:05:47 -to 00:06:05 -c copy output2.mp4 && mencoder -ovc copy -oac mp3lame -idx output1.mp4 output2.mp4 -o complete.mp4
。– user8547

1

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

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


コマンドは次の例のようになりますか?audiochop.sh input.mp3 00:01:30 00:01:50 output.mp3
user8547

はい、まさにそのとおりです。
リッチ

これは実際には完全なコマンドです:./audiochop.sh input.mp3 00:01:30 00:01:50 output.mp3コマンドの前にピリオドとスラッシュを置くのを忘れていたので、そうではなかったのですワーキング。
user8547

ちなみに、このphp / bashスクリプトはmp4ビデオでも機能することがわかったので、どのビデオ形式でも機能すると思います。
user8547

1
あなたのffmpegがサポートするどんなフォーマットでも動作するはずです。
リッチ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.