ffmpegを使って、ipadで視聴できる動画へ変換するメモです。
iTunesを使ってipadに動画を同期しようとしても「hoge.mp4はこのiPadでは再生できないためコピーされませんでした。」のようなメッセージで同期されないことがあります。これは、mp4ファイルがipadの仕様にあっていないためのようです。我が家の場合、画素数が大きいためのようです。そこでipadで視聴できる画素数へ変換する必要があります。
徒労日記 iPhone用動画に使うFFmpegにはキマリがあるのipad用の変換オプションでうまくいくようです。
ffmpeg -i infile.mp4 -s 1024x758 -aspect 16:9 -threads 0 -vcodec libx264 -b 2000k -crf 23.0 -level 30 -qmin 10\ -acodec libfaac -ab 128k -ac 2 -ar 48000 -f mp4 -r 29.97 -y outfile.mp4としています。 オプションの意味は最新ffmpegのオプションまとめ から引用すると
-s | 指定した “size” にリサイズする。 |
---|---|
-aspect | 出力ファイルの画面アスペクト比を指定。 |
-threads | エンコードスレッド数。デュアルコア以上の CPU の場合には2など (CPUのコア数+α)を指定するとエンコードを高速化できる。 x264 を使う場合に限り -threads 0 を指定すると x264 エンコーダ側で自動で (論理CPU数×1.5) スレッドで並列処理される。 |
-vcodec | 映像コーデックを指定 (“copy” でストリームの直接コピー) |
-b | ビデオのビットレート指定(bits/s 単位)。500k, 1M といった指定も可能。 |
-crf | 固定 “品質” でのエンコードモード (x264 のみ)。 |
-level | 映像エンコードのレベル指定。指定可能な Codec は H.263、H.264、MPEG-1/2。具体的な値と意味についてはコーデックの仕様を参照のこと。例えばH.264では16段階定義されている。 |
-qmin | q値の最小値 (デフォルト=2) x264 ではデフォルトの qmin=2 は小さ過ぎる。少なくとも 10 以上にした方がよい。 qminが小さすぎるとソースによっては黒いバックなどの動きが少ないシーンでグレーの 靄がかかったようなフレーム (“Gray Fogged Frame”) が出来てしまうことがある。 |
-acodec | 音声コーデックを指定 (“copy” でストリームの直接コピー)。 |
-ab | 音声のビットレート (bits/s 単位)。192k のような指定も可能。 |
-ac | 音声のチャンネル数を指定。 |
-ar | 音声のサンプリングレートを指定。 |
-r | フレームレートを指定値に変換する。指定しない場合は入力ファイルの値を継承 |
-y | 出力時に既存の同名ファイルを警告無しに上書き |
ruby スクリプトでbatch 処理
ruby スクリプトでbatch処理させるために、次のようなコードを作りました:
#!/usr/bin/env ruby ARGV.each{|mp4| outfile = mp4.gsub(/\.mp4/, '_ipad.mp4') command = "ffmpeg -i #{mp4} -s 1024x758 -aspect 16:9 -threads 0 -vcodec libx264 -b 2000k -crf 23.0 -level 30 -qmin 10 -acodec libfaac -ab 128k -ac 2 -ar 48000 -f mp4 -r 29.97 -y #{outfile}" system(command) }