web-dev-qa-db-ja.com

FFmpegでビデオファイルから開始位置から終了位置までの部分を切り取る

30分のビデオファイルがありますが、00:09:23〜00:25:33の間にビデオを抽出したいと思います。

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

137
x74x61

Ffmpegをインストールする

ffmpeg の最新版をダウンロードするようにしてください。そしてあなたのディストリビューションに付属するもの(例えばUbuntu)を使わないでください。さまざまなディストリビューションのパッケージ版は古くなっていることが多く、期待通りに動作しません。

または 自分でコンパイルしてください

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

[start]のために[duration]からビデオをカットするためにこれを使います:

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

ここで、オプションは次のことを意味します。

  • -ss は開始時間を指定します。 00:01:23.000または83(秒単位)
  • -t はクリップの長さを指定します(同じ形式)。
  • 最近の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
238
slhck

私はあなたが今次のコマンドを使うことができると思います。

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

ffmpeg Doc 、または このwikiページ もご覧ください。

24
sflee

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

入力の2分目以外のすべてを削除します。

ffmpeg -i INPUT -vf trim=60:120

最初の1秒だけを続けます。

ffmpeg -i INPUT -vf trim=duration=1

秒13から秒58までを除くすべてを削除します。

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

あなたはこれらの WindowsとLinuxで動作する2つの方法を使うことができます。

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 -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秒です。

4
Christian Wörz