2013年1月24日木曜日

ffmpegで動画を切り取る方法

ffmpegを用いて動画を切り取る方法を説明したい。使用したffmpegは、このブログエントリを書いた時点で最新バージョンである1.1(2013.1.7リリース)であるが、切り取り方を調べていてやっと見つけたドキュメントの発行は2009年なので、かなり前からこの方法になっていると思われる。

まず初めに見つけたドキュメントに沿ったコマンドである。

$ ffmpeg -y -i Usagoya.mov -r 6.427508 -filter:v "crop= x=200 : y=12: out_w= 280: out_h= 210" -an Usagoya.mp4

見れば分かるようにcroptop、cropbottom、cropleft、croprightという、よく検索で見つかるオプションは存在しない。
これらは、ffmpegの公式ドキュメンテーションであるffmpeg Documentation(日本語版)およびその英語版でも削除されたと書いてある。その代わりの方法も書いてはあるのだが、具体的でなく、理解できなかった。

次のコマンドでも同じ結果になるが、分かりやすさから言ったら、上記のコマンドの方が良いのかも知れない。

$ ffmpeg -y -i Usagoya.mov -r 6.427508 -filter:v "crop=280:210:200:12" -an Usagoya.mp4

この方法は見つけたドキュメントでは、削除されたことになっているようだが、実際には残っているようだ。

もとの動画と、上記コマンドを実行して切り取った結果得られる動画のスクリーンショットを掲載する。もとの動画のサイズは480×240ピクセル。そして切り取った動画のサイズは280×210ピクセルである。

もとの動画のスクリーンショット(480×240ピクセル)
もとの動画のスクリーンショット(480×240ピクセル)
切り取った動画のスクリーンショット(280×210ピクセル)
切り取った動画のスクリーンショット(280×210ピクセル)

見つけたドキュメントにあった通り、動画の左上を基準(原点)にしてx(横)方向に200ピクセル、y(縦)方向に12ピクセル、それぞれオフセットさせた位置で切り取とると、狙い通りの動画を作ることができた。

切り取った動画の再生時間が狂っているように見えるが、もとの動画も本来は31秒の再生時間であり、それが27秒間に再生されることを確認済みである。つまりffmpegの方が正しい再生時間で変換しているということになる。

ただし良いことばかりでは済まない。ffmpegの「-filter:v」には「yadif」というインターレース解除フィルタオプションもあるのだが、これとの組み合わせはできない(?)ようなのだ。(今回の動画はプログレッシブ(ノンインターレース)スキャンであり、問題はなかった)これ(「yadif」フィルタと組み合わせができないこと)が、バグなのか仕様なのかは良く分からない。

この動画は、上に説明した方法を参考にして作成したものである。

なお動画および、スクリーンショットに登場するうさぎは、うさゴヤというTwitterのアカウントがあれば、誰でも遊べるオンラインチャットゲームに参加するとダウンロードできるデスクトップアバターである。興味がある方はクリックしてみて戴きたい。
デスクトップアバターは、うさゴヤホームページのアプリからダウンロードできる。

2013年1月23日水曜日

スパースバンドルの見果てぬ夢

スパースバンドル・ディスクイメージというのをご存知だろうか? これは、Apple社Time Capsuleなどを用いて、ネットワーク経由でTime Machineのバックアップを行うためにMac OS X 10.5(Leopard)から採用したディスクイメージフォーマットだ。実際にはフォルダなのに、ひとつのファイルのように振る舞うのは、Mac OS Xのアプリケーションに似ている。

Time Machineでのバックアップを始めた頃、スパースバンドル・ディスクイメージを用いると、バックアップ領域のサイズを制限できるらしいということが分かって来た。ハードディスクは出来るだけパーティションを少なくして使うべきだという持論を持っていたので、これは朗報に思えた。

さらにうまい事にCONF is Original News Flash: 直付HDDに設定したTimeMachineの容量を制限する?というブログエントリを見つけ出し、小躍りした。しかし、何の設定が悪いのか、バックアップ領域のサイズを制限するという目論みはことごとく失敗したのだった。その上、いくらスパースバンドル・ディスクイメージを作っても、それが直付ハードディスク上にある場合は、バックアップには使用されない事が分かってしまった。

夢破れた今、しぶしぶではあるが、バックアップ用パーティションを作って運用しているのが、現状である。

ちなみに、ネットワーク経由であれば、Time Machineの容量制限 « 60D & Kiss X2で写真日記のブログエントリにある手順によってバックアップ領域のサイズを制限できるらしいのだが、残念ながら検証はできていない。

2013年1月22日火曜日

自分のMacの名前を取り出す

フィルタを使用した文字列操作 2を参考に、自分のMacの名前を取り出す方法を説明したい。

アプリケーション > ユーティリティ > ターミナル.appで以下のコマンドを実行する。

$ system_profiler SPSoftwareDataType | grep 'Computer Name' | cut -d ':' -f2 | cut -d ' ' -f2

この方法で、Time Machineで使われているコンピュータ名を取得する事ができる。(特にコンピュータ名が日本語を含む場合に便利)シェルスクリプトはもちろん、AppleScriptの「do shell script」命令等で使える。

ちなみにTime Machineでは以下のディレクトリ(フォルダ)構成でバックアップが作成されている。

Time Machine HDD > Backups.backupdb > コンピュータ名 > 日付時間ごとのバックアップ

2013年1月21日月曜日