私はこのように大きなファイルの一部分を切り取るためにffmpegを使っています
ffmpeg -i input.wmv -ss 60 -t 60 -acodec copy -vcodec copy output.wmv
-ss
の部分は正常に動作しますが、-t
は無視されます。-ss
で指定された最初に指定された秒数を正しく削除しますが、その後はコピーで入力の最後まで進みます
ffmpegを使って、動画を再録せずに動画の最後を切り取る方法はありますか?
430 Neil 2010-05-06
-ss
オプションで開始タイムスタンプを指定し、-t
オプションでエンコード時間を指定することができます。タイムスタンプは HH:MM:SS.xxx
形式か秒単位 (s.msec
) で指定する必要があります
以下は、最初の30秒をクリップして、その10秒後にあるものをすべてクリップします
ffmpeg -ss 00:00:30.0 -i input.wmv -c copy -t 00:00:10.0 output.wmv
ffmpeg -ss 30 -i input.wmv -c copy -t 10 output.wmv
-t
は出力オプションであり、常に-i
の後に指定する必要があることに注意してください
Some tips:
- 古いバージョンの ffmpeg では、
-i
の後に-ss
を使うと、実行速度が遅くなる代わりに、より正確なシークが可能になります。こちらも参照してください。FFmpeg を使ったシークも参照してください カットしたいタイムスタンプを指定するには、
-t
の代わりに-to
を使うことができます。つまり、-i <input> -ss 30 -t 10
の代わりに-i <input> -ss 30 -to 40
を使っても同じことができますお使いの ffmpeg が
-c
,-to
をサポートしていない場合は、非常に古くなっている可能性があります。新しいバージョンを自分でコンパイルするか、静的ビルドをホームページからダウンロードしてください。それは本当に複雑なことではありません
500 None 2010-05-15
他の人が言っていたように、-ss
を-i
の前(より速く)に置くか、-ss
を-i
の後(より正確に)に置くかで大きな違いが出てきます。ffmpegシークのページにある「高速で正確なシーク」のセクションには、両方の方法が書いてあり、私もそれを使ってみましたが、大きな違いがありました。基本的には、-ss
の前と-i
の後に-ss
を置きます。例:-ss
と-i
の間には十分な時間を空けてください。Video.mp4で9分0秒から10分0秒までの1分間のクリップを作りたい場合は、-ss
と-i
の前に-ss
、-i
の後に-ss
と-i
を入れれば、素早く正確にカットできます
ffmpeg -ss 00:08:00 -i Video.mp4 -ss 00:01:00 -t 00:01:00 -c copy VideoClip.mp4
最初の-ss
は(約)8分0秒まで高速シークし、2番目の-ss
は9分0秒まで正確にシークし、-t 00:01:00
は1分0秒のクリップを取り出す
また、このページの重要な点にも注意してください。”-ss
を-c:v copy
と一緒に使うと、結果として得られるビットストリームがぎこちなくなったり、再生できなくなったり、オーディオストリームと同期しなくなったりする可能性があります
これは、ビデオをコピーしたい場合でも、ビデオを再エンコードする必要があることを意味します。最初に -c copy
だけを試すことができますが、ビデオがクソの場合は、それをやり直す必要があります
133 seriesoftubes 2014-01-20
-ss
と-c copy
を組み合わせると、スタート時に半秒チョップになることがわかりました
これを避けるためには、-c copy
を削除しなければなりません (これは確かにトランスコードを行います)
31 Chris 2014-05-09
MANUALLY
フレーム単位でフレームを進めるメディアプレーヤーでファイルを開き、AVISynthのファイルを再生するなどのデータを入れて再生します
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)
その後、EXACTの時間形式でカットします
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"
and
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ファイルを作成します
file 'C:\Downloads\Video\Do you want him1.flv'
file 'C:\Downloads\Video\Do you want him2.flv'
Run ffmpeg:
ffmpeg -f concat -i FileList.txt -c copy "Path\NewName_joined.flv"
13 budman1 2014-09-04
私の場合は-t
ではうまくいかなかったのですが、-vframes
ではうまくいきました。I-Frameでカットしたいのと、#frames
で動画のGOPがわかったので、ffprobe
を使うことにしました
私が使っていたコマンドラインは
ffmpeg -ss 60s -i input.wmv -vframes 1800 -acodec copy -vcodec copy output.wmv
ちなみに、-ss
を-i
の前に置くと実行時間に大きな差が出ます
8 Ben 2013-05-19
user225366と同様に、-tオプションは短い動画には使えませんが、長い動画には使えます。短い動画では-frames:vの方が良いようです。私の場合はこれが有効でした
ffmpeg -ss 4 -i input.mp4 -frames:v 200 -vcodec copy output.mp4
-他の回答が示すように、ビデオに音声がある場合は、コーデックのコピーを追加する必要があります
5 VectorVortec 2016-12-08
あまり言及されていないようですが(私は専門家ではないので、キャッチがあるのかもしれません)、もしファイルに字幕やチャプターなどのメタデータのような他のストリームがある場合は、以下のコマンドですべてのストリームをカット/トリムして保持することができます
ffmpeg -to 60 -i input.mkv -map 0 -c copy output.mkv
-map 0
ではファイル内の全てのストリームを取り込み、-c copy
では全てのストリームをそのままコピーします。 -to
を使って -ss
で開始部分を省略すると、入力ビデオは開始から 60 秒までカットされます
map
をいじることは、特定のストリームだけをカットに残したい場合にも便利です(ファイル内のすべてのオーディオソースが必要ない場合や、いくつかの字幕だけが必要な場合など)
私はFAT32ストレージに保存できない大きなMKVファイルを分割する必要があるときに使用しています
1 Gruber 2019-09-01
このフォーマットを使用します
ffmpeg <start time> <input file> <cut duration> <out file>
例えば、ビデオの1分後に60秒のクリップをカット
ffmpeg.exe -ss 00:01:00 -i "in file.mp4" -to 00:01:00 -c copy out.mp4
1 Zimba 2020-02-12