-フォーマット変換のメモ
フォーマット変換のメモ
avconv
avconv は ffmpeg から派生した映像のエンコード、デコード用のライブラリです。
https://libav.org/about/からWindows 用のバイナリもダウンロードできます。
ライブラリとしては、映像を利用する自作のプログラムに組み込んで利用するといった使い方が本来になるのでしょうが、usr/binの中にはライブラリとして使用するためのファイルの他、avconv.exe という実行ファイルがあり、これを使いコマンドラインからの映像ファイルのフォーマット変換が行えます。
使用例: input.avi を 1024x1024 サイズのmp4ファイル output.mp4 に変換する場合
avconv.exe -i input.avi -s 1024x1024 -b 8M -maxrate 15M -bufsize 6M -bt 2M output.mp4
- -i インプットファイルの指定
- -s widthxheight サイズの変更
- -b (平均)ビットレート指定
- -maxrate マックスビットレート指定 -bufsize必須
- -bufsize マックスビットレート関係の計算のためのバッファサイズ
- -bt ビットレート変動の許容範囲(あまりきつい設定だと1-passは上手くいかない)
解像度別の適度なパラメータ例
1024x1024 | -s 1024x1024 -b 8M -maxrate 15M -bufsize 6M -bt 2M
|
1536x1536 | -s 1536x1536 -b 17M -maxrate 35M -bufsize 13M -bt 4M
|
2048x2048 | -s 2048x2048 -b 30M -maxrate 60M -bufsize 23M -bt 7.5M
|
3072x3072 | -s 3072x3072 -b 60M -maxrate 120M -bufsize 64M -bt 15M
|
4096x4096 | -s 4096x4096 -b 90M -maxrate 180M -bufsize 96M -bt 30M
|
追記: ffmpeg は、デフォルトが(?もしくは入力ファイルの設定?) yuv422p になっていて、再生できないプレイヤーがある
そういう場合は、-pix_fmt yuv420p をオプションに追加をする。
コーデックの変換オプションは
-vcodec もしくは -c:v (ビデオ)
-acodec もしくは -c:a (オーディオ)
使用可能なコーデックの一覧を表示するには
-codecs
imagemagick
imagemagick はコマンドライン(だけとは限らないのですが)での画像の操作や変換を目的としたライブラリです。
http://www.imagemagick.org/script/index.phpからダウンロード可能です。
(Windows版の場合は)以前は画像のフォーマットを変換するために convert.exe という実行ファイルが(他の機能の実行ファイルと含めて複数)あったのですが、最新版では magick.exe という1つの実行ファイルに統合されています。
convert.exe で行っていたような機能は magick.exe のオプションの1つとして動作するようになっています。
一部機能に Visual C++ 2013 の再配布パッケージ必要のようです。(ないと機能の一部で*.dllがインポートできません(ファイルがあっても)と謎のエラーが出る)
実行例)
magick convert input.jpg output.png
個人的な興味は GIMP 用の .xcf ファイルからの各種変換であるため、それに関した各種オプションや注意書きになります。
全般(重要)
GIMP 2.9 でのレイヤー(Default)にはまだ対応していないようなので、全レイヤーが(Legacy)モードになっている必要がある。
.psdに変換
実行例)
magick convert tmp.xcf -density 72 -clone 0 -insert 0 tmp.psd
デフォルトで作成した .psd 画像は解像度情報が不正(?)で GIMP で読むと警告が出る。 -density 72 などで解像度を設定する
複数のレイヤーがあると、1枚目が失われる。-clone 0 -insert 0 で、最初のレイヤーを最後に追加、さらに最後のレイヤーを先頭に挿入、という処理をして先頭にもう1枚レイヤーを配置する
複数レイヤー.xcfを連番.pngに変換
実行例)
magick convert tmp.xcf png24:tmp%02d.png
連番の命名規則は出力ファイル名に直接fprintfのフォーマットで記入。
べた塗りの画像だとインデックスカラー化されるので、png24: を付けて強制的にRGBモードのpngであることを指定する

複数レイヤーをアニメーションgifに変換

GIMP 特に2.9のgifアニメーション出力は(おそらく256色化プロセスが)遅い。枚数が多かったりサイズが大きい場合はimagemagickで変換を試みる価値はある。
実行例)
magick convert -delay 10 tmp.xcf -colors 256 -type Palette -remap tmp.xcf tmp.gif
- -delay 静止時間(1/100 s単位)
- -colors 使用色数
- -type Palette インデックスカラー (要らないかも?)
- -remap filename そのファイルのインデックスカラーを(グローバルに)使う
remapをしないと各レイヤーごとに異なったインデックスカラーを作成してしまうため(?)AEで読むと色化けしてしまうことがある。
本来 +remap で良いようなことがマニュアルに書いてあるのだけれど、上手くいかないので再度インデックスカラーを定義している。
(説明を読む限り、もしかすると先頭の画像で使用していない色が化けるかもしれないけど未確認)
色ばけがどうしようも無い場合は、GIAMなどの色化けしないツールで読んで再出力するのが今のところ効果のある最終手段