Youtube にアップロードする時に注意する colormatrix の設定
Youtube は動画をアップロードすると必ず再エンコードされるので、x264 の colormatrix を設定しないか、ffmpeg のフィルタを使って色が劣化しないようにする。
追記 2012年10月19日
コメント欄よりx264での指定方法がわかったので大幅に修正した
追記 2012年10月19日
コメント欄よりx264での指定方法がわかったので大幅に修正した
簡単なまとめ
- AviUtlで作った動画
- x264、ffmpeg どちらでも可
- x264 は色変換の設定を720P以上は BT.709 に、720P未満は BT.601 に指定して、colormatrix は指定しない
- ffmpeg は色変換の設定を720P以上は BT.709 に、720P未満は BT.601 に指定して、コマンドに -vf colormatrix=bt601:smpte240m を付ける
- x264 は色変換の設定を720P以上は BT.709 に、720P未満は BT.601 に指定して、colormatrix は指定しない
- すでにある動画
- 解像度が720P以上 colormatrix BT.709 はそのまま
- 解像度が720P以上 colormatrix BT.601 は x264 の colormatrix BT.709 にエンコードか、
ffmpeg の -x264opts colormatrix=bt709 を付けてエンコード - 解像度が720P未満 colormatrix BT.709、BT.601 は ffmpeg の -vf colormatrix=bt601:smpte240m を使ってエンコード
- colormatrix がわからない動画はそのままアップロードし、オリジナルと比較して問題がなければそれを採用。問題があれば、1から3を参考にする
720P未満の動画とは16:9の動画で1024x596, 854x480などの解像度の動画、4:3の動画は640x480などの解像度の動画で横幅が720ピクセル未満の動画を指す。
注意点
- 色変換の設定を間違えるとcolormatrixの指定直しでは色が直らない
- 色変換の設定は動画を取り込んだ場合に解像度によって BT.601 か BT.709 が指定される
- 拡張編集プラグインで動画を作る場合の色変換の設定は、720P以上は BT.709 に、720P未満は BT.601 に手動指定する必要がある
- 720P未満の動画は色変換の設定の入力・出力が BT.601 になっているのを確認する
- すでに colormatrix を付けてエンコードした720P未満の動画しかない場合は ffmpeg の -vf colormatrix=bt601:smpte240m を付けてエンコードするか、720Pにリサイズする(非推奨)
色変換の設定方法:720P未満の場合
準備
必要なのが、AviUtl の環境と x264・x264guiEx か ffmpeg・ffmpegOut、ALACエンコーダー、MediaInfo、PictBear。
AviUtlのお部屋
OSのバージョンに合わせて8bit-depthを保存する
x264.nl
右のサイドバーから x264guiEx 1.xx をクリックして保存する
rigayaの日記兼メモ帳 x264guiEx
OSのバージョンに合わせて(Static)の(Latest) を保存し、binフォルダのffmpegを使う
Zeranoe FFmpeg - Builds
右のサイドバーから ffmpegOut をクリックして保存する
rigayaの日記兼メモ帳 ffmpegOut 0.02
.7z が解凍できない場合は7-Zipを使う
7-Zip - sourceforge.jp
ALACエンコーダーはqaac_1.43.zip(2012年10月18日時点)を保存し、64bitOSならx64フォルダの中身を、32bitOSならx86フォルダの中身を使う
cabinet - qaac
動画情報を調べるツール
インストールして起動し、表示(Y)からHTMLを選択すると見やすい表示になる
MediaInfo - Download
AviUtlでx264を使ってエンコードする
動画を読み込んだら色変換の設定から入力・出力共に720P以上は BT.709 に、720P未満は BT.601 になっているか確認して、拡張 x264 出力(GUI)Ex でエンコードする。
音声のエンコーダーは容量に余裕があれば WAV 出力。なければ NeroAacEnc の AAC-LC 320kbps の .mp4 出力にする。Flac で .mkv に入れると音ズレしたので非推奨。
設定は図のように変更する
AviUtlでffmpegを使ってエンコードする
Pluginsフォルダにプラグインを入れて、プラグイン出力で「ffmpeg / avconv 出力」を選択。ビデオ圧縮から左の映像のコマンド欄に以下のコマンドをコピペする。次に音声エンコーダーは Youtube は強制再エンコードなので劣化のない ALAC を使う。そして出力拡張子は.m4vを指定し、OK < 保存を選択しエンコードを開始する。
詳しい ffmpeg の libx264 の設定は Windowsのffmpegで生放送する方法 : libx264のオプション を参照。
映像のコマンド欄のコピペ例
-vcodec libx264 -preset fast -crf 20 -bf 2 -qmax 51 -qmin 10 -keyint_min 0 -vf colormatrix=bt601:smpte240m
-acodec copy
クリックして別窓表示
Youtube は申請しなければ16分未満の動画で2GB制限があるが、ニコニコのようにビットレートを心配することはほとんどないので品質指定(crf)でエンコードし、極力高画質で且つエンコード時間の短い設定にしている。
アップロードに関するヘルプ - YouTube ヘルプ
すでにある動画のエンコード
動画の作者の場合、プロジェクトファイルから x264 か ffmpeg でエンコードする。すでに動画しかない場合は colormatrix を確認して必要ならば再エンコードする。
ffmpeg はコマンドから操作するので以下のようなバッチファイルを作り、ffmpeg と同じフォルダにおいて入力ファイル名と拡張子をテキストエディタで書き換えてバッチファイルを実行する。音声コピーで音ズレする場合は音声ALACエンコードにする。
バッチファイル例 音声コピー
ffmpeg -i "入力ファイル名.mp4" -vcodec libx264 -preset fast -crf 20 -bf 2 -qmax 51 -qmin 10 -keyint_min 0 -vf colormatrix=bt601:smpte240m -acodec copy "out.mp4"
バッチファイル例 音声ALACエンコード
ffmpeg -i "入力ファイル名.mp4" -vcodec libx264 -preset fast -crf 20 -bf 2 -qmax 51 -qmin 10 -keyint_min 0 -vf colormatrix=bt601:smpte240m -acodec alac "out.m4v"
バッチファイル配布先
colormatrix がわからない動画は色の差異を比較することになる。比較する色はRBGの(0.255.0)(16.180.16)と言った緑系の色をカメラで映しYoutubeにアップロード。そしてスクリーンショットを撮り色のRGBの特にGが激しく変化していないか確認する。
2つの動画をアップロードするのは2度手間になるので最初オリジナルの動画をアップロードして色の劣化を確認できたら上のバッチファイルでエンコードとアップロードをして色を確認する。
色の確認にはPictBearを使う
PictBear(ピクトベア)- 多機能で軽快なペイントソフト | フェンリル
画像を読み込むと右下に(R.G.B)の値が表示されるのでここを確認する。
この記事へのコメント
- : 2012/10/19 (金) 02:08:06
よって「色変換の設定」は自動にせずにBT.709にしてエンコードしさえすればx264等の--colormatrixは未指定でもなんでもおkです。
ffmpegはちょっとわからないですが上記の事を理解した上で設定すれば問題ないかと。
ロベルト : 2012/10/19 (金) 21:02:08