大韓民国観察記Neo

韓国の、どうでもいい、重箱の隅をつつくブログ。

ffmpeg 動画の切り貼り

システム:Fedora29、Fedora30
インストール方法:#dnf install ffmpeg
(rpmfusion-free,rpmfusion-nonfreeのリポジトリー登録が必要)
Fedoraだとrpmfusionにパッケージがあるからいいけど、他のディストリビューションでは、コンパイルしなければならないからたいへん。

f:id:sirius-B:20191211011349p:plain


効果的なプレゼンテーションを作るなら、圧倒的に動画が優位。
しかし、撮って出しの長回しの動画ほど、見せられて苦痛なものはない。

標準的な被写体なら1カット90秒が限界。
被写体の巨大さや、空気感を演出するために、2分間長回しすることはあっても、これは特殊なケース。

動画を撮る時だって、尺の最初から最後まで完璧にすることなんて絶対にできないから、撮った動画から使える部分を切り出す作業は絶対に必要。
切った動画をつなげて、30分ぐらいの動画に仕上げていくわけね。

そんなこと、みんなわかっちゃいるけど、みんなやっていないのは、そんなことできないから。
ホームビデオの画像は業務用と違ってmpeg圧縮がかかっているから、切り出したい秒数と、フレームの切れる位置が一致しなくて、事実上、思い通りに切り貼りできないのね。
Windows用の動画編集ソフトだと、劇重、メモリー大喰い、システムが不安定になるうえ、こういう傾向が大きかったりする。
無理にやると、寸足らずなテイクの連続の、いかにも素人っぽい動画ができてしまうわけ。

ffmpegがプロ用たるゆえん
mpeg圧縮がかかっている画像を、ほとんど劣化させずに切り出したい秒数でガンガン切れる。
そして、切ったmpeg画像を有無を言わせず繋げることができる。
(注:解像度とエンコード方法が違う動画同士はつなげない。動画編集的な切り貼りができるということ。)

切り出し
頭から15秒切り出して、お尻を捨てる場合

ffmpeg -i input.mp4 -t 15 output.mp4

頭から135秒目から73秒切り出して、お尻を捨てる場合

ffmpeg -i input.mp4 -ss 135 -t 73 output.mp4

切り出す方法は単純でこの2パターン。

 

つなげる

ffmpeg -i "input1.mp4" -i "input2.mp4" -filter_complex "concat=n=2:v=1:a=1" output.mp4

動画はつなげる時に、どうがんばっても、ある程度画質が劣化するらしい。
極力画像劣化を避けるため、インデックスファイルを作ってつなげる方法が一般的。
しかし、何度やってもうまくいかんので、インデックスファイルなしにつなげる方法を調べたところ、これがヒット。
2つづつ地道に繋いでいくという、画像は確実に劣化するであろう何ともアナログな方法。
メイキング・オブ・ブレードランナーという本を読んでいたら、(アナログな特撮全盛の時代)最初から公開用の35mmフィルムで合成するから劣化が問題になるので、撮影は70mmフィルムを使って高精度動画を作り、合成して70mmマスターフィルム(ある程度画質は劣化しているが、35mmフィルムより圧倒的に高精細)を作った後、公開用35mmフィルムにスケールダウンすれば問題ないという記述があった。
これだ、このアナログな方法なら簡単で使えると思った次第。

ffmpeg -i "concat:1.mp4|2.mp4|3.mp4" -c copy output.mp4

低劣化結合を目指す場合、こういうやり方もあるが、結構よく失敗する。

-c copy オプションを外せばかなり強引に結合できるらしいが、劣化は大きくなるようだ。