参考にしたサイト様
ffmpeg で指定時間でカットするまとめ
ttps://nico-lab.net/cutting_ffmpeg/
"-c copy"を使用すると、切り取り時間がずれたため、記述しなかったらズレが減少したが、ffmpegの処理時間は増えた。
複数の命令文で動画を切り取る時は、batファイルにしたら上手くいった。
※wikiwikiだとハイフンを書くと、記号に変換されるためダブルコーテーションで囲っている。
ffmpegを使用する際、ダブルコーテーションははずす。
"-t"が秒数を指定。
例
"-t" 120
上記は、2分のこと。
"-to"が時、分、秒で指定。
例
2:00.000
上記は、2分を時分秒で表記。
開始0秒から指定時間を出力する
ffmpeg -i input.mp4 -t [duration] -c copy output.mp4
例
0秒から1分40秒の範囲切り出す。
ffmpeg -i input.mp4 -t 100 -c copy output.mp4
指定時間までカットし、最後まで出力する
ffmpeg -ss [duration] -i input.mp4 -c copy output.mp4
例
動画の時間の10分まで飛ばして、それ以降の全てを出力する。
ffmpeg -ss 00:10:00 -i input.mp4 -c copy output.mp4
指定時間までカットし、指定した再生時間まで出力する。ここのtoは秒時間よりも hh:mm:ss のほうが使いやすい
ffmpeg -ss [duration] -to [hh:mm:ss] -i input.mp4 -c copy output.mp4
例
再生時間の10:30から、10:50までの間の期間を切り取る。
ffmpeg -ss 10:30 -to 10:50 -i input.mp4 -c copy output.mp4
または
ffmpeg -ss 10:30 -to 10:50 -i input.mp4 output.mp4
指定時間までカットし、指定区間を出力する
ffmpeg -ss [duration] -i input.mp4 -t [duration] -c copy output.mp4
例
動画の時間の1分まで飛ばし、そこからの10秒間を切り取る。
ffmpeg -ss 00:01:00 -i input.mp4 -t 10 -c copy output.mp4
ffmpeg -ss [開始時間] -i [入力ファイル] -t [切り出し範囲] -c copy [出力ファイル]
ffmpeg -ss [開始時間] -i [入力ファイル] -to [終了時間] -c copy [出力ファイル]
例えば次のような連番のpng画像から.mp4の動画を生成する場合。
image_001.png
image_002.png
image_003.png ......
$ ffmpeg -r 30 -i image_%03d.png -vcodec libx264 -pix_fmt yuv420p -r 60 out.mp4
この場合は、連番画像からフレームレート60fpsの.mp4形式の動画を生成します。
- r が2回書いてありますが、最初の -r オプションで30fpsの連番画像ということを明示して、それを2回目の -r オプションで60fpsで動画化するように指定しています。
つまり、この場合に出力される動画は、1秒間に違う画像が30枚あり、同じ画像を2度表示することで結果的に60枚表示していることなります。
連番画像が image_001.png ~ image_120.png で120枚だった場合、4秒の動画が作られます。
ffmpeg -framerate 30 -i image_%03d.png -vcodec libx264 -pix_fmt yuv420p -r 60 out.mp4
[出力画像ファイル]には、"%04d.jpg"等を入力する
動画から指定時間点で静止画を切り出したい場合▼
ffmpeg -ss [開始時間] -i [入力ファイル] -vframes 1 -q:v 1 -s 800x600 -f image2 %04d.jpg
動画から連続した静止画を切り出したい場合(10枚)▼
ffmpeg -ss [開始時間] -i [入力ファイル] -vframes 10 -q:v 1 -f image2 %04d.jpg
動画から1秒ごとに10枚の画像を切り出したい場合▼
ffmpeg -i [入力ファイル] -r 10 -q:v 1 -f image2 %04d.jpg
動画から10秒ごとに1枚の画像を切り出したい場合▼
ffmpeg -i [入力ファイル] -vf fps=0.1 -q:v 1 -f image2 %04d.jpg
動画から1分ごとに1枚の画像を切り出したい場合▼
ffmpeg -i [入力ファイル] -vf fps=1/60 -q:v 1 -f image2 %04d.jpg
ffmpegでMP4ファイルを結合する
ffmpeg
最終更新日 2018年04月10日
投稿日 2017年07月04日
あるファイルAと別のファイルBを連続で再生する動画ファイルCを作りたかったので、やり方を調べてみました。
まず、以下のように結合したいファイルを各行に記述したテキストファイルを作ります。
mylist.txt
file /path/to/fileA.mp4
file /path/to/fileB.mp4
次に、このテキストファイルと同じディレクトリで以下のコマンドを実行します。
ffmpeg -f concat -i mylist.txt -c copy output.mp4
※mylist.txt は先ほど作成したテキストファイルのファイル名です。
※ffmpegにパスが通っている必要があります。
- c copyはオリジナルファイルのコーデックを再エンコードすることなく処理するオプションです。
とても高速に処理できますが、fileA.mp4、fileB.mp4のコーデックが異なる場合はこの方法では結合できません。
異なるコーデックの動画を結合したい場合は、-c copyを外す(デフォルトのコーデックが使われる)かコーデックを指定してエンコードしてください。
ffmpeg -f concat -safe 0 -i inputs.txt -c copy output.mp4
動画同士を連結したいときもFFmpegなら比較的簡単!
まずは連結したい動画のリストを作る
input01.mp4とinput02.mp4とinput03.mp4 を連結したいときは以下のように inputs.txt に書く
inputs.txt
file './input01.mp4'
file './input02.mp4'
file './input03.mp4'
inputs.txt を作成して、次のコマンドを実行すると、複数の動画が連結される。
inputs.txtにリストされた動画を連結してoutput.mp4を作成する
ffmpeg -f concat -safe 0 -i inputs.txt -c copy output.mp4
- safe 0のオプションをつけているので、動画リストのファイルパスは絶対パスでも相対パスでも良い。
連結したい動画のコーディック(h.264やvp9など)がすべて同じなら -c copyオプションをつけることで、 高速・無変換・無劣化 で連結できる。
連結する動画がたくさんあるならこのやり方でも手間はかからないが、 動画A+動画B=動画Cみたいに、2つの動画をつなげたいときに、inputs.txtを作成するのは手間
そんなときは以下のコマンド、-filter_complexsを使って結合する
ffmpeg -i 元動画ファイル [オプション] 変換後動画ファイル
1秒間に4枚表示させたかったから -r 4 と指定しているのです。
ffmpeg -r 4 -i input_%03d.png output.gif