Yaleで、遊んで学ぶ日々。
Yaleで、遊んで学ぶ日々。
囲碁、ときどきプログラミング、ところにより経済。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
画像を順番に表示させていく、紙芝居型の動画を作ってみました。思っていたより大分難しかったですけど、概ね解決したと思います。環境はUbuntu10.04です。
1. 画像作り
* スクリーンショット撮影の自動化
Ubuntuでは、Printや、Alt+Printでスクリーンショットを取れるけど、その場合は保存ダイアログが出てきて自動化に向かない。そこで、Imagemagickのimportコマンドを使うと便利。
下準備として、撮影したいウィンドウのIDを調べる必要がある。Terminalから、
$ xwininfo -frame
として、IDを調べたいウィンドウをクリックするとずらっと色んな情報が出る中に、window idというものがあるのでこれをメモする。
$ import -window <window id> "cap.png"
とすれば、対応するウィンドウのスクリーンショットがcap.pngに保存される。シェルスクリプトを書けば、自動化は容易。例えば、ループを回して
$ sleep 10
を使えば10秒おきの撮影ができる。
* キーボード・マウス等の操作を自動化
キーボードやマウスでの操作をシミュレートする目的で、自動化ツールが揃っています。xdotoolというのがお勧めです。今回のケースでは、あるウィンドウにおいて「あるキーを押してスクリーンショット撮影」という作業を繰り返したかったので、重宝しました。そのためには、やはりwindow idが必要なのですが、同じウィンドウでも先ほどのものとは異なるidを使うみたいなので調べ直します。
$ xdotool search <キーワード>
これはキーワードでウィンドウを検索する命令なので、例えば該当するウィンドウのタイトルの一部などを入れます。
$ xdotool windowfocus <window id2>; xdotool key Right
とすれば、そのウィンドウ上で右キーを押す、ということを自動化できるので、これをループに組み込みます。ちなみに、2行に分けるとウィンドウのフォーカスの移りかわりが煩雑でバグの元なので、一行にまとめて書くと無難。
* 画像を切り抜く。
これもimagemagickを使います。convertという命令です。
$ convert -crop 796x500+0+70 $f cut.png
数字の部分は、
<切り抜く部分の横の長さ>x<切り抜く部分の縦の長さ>+<左上の横座標>+<左上の縦座標>
こういう場合、座標は左上を原点として考えます。
* 画像に黒ベタをつける。
作りたい動画のサイズと手持ちの画像のサイズが違う場合は、余白部分を塗りつぶすことが多く、黒ベタと呼ばれます。動画になってから黒ベタをつけてもいいのですが、画像段階やる方法もあります。動画をいじるより画像をいじる方がブラックボックスが少ない気がして好みです。
方法といっても、求めるサイズの長方形を塗りつぶした画像を作り、その上に手持ちの画像を重ねるだけで、いたってシンプルです。使うのはimagemagickのcompositeコマンド。
$ composite -geometry +0+48 main.png back.png result.png
数字の部分は、上に来る画像を置く位置を指定するもので、背景画像上で左上の点がとる座標で表す。この例では、796x500の画像を796x596の背景の上に重ねているので、ちょうど真ん中にくるように上下48のベタをつけている。
2. 動画作り
* 画像をくっつけて動画にする。
これもimagemagickでいけます。
$ convert -antialias -quality 90 -delay <delay> *.png tmp.mp4
-antialiasと-qualityのオプションは画質に関する指定です。詳しくは知らないですが、この命令で大分品質は高かったので良し。-delayは画像の切り替わる間隔です。再生時間、delay、画像の枚数の関係はどうやら
delay * 枚数 / 75 = 再生時間
となっている模様。つけたいBGMの長さのども考慮してdelayの値を決めます。こうして、無声動画tmp.mp4ができました。
* 動画に音声をつける。
AvidemuxというGUIソフトが便利です。tmp.mp4をAvidemuxで動画を開き、Audio -> Main TrackにおいてExternal MP3を選択し、ファイルを選択します(もちろんMP3ファイルの場合)。VideoのコーデックはCopy, AudioのコーデックはFAAC、formatはMP4と設定し、Saveすれば動画完成です(名前をvid.mp4とする)。再生時間を調整したいときはVideo -> Framerateを変更します。Framerateを高くすると再生時間は短くなります。
* ビデオコーデックをx264に変更。
上の方法でいくと最終的にビデオのコーデックはmpegになるのですが、動画サイトに投稿する場合はコーデックをx264にしたほうが画質が良い場合があります。あとついでにサイズを変更した方が良いことも。そこで、
$ ffmpeg -i vid.mp4 -f mp4 -vcodec libx264 -acodec copy -vpre default -cqp 23 -aq 100 -s 512x384 -y nico.mp4
として、コーデックを変更。サイズ変更をしない場合は「-s 512x384」の部分を削除。このとき、縦横の長さが偶数じゃない2で割れないとエラーになるんです。それくらいうまいこと丸めてくれないもんですかね。
1. 画像作り
* スクリーンショット撮影の自動化
Ubuntuでは、Printや、Alt+Printでスクリーンショットを取れるけど、その場合は保存ダイアログが出てきて自動化に向かない。そこで、Imagemagickのimportコマンドを使うと便利。
下準備として、撮影したいウィンドウのIDを調べる必要がある。Terminalから、
$ xwininfo -frame
として、IDを調べたいウィンドウをクリックするとずらっと色んな情報が出る中に、window idというものがあるのでこれをメモする。
$ import -window <window id> "cap.png"
とすれば、対応するウィンドウのスクリーンショットがcap.pngに保存される。シェルスクリプトを書けば、自動化は容易。例えば、ループを回して
$ sleep 10
を使えば10秒おきの撮影ができる。
* キーボード・マウス等の操作を自動化
キーボードやマウスでの操作をシミュレートする目的で、自動化ツールが揃っています。xdotoolというのがお勧めです。今回のケースでは、あるウィンドウにおいて「あるキーを押してスクリーンショット撮影」という作業を繰り返したかったので、重宝しました。そのためには、やはりwindow idが必要なのですが、同じウィンドウでも先ほどのものとは異なるidを使うみたいなので調べ直します。
$ xdotool search <キーワード>
これはキーワードでウィンドウを検索する命令なので、例えば該当するウィンドウのタイトルの一部などを入れます。
$ xdotool windowfocus <window id2>; xdotool key Right
とすれば、そのウィンドウ上で右キーを押す、ということを自動化できるので、これをループに組み込みます。ちなみに、2行に分けるとウィンドウのフォーカスの移りかわりが煩雑でバグの元なので、一行にまとめて書くと無難。
* 画像を切り抜く。
これもimagemagickを使います。convertという命令です。
$ convert -crop 796x500+0+70 $f cut.png
数字の部分は、
<切り抜く部分の横の長さ>x<切り抜く部分の縦の長さ>+<左上の横座標>+<左上の縦座標>
こういう場合、座標は左上を原点として考えます。
* 画像に黒ベタをつける。
作りたい動画のサイズと手持ちの画像のサイズが違う場合は、余白部分を塗りつぶすことが多く、黒ベタと呼ばれます。動画になってから黒ベタをつけてもいいのですが、画像段階やる方法もあります。動画をいじるより画像をいじる方がブラックボックスが少ない気がして好みです。
方法といっても、求めるサイズの長方形を塗りつぶした画像を作り、その上に手持ちの画像を重ねるだけで、いたってシンプルです。使うのはimagemagickのcompositeコマンド。
$ composite -geometry +0+48 main.png back.png result.png
数字の部分は、上に来る画像を置く位置を指定するもので、背景画像上で左上の点がとる座標で表す。この例では、796x500の画像を796x596の背景の上に重ねているので、ちょうど真ん中にくるように上下48のベタをつけている。
2. 動画作り
* 画像をくっつけて動画にする。
これもimagemagickでいけます。
$ convert -antialias -quality 90 -delay <delay> *.png tmp.mp4
-antialiasと-qualityのオプションは画質に関する指定です。詳しくは知らないですが、この命令で大分品質は高かったので良し。-delayは画像の切り替わる間隔です。再生時間、delay、画像の枚数の関係はどうやら
delay * 枚数 / 75 = 再生時間
となっている模様。つけたいBGMの長さのども考慮してdelayの値を決めます。こうして、無声動画tmp.mp4ができました。
* 動画に音声をつける。
AvidemuxというGUIソフトが便利です。tmp.mp4をAvidemuxで動画を開き、Audio -> Main TrackにおいてExternal MP3を選択し、ファイルを選択します(もちろんMP3ファイルの場合)。VideoのコーデックはCopy, AudioのコーデックはFAAC、formatはMP4と設定し、Saveすれば動画完成です(名前をvid.mp4とする)。再生時間を調整したいときはVideo -> Framerateを変更します。Framerateを高くすると再生時間は短くなります。
* ビデオコーデックをx264に変更。
上の方法でいくと最終的にビデオのコーデックはmpegになるのですが、動画サイトに投稿する場合はコーデックをx264にしたほうが画質が良い場合があります。あとついでにサイズを変更した方が良いことも。そこで、
$ ffmpeg -i vid.mp4 -f mp4 -vcodec libx264 -acodec copy -vpre default -cqp 23 -aq 100 -s 512x384 -y nico.mp4
として、コーデックを変更。サイズ変更をしない場合は「-s 512x384」の部分を削除。このとき、縦横の長さが偶数じゃない2で割れないとエラーになるんです。それくらいうまいこと丸めてくれないもんですかね。
PR
この記事にコメントする
All Summer Long << | HOME | >> SBackup要注意 |
Calender
12 | 2025/01 | 02 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Search in This Blog
Latest Comments
[03/30 川内のばば山田]
[03/30 川内のばば山田]
[08/06 Aterarie]
[07/05 Agazoger]
[07/01 Thomaskina]
Latest Posts
(11/16)
(04/28)
(04/16)
(04/11)
(04/05)
Latest Trackbacks
Category
Access Analysis