FFmpegを使用してビデオファイルの一部を開始位置から終了位置に切ります[複製]


144

この質問にはすでに答えがあります:

30分のビデオファイルがありますが、00:09:23から00:25:33までのビデオを抽出したいです。

で開始位置を定義できますが-ss、終了位置の開始位置が見つかりませんでした。助けてください?

回答:


244

ffmpegをインストールする

必ず最新バージョンのffmpegダウンロードし、ディストリビューションに付属しているバージョン(Ubuntuなど)は使用しないでください。さまざまなディストリビューションのパッケージバージョンは多くの場合古く、期待どおりに動作しません。

または、自分でコンパイルします

再エンコードせずにビデオをカットする方法

これを使用して、ビデオを[start]for から切り取り[duration]ます。

ffmpeg -ss [start] -i in.mp4 -t [duration] -c copy out.mp4

ここで、オプションの意味は次のとおりです。

  • -ss開始時間を指定します。例:00:01:23.000または83(秒)
  • -t クリップの長さを指定します(同じ形式)。
  • Recent ffmpegには、終了時間を提供するフラグもあり-toます。
  • -c copy最初のビデオ、オーディオ、字幕ビットストリームを、再エンコードせずに入力から出力ファイルにコピーします。これにより品質が損なわれることはなく、コマンドが数秒以内に実行されます。

再エンコードを使用してビデオをカットする方法

-c copyオプションを省略すると、選択ffmpegした形式に従って出力ビデオとオーディオが自動的に再エンコードされます。高品質のビデオとオーディオについては、それぞれx264エンコーディングガイドAACエンコーディングガイドをお読みください。

例えば:

ffmpeg -ss [start] -i in.mp4 -t [duration] -c:v libx264 -c:a aac -strict experimental -b:a 128k out.mp4

1
Ubuntu 12:10では、-c:vと-c:aは機能しませんでした。代わりに「-acodec copyおよび-vcodec copy」を使用する必要がありました。
サミュエルランパ

1
@Samuel次に、古いバージョンを使用しています。これは、実際のFFmpegではなく、Libavフォークです。参照:stackoverflow.com/a/9477756/1109017
slhck

これをありがとう!期間を指定しない場合、最後まで進みますか?
ジェフ

@ジェフはい!(最
小文字

3
@Prateek(再エンコードの代わりに)ビデオビットストリームをコピーする場合、キーフレームでのみカットできます。1、2、3秒にキーフレームがあるが、1.5秒でカットしたい場合、ffmpegは2秒目までカットを開始します。それは不正確になります。
-slhck

26

今、次のコマンドを使用できると思います。

ffmpeg -i inputFile -vcodec copy -acodec copy -ss 00:09:23 -to 00:25:33 outputFile

見た目も持っているffmpegのドキュメント、またはこのwikiページを


6
ffmpeg -i inputFile -c copy -ss 00:09:23 -to 00:25:33 outputFile簡単なバージョン
nwgat

3
ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy -copyts cut.mp4バージョンを使用する必要がありました(で-copyts)、それ以外の場合は間違ってカット(最初に黒い画面)2番目のリンクをありがとう。
Necronomicron

これは素晴らしいことです。最後に望んだのは、エンドポイントから期間を計算することでした。
トマスガンドール

-toオプションは、実際に尋ねられた質問に答えます。残りの答えは無作法であるか時代遅れです。
ジェームズバワリー

12

これは、誰もtrim フィルタを提案しなかったという奇妙なことです。

入力の2分目を除くすべてをドロップします。

ffmpeg -i INPUT -vf trim=60:120

最初の1秒のみを保持します。

ffmpeg -i INPUT -vf trim=duration=1

2番目の13から2番目の58までを除くすべてをドロップします。

ffmpeg -i INPUT -vf trim=13:58 OUTPUT

8
はい、言及する良いtrimatrim。私は通常、フィルタリング時にこれらを使用しますが、ユーザーはフィルタリングが再エンコードを必要とすることに注意する必要があります
llogan

あなたは私のヒーローです。私はこれを行うフィルターがひどく必要でした。
fahadash

5

これらの2つの方法は、WindowsとLinuxで機能します。

ffmpegでビデオファイルを分割する方法は2つあります。最初のものはそれ自体でそれよりも優れています-より高速ですが、特定の欠陥を持つ出力ファイルを作成する場合があります。そのため、これらのケースでは、ビデオファイルを分割する2番目の方法があります。かなり遅く、出力ファイルは大きくなりますが、使用される入力ファイルと常に同じ品質レベルであるようです。

方法1:

ffmpeg -ss <start> -i in1.avi -t <duration> -c copy out1.avi

方法2:

ffmpeg -ss <start> -i in1.avi -t <duration> out1.avi
  • <start>–ビデオffmpegの一部の始まりは切り取ることです。形式:00:00:00.0000、時間:分:秒:ミリ秒を意味します。

  • <duration>–ビデオffmpegの一部の期間は切り取られます。上記と同じ形式。

例:

ffmpeg -ss 01:19:00 -i in1.avi -t 00:05:00 -c copy out1.avi
ffmpeg -ss 01:19:00 -i in1.avi -t 00:05:00 out1.avi

ffmpegは、1時間19分0秒からビデオファイルの一部を切り取ります。ビデオシーケンスの切り取り時間は5分0秒です。


わかりました。ドキュメントをチェックアウトして、明日お試しください。
juGGaKNot

3
-sameq「同じ品質」意味するものではなく、ffmpegから削除されました。-codec copy代わりに使用してください。また、-toオプションについても忘れないでください。
-llogan

引用文のコマンドはかなり古いため、修正しました。情報を適切に引用せずにコピー&ペーストしないでください。
slhck

-1

これを使用できます

ffmpeg -sameq -ss clip_start -t duration  -i  original.ogg  clip.ogg

ここでは、ビデオの長さを指定する必要があります。すなわち。00:25:33-00:09:23


1
他の答えで述べたように、コマンドを使用すると、ファイルを再エンコードすることになります。これは絶対に必要ではなく、品質が低下し、処理時間が長くなります。
-slhck

-2

次の構文を使用して、ffmpefでビデオをカットします。

ffmpeg -sameq -ss [start_seconds] -t [duration_seconds] -i [input_file] [outputfile]

-tは、秒単位で期間を設定するために使用されます-終了時刻を指定することはできませんが、これはうまくいくはずです。


1
なぜFFmpegを設定してファイルを再エンコードするのですか?-sameq「同じ品質」を意味するものではないことに注意してください。
-slhck
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.