スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ffmpegで動画を編集する

ちまちまffmpegで動画を編集することがあったので覚書き。

以前いくつかffmpegについての記事を書きました。

動画の結合・分割
ffmmpegについて

今回は、

動画のトリミング
動画の大きさ変更
音消し

についてメモ。
Twitterに上げるときなんかに便利です。

まずは動画のトリミングです。
以前の記事では、時間的な分割を紹介しました。
今回は、特定の場所をトリミングする方法を。



動画のここだけがほしい! ってことが時々あります。
なんせ素人ですからね。

この赤枠で動画を切り出す方法はこちら。



ffmpeg -i 元ファイル -vf crop= c : d : a : b 出力ファイル


a,b,c,dは数字です。
これにより、動画のトリミングを行うことができます。



続いて、動画の大きさ変更。

サイズを変更するためのコマンドはこちら。

ffmpeg -i 元ファイル -s 横幅x高さ 出力ファイル


元の動画より小さく設定すれば、ファイルサイズを小さくすることができます。



最後に音消し。

ffmpeg -i 元ファイル -an -vcodec libx264 出力ファイル


audio none とかですかね。
これで無音動画が作れます。

ちなみに、mp4形式のファイルをffmpegでmp3に変換すれば音だけを取り出せます。



以上、ffmpegの覚書でした。
では、今日はこの辺りで。
スポンサーサイト

ffmpegで動画の切り出し・結合

バイクに乗りたいけれど怖くて乗れないので見るだけで我慢しています。
ninjaに心を奪われかかっています。Wみたいでかっこいい…。

さて、今日はffmpegによる動画の切り出し・結合を行いたいと思います。
切り出しは以前にもやりました。

ffmpeg -i 元の動画 -t 切り出す時間(秒) 出力動画


ffmpeg -i 元の動画 -t 切り出す時間(秒) -ss 開始点(秒) 出力動画


今日はこれに加えて動画の結合を。

ffmpeg -i 元の動画1 -i 元の動画2 ... -i 元の動画N -filter_complex "concat=n=N:v=1:a=1" 出力動画


N個の動画を結合する場合、まず結合する動画を結合する順番に並べ、concatにNを指定します。
そのあとに続くvは映像を連結するか(1:true/ 0:false)、a は音声を連結するか(1:true/ 0:false)のオプションです。
これで動画を結合することができます。

それでは、短いですが今日はこの辺りで。

ffmpegによるmp4形式の動画のキーフレームの設定について

今日はキーフレームのお話をしたいと思います。

動画ファイルのデータ表現について
ご存知の方が多いと思いますが、動画ファイルというものはたくさんの静止画を連続で表示することによって表現されています。ぱらぱらマンガのようなものです。
この静止画の集まり、一枚ずつばらばらに保存していると動画ファイルのサイズがとても大きくなってしまいます。
そこで、静止画を何枚かにまとめ、そのまとまりごとに保存することが多いです。これが圧縮という操作です。
動画を扱う際には、この圧縮方法に気を使ってやらなければいけない場合があります。

キーフレームについて
上で述べたように、動画はいくつかのまとまりに分割されて保存されます。
MPEG形式の動画では、このまとまりの最小単位のことをGOP(Group Of Picture)と呼びます。
そして、GOPの一枚目の動画をキーフレーム(またはイントラフレーム、Iフレーム)と呼びます。
詳しくはこちらをさっくり読んでみてください。
ごちゃごちゃ書いてありますが、要はキーフレームがまとまりのインデックスになってると思ってください。

んで、このキーフレーム、動画の再生点を変えるのに使うんです。
例えば、40秒の動画があるとします。
この動画は、キーフレームが5秒ごとに設定されています。
この動画の再生点を18秒にする場合のイメージはこんな感じです。



このように、インデックスであるキーフレームに移動してから再生したい位置に再生ヘッドを移動させていると考えてください。
再生点の移動(シーク)はキーフレームごとにしかできません。

ここで問題が。
例えば、15秒から再生したい!という場合は簡単です。15秒のキーフレームにぽーんとシークしてそのまま再生を始めることができます。
しかし図のように18秒から再生したい場合、15秒にいったんシークして、その後18秒に再生点が到達したら動画を表示します。
つまり、約3秒程度のタイムラグが発生するわけです。
動画にもよりますが、30秒動画の真ん中あたりを再生したいときに5秒も10秒も待たされたらちょっといらいらしますね。
そこで、このキーフレームをたとえば1秒ごとに挿入してあげます。すると、シークが1秒ごとになり、結果としてタイムラグは1秒以下に抑えられます。

ただ、注意しなければならないのは、このキーフレームを増やすと動画のサイズが大きくなってしまうというデメリットがある点です。
自分の再生環境に合わせて折り合いをつけていきましょう。

GOPの設定方法

以前紹介したffmpegにGOPを設定する方法があるようです。
GOPはオプションで設定できます。

ffmpeg -i 変換元のファイル -g GOPの間隔 変換後のファイル


GOPの間隔はフレームレートによってかわります。
例えば、フレームレート30fps(つまり、1秒間に30枚の画像が表示される)の場合、設定するGOPを300とすれば300枚の画像を1つのまとまりとするので、キーフレームは300÷30となり、10秒ごとにキーフレームが挿入されることになります。
また、同じくフレームレート30fpsでGOPを30に設定した場合、画像30枚ごとにキーフレームが挿入されるので、結果として1秒ごとにキーフレームが設定されることになります。

以上、キーフレームについてでした。
ちょっとまだよくわかってない部分も多いので、修正することもあるかもしれません。
ご参考までに。

それでは、今回はこの辺りで。

ffmpegによる動画ファイルの切り出し

ffmpegによる動画ファイルの切り出しについて

今日はffmpegのターンです。
前回書いたように、動画の切り出しを行いたいと思います。

ffmpegを起動できる状態にしました。
またまたtiger.mp4を編集していきます。

今気づきましたがtiger23秒くらいしかなかった。

今回お世話になったのはこちら

時間指定して動画の開始からある場所までを切り出すには、変換の際にオプションを使います。

ffmpeg -i 元の動画 -t 切り出す時間(秒) 出力動画


開始点も指定する場合は

ffmpeg -i 元の動画 -t 切り出す時間(秒) -ss 開始点(秒) 出力動画


です。


早速やってみましょう。


tiger.mp4の開始から10秒を切り出してみます。

ffmpeg -i tiger.mp4 -t 10 tiger1_1.mp4




実行します



ずるずるっと出てきました。終わったようなので見てみます。



ありますね。

動画のほうも再生してみました。

わかりにくいですが、


元動画


分割後

再生時間と再生位置からなんとなく分割できていることを感じてほしい。

では、指定した秒数から分割をスタートした際に動画の残り再生時間が短かったらどうなるのか実験です。
具体的に言うと、今tiger.mp4は全部で23秒の動画です。
こいつを、20秒を開始点にして、10秒切り出してくれと頼んだらどうなるのか??

やってみましょう。

ffmpeg -i tiger.mp4 -t 10 -ss 20 tiger1_2.mp4


ターンッ

終わったようです。再生してみました。


どうやら、20秒の点から3秒間切り出せたようです。

では、今度は25秒を開始点にしてみます。

ffmpeg -i tiger.mp4 -t 10 -ss 25 tiger1_3.mp4


実行してみます。


何やら様子が違いますね。
警告らしきものを吐かれました(そりゃそうだわな)。

意訳としては、「サンプルを削除しようとしましたがキューが空ですよ」「エンコーダは結果を生成できませんでした」って感じかと思われます。
ないものは切り出せねぇよってことでしょう。無理はいけない。
一応確認したところ、tiger1_3.mp4なる動画ファイルは生成されましたが再生はできませんでした。

さて、なんとなく挙動がわかってきたので実際に使っていきたいんですが、もう少し情報があった方が応用しやすいです。動画の長さが知りたいです。
というわけで、探してみました。

まず、動画の情報を取得する方法です。
これは単純に

ffmpeg -i tiger.mp4


で見ることができるみたいです。



表示しました。多分、変換のたびに出てたんでしょうね。
下線部は動画ファイルの名前と保存形式
円で囲ってあるのが動画の秒数です。
一番下に出ているエラーメッセージは、「出力先の指定忘れてんぞおい」なんで無視します。

さてさて、動画の時間がわかりました。
つまり、60秒の動画を15秒毎に切り出すと動画ファイルが4つ、
1時間半の動画を10分毎であれば9個、という風に、何回分割を行えばいいかわかるようになるわけです。

……いちいちコマンド打つのすげぇめんどくさいな。

ということで、次回からffmpegはちょっとお休みしてスクリプトについて考えてみたいと思います。
ここからはまったくわからないので、まぁ地道に頑張っていきましょう。

では、今日はこの辺りで。

ffmpegについて

今日はどうやら今日のうちに書けそうです。

今回は趣向を変えてffmpegの話をしようと思います。
っていうか学校で使わないといけないので勉強ついでにまとめたいのです。

ffmpegとは


水平線とか使えるんですね。


えふえふえむぺぐと読むらしいです。
コマンドラインから実行できる、動画変換に特化したコンバータ(ファイル変換ソフト)です。
調べてみると、主に動画の形式変換に利用されているようです。
たとえば、mp4→avi変換など。逆もまたしかり。

では、インストールからさくっとやってみたいと思います。

参考はこちらのサイト…というかほぼこちらの言うとおりやっただけです。

ダウンロード・解凍ができたので、さっそく使ってみます。

Windows7環境なのでコマンドラインを起動します。
解凍先へ階層移動します。


コマンドメモ
dir

今いる場所にあるファイル、フォルダ名の一覧を表示
lsと混同してしまう癖が治らない。


ffmpegというフォルダの中に入ったら、さらにbinというフォルダの中に入ります。
入れましたら、コマンドラインは少し置いておいて今度はエクスプローラなどで先ほどのbinのフォルダを開きます。この中に、変換や編集を行いたい動画ファイルをぶっこんだら準備は完了です。

今回はサンプル用にNHKクリエイティブ・ライブラリー様から素材をお借りしてきました。



アムールトラの動画ファイルをダウンロードしてきました。48秒の動画です。
ファイル名を「tiger」にし、先ほどのbinフォルダにぶっこみます。

コマンドラインに戻り、dirで確認します。ありますね。


ではいよいよ動画変換を行います。
先ほどのtigerの後ろにmp4というのがくっついてます。
この.以下の文字列を拡張子といいます。
同じ動画を記録したファイルでも、用途によってさまざまな拡張子があります。
が、今回はとりあえず置いてまずは手を動かしたいと思います。

ffmpegの基本は

ffmpeg -i 編集するファイル オプション(あれば) 出力するファイル.拡張子


です。

ちょっとやってみます。
先程用意したtigerはmp4形式なので、これをavi形式に変更してみたいと思います。

ffmpeg -i tiger.mp4 tiger.avi




これを入力しEnterをターンッします。



するとずるずる何やら出てきます。

終わったようでしたらdirしてみます。


新しく「tiger.avi」というファイルができています。やったね!



無事再生もできました。なんのオプションも設定してないのでmp4と比べると粗いですね。

他にもいろいろ変換が可能です。
先程変換したときの最後の.aviを、例えば.wmvなどに変えるとffmpegが勝手に認識してその保存形式のファイルに変換してくれるようです。
また、オプションではフレームレートなどの設定も行えるらしい。すごいなffmpeg。


さて、ffmpegは動画変換に特化したコンバータと書きました。
しかし、私がボスから仰せつかったのは動画編集なんですねこれが。
最終的な目標は、任意の位置で動画を分割することです。
というわけで、次回は動画分割についてお勉強したいと思います。
ffmpegってマクロみたいなの組めたりするんだろうか…。

それでは、今日はこの辺りで。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。