ffmpeg で iPhone 用データの作成
iPhone で通勤途中とか、空き時間にドラマを見るためにmp4 ファイルを作成する必要があります。変換ソフトはいろいろとあって、その時代というか、慣れというか、いろいろと変遷してきて最近は ffmpeg での変換に落ち着きました。
普段、韓国の有料ダウンロードサイト、 wedisk.co.kr, megafile.co.kr ほとんどこの2サイトからダウンロードしてドラマを見ています。気に入ったドラマはなるべく高画質で見たい!!ということでmpeg2 のフルHD版をダウンロードすることが多いです。1時間当たり8GBぐらいのサイズ。 バラエディーなどは720pでも問題ないので1時間で2GB以下ぐらいのサイズ。 まあ2GBでもiPhoneには大きすぎますのでどうしても再エンコード作業が必要となります。そこで コマンドラインでの運用になるところが一般的には敷居が高いみたいなんですが、場合によってはコマンドラインのほうが便利というMS-DOS時代からの古い人間なもんで、いろいろなエンコードソフトを使ってきましたが、遂にというか、 ffmpeg の高機能にひかれて使いだしました。
やりたいことは
普段、韓国の有料ダウンロードサイト、 wedisk.co.kr, megafile.co.kr ほとんどこの2サイトからダウンロードしてドラマを見ています。気に入ったドラマはなるべく高画質で見たい!!ということでmpeg2 のフルHD版をダウンロードすることが多いです。1時間当たり8GBぐらいのサイズ。 バラエディーなどは720pでも問題ないので1時間で2GB以下ぐらいのサイズ。 まあ2GBでもiPhoneには大きすぎますのでどうしても再エンコード作業が必要となります。そこで コマンドラインでの運用になるところが一般的には敷居が高いみたいなんですが、場合によってはコマンドラインのほうが便利というMS-DOS時代からの古い人間なもんで、いろいろなエンコードソフトを使ってきましたが、遂にというか、 ffmpeg の高機能にひかれて使いだしました。
やりたいことは
「1080p の MPEG2 1時間当たり8GBぐらいあるデータを iPhone で簡単に扱えるよう 800MB以下(1/10)にしたい」
ということなんで、さすがにフルHDのまま1/10サイズにするのはちと厳しすぎるということで 1280x720 サイズをターゲットにして再エンコードします。iPhone は 6Plus です。
エンコードにはソフトウェアエンコードとハードウェアエンコードがあり、画質で言えばソフトエンコの勝ちなんですが、何せ小さな画面のiPhone 用なので妥協して時間との勝負、エンコードは早いに越したことないということで ビデオカードでエンコードできる nvenc を利用します。ちなみにビデオカードは GTX-960 です。最新のビデオカード(GTX-1070以上)だとさらに高速エンコードが可能なようですが、持ってないので…
ffmpeg -i imputfile.ts -c:v h264_nvenc -s 1280x720 -vb 900k -ab 160k output.mp4
こんな感じのコマンドでエンコードするとうちではx5倍速ぐらい、縮小作業が無ければ元っと高速でエンコードしてくれます。なんだかんだファイルサイズが小さくなって600MBぐらいに収まるでしょうか。いろいろとパラメー変えながら実験するとよいでしょう。 これだとデインターレース処理は入っていないのでプレーヤーによってはギザギザになってしまう可能性がありますが、とりあえずiPhone での再生では問題が出ていません。
複数ファイルを一気にやる場合は コマンドで For %I in (*.ts) do ffmpeg -i %I ~~~ というような感じで For in do を使って繰り返し実行させるとほったらかしているうちに複数ファイルのエンコードが終わります。
ffmpeg はほんと奥が深くていくらでも使いどころがある感じで、まだまだ未熟でいろいろ使っていきたいです。
エンコードにはソフトウェアエンコードとハードウェアエンコードがあり、画質で言えばソフトエンコの勝ちなんですが、何せ小さな画面のiPhone 用なので妥協して時間との勝負、エンコードは早いに越したことないということで ビデオカードでエンコードできる nvenc を利用します。ちなみにビデオカードは GTX-960 です。最新のビデオカード(GTX-1070以上)だとさらに高速エンコードが可能なようですが、持ってないので…
ffmpeg -i imputfile.ts -c:v h264_nvenc -s 1280x720 -vb 900k -ab 160k output.mp4
こんな感じのコマンドでエンコードするとうちではx5倍速ぐらい、縮小作業が無ければ元っと高速でエンコードしてくれます。なんだかんだファイルサイズが小さくなって600MBぐらいに収まるでしょうか。いろいろとパラメー変えながら実験するとよいでしょう。 これだとデインターレース処理は入っていないのでプレーヤーによってはギザギザになってしまう可能性がありますが、とりあえずiPhone での再生では問題が出ていません。
複数ファイルを一気にやる場合は コマンドで For %I in (*.ts) do ffmpeg -i %I ~~~ というような感じで For in do を使って繰り返し実行させるとほったらかしているうちに複数ファイルのエンコードが終わります。
ffmpeg はほんと奥が深くていくらでも使いどころがある感じで、まだまだ未熟でいろいろ使っていきたいです。
にほんブログ村
ポチよろしくお願いします
スポンサーサイト