2010-05-06 14:12:17 +0000 2010-05-06 14:12:17 +0000
357
357

ffmpegを使って動画を切り取る方法

私は以下のような大きなファイルのセクションを切り取るためにffmpegを使っています:

ffmpeg -i input.wmv -ss 60 -t 60 -acodec copy -vcodec copy output.wmv

-ssの部分は正常に動作しますが、-tは無視されています。正しくは-ssで指定した最初の指定秒数を削除しますが、その後はコピーで入力の最後まで行き続けます。

ffmpegを使ってビデオを再コードせずに最後まで切り取る方法はありますか?

回答 (7)

105
105
105
2014-01-20 04:07:24 +0000

他の人が言っていたように、-ssを(はるかに速い)前に置くか、(より正確な)後に置くかで、大きな違いが出てきます。ffmpegシークのページの “Fast And Accurate Seeking "のセクションには、両方の方法が書いてあり、私もそれを使ってみましたが、大きな違いがありました。基本的には、-i の前と後に -ss を入れますが、カットを開始したい場所の前に別のキーフレームがあるように十分な時間を残してください。例。Video.mp4 で 9 分 0 秒から 10 分 0 秒までの 1 分間のクリップを作成したい場合、次のように使用して素早く正確に行うことができます:

ffmpeg -ss 00:08:00 -i Video.mp4 -ss 00:01:00 -t 00:01:00 -c copy VideoClip.mp4

最初の -i は(約)8 分 0 秒まで速くシークし、その後、2 番目の -ss は 9 分 0 秒まで正確にシークし、-ss は 1 分 0 秒のクリップを取り出します。"もし -t 00:01:00-ss と一緒に使うと、結果として得られるビットストリームは、ffmpeg が i-frames での使用/分割のみを強制されているため、途切れ途切れになったり、再生できなくなったり、オーディオストリームと同期しなくなったりする可能性があります。”

これは、ビデオをコピーするだけでも、ビデオを再エンコードする必要があることを意味します。最初に-c:v copyだけを試してみてもいいですが、ビデオがひどい場合はやり直す必要があります。

27
27
27
2014-05-09 02:24:58 +0000

私は、-ssを組み合わせると、スタート時に半秒チョップになることを発見しました。

それを避けるためには、-c copyを取り除く必要があります(これは認められているトランスコードを行います)。

13
13
13
2014-09-04 05:48:57 +0000

このファイルをメディアプレーヤーで開き、フレームごとにフレームを進めてAVISynth fileを再生します。

DirectShowSource(("C:\Downloads\Video\Do you want him.flv"), Pixel_Type="yuy2").Crop(0,0,-0,-0)
Subtitle("C:\Downloads\Video\Do you want him.flv", font="Arial", size=24, text_color=$ff0000, align=3)
ShowFrameNumber(scroll=true, x=336, y=27, font="Arial", size=24, text_color=$ff0000)
ShowTime(x=398, y=44, font="Arial", size=24, text_color=$ff0000)

および ffmpeg -i "Path\do you want him.flv" \ -ss 00:00:05.240 -to 00:00:08.360 \ -vcodec libx264 -acodec libvo_aacenc \ "Path\Do you want him1.flv"

ffmpeg -i "Path\do you want him.flv" \ -ss 00:00:10.240 -to 00:00:14.360 \ -vcodec libx264 -acodec libvo_aacenc \ "Path\Do you want him2.flv"

は内容が付いているビデオ ファイルとの txt ファイルをのような作ります: 002 file 'C:\Downloads\Video\Do you want him1.flv' file 'C:\Downloads\Video\Do you want him2.flv'

の操業 ffmpeg: 002 ffmpeg -f concat -i FileList.txt -c copy "Path\NewName_joined.flv"

8
8
8
2013-05-19 03:14:56 +0000

私の場合は -t オプションは使えませんでしたが、-vframes は使えました。I-Frameでカットしたいのと、#framesを使って動画のGOPがわかったので、ffprobeの方が好きです。

ffmpeg -ss 60s -i input.wmv -vframes 1800 -acodec copy -vcodec copy output.wmv

ちなみに、-ssの前に-iを置くと、実行時間に大きな差が出ます。

5
5
5
2016-12-08 11:24:57 +0000

user225366と同様に、-tオプションは短い動画では動作しませんが、長い動画では動作します。短い動画では-frames:vの方が良いようです。他の回答にあるように、動画に音声が含まれている場合は、-acodecのコピーを追加する必要があります。

0
0
0
2020-02-12 02:20:00 +0000

このフォーマットを使用してください:

ffmpeg <start time> <input file> <cut duration> <out file>

例: ビデオ

ffmpeg.exe -ss 00:01:00 -i "in file.mp4" -to 00:01:00 -c copy out.mp4 の 1 分後に 60 秒のクリップを切って下さい。

0
0
0
2019-09-01 05:29:02 +0000

あまり言及されていないようですが(専門家ではないので何か問題があるのかもしれません)、ファイルに字幕やチャプターなどのメタデータが含まれている場合、以下のコマンドで全てのストリームをカット/トリムして保持することができます。

-map 0 を使用すると、-c copy を介してスタートを省略すると、入力ビデオがスタートから 60 秒目までカットされます。