記事を検索

VFRなMP4、MKV(H.264)に挑戦する(AVIUTL編)

2007/10/04 20:13

コメント (22)  トラックバック(0)

いつかはAVIを捨てて別のコンテナに移行しないと駄目だなと思っていました。最初にそう思ったのはDVDのトラック2(要するに多チャンネル)に入っている音声をどうする悩んだ時でした。記事のタイトルにあるVFRとはまったく関係ありませんw そこでWMVという選択が一番私の中で有力だったのですが、周りで利用者が増えつつあるMP4やMKVで何とかしようと思ったのが事の発端です。私の身近な周りという意味ではないです^ω^

そしてMP4とMKVはVFR使えるのでせっかくだから出来るようにしようと思ったのがこの記事のはじまりです。


VFRって何?何でそんなことをしなければいけないの?

VFRとはVariable Frame Rateの略で可変フレームレートのことを指し、動画の中でフレームレートを変化させて再生することが可能です。VFRにする必要性は24/30(60)fps混合のインターレースソースが存在していて、それをプログレッシブソースにエンコードした時に不自然なく再生するために有効な手段の1つだからです。こういう書き方をすると堅苦しいのでわかりやすく具体例を出しますと、「アニメを24でエンコして悦にいってたら予告がガタガタだったorz 」というようなアニメのフレームレートを報告するスレの115氏にあるような現象に常に混在ソースは悩まされます。上記スレにはまとめwikiがありまして中には非常にお世話になっている人もいるのではないでしょうか。Tipsにあるフレームレート用語解説とフレームレートの判別方法はわかりやすいと思います。
VFRの他に120fps化してしまう手段もあります。120fps化とは24と30の最小公倍数が120である(24×5、30×4)ことを利用して、空いている部分はnullフレーム(実在しない)を挟んでごまかしてしまうという考え方です。今回は使用コンテナがMP4なので120fpsなnullフレームが使用出来ない(MP4の仕様上は)ためVFRにしなければならないのです。MKVは120fpsでnullフレーム混在なAVI(DivXとかXviDとか)もOKですが、せっかくなのでこちらもVFRで対応しようと思います。


VFRなMP4、MKVを作るいくつかの方法


一番シンプルな方法はフレームレートが異なる部分を分離してエンコードをした後、mp4boxでそれらを合成するという方法です。手動でやる具体的な方法はVFRなMP4を調べていると必ず行き着くこちらを参照して下さい。判定は自分で行う必要がありますが確実です。その判定を自動で出来るフィルタもあり、それらを使用した方法を紹介しようと思います。

自動判定が出来るフィルタは、ITVFR、TIVTC、自動フィールドシフト、などなどあります。中にはタイムコードを出力出来るフィルタもありまして、このタイムコード利用してVFRなMP4を作るという方法になります。
AVISYNTH+x264でraw264形式+Timcodeを吐き、mp4boxで.264と場合によっては音声を合わせてMUXしてMP4にした後に、tc2mp4で最初に吐いたTimecodeとMP4を読み込んでTimeScaleを修正してVFRなMP4を作るやり方はこちらに掲載されていますので、私はAVIUTL+自動フィールドシフト+拡張x264出力を用いた方法を掲載しようと思います!

要するにここまで前置きでしたw長くてごめんなさい!こちらのページを読んで頂いた方に色んな方法があることを知ってもらうのと同時に、需要があると思われるAVIUTL+普段使っている方が多い自動フィールドシフト+拡張x264出力でも出来ちゃうんだよ^ω^ということを伝えたかったのです。ここで知っている人は逆テレシネプラグイン+VFR出力 or x264出力を忘れてないか?と言うと思いますが、理由は単純で私が自動フィールドシフトに頼りきっている使用者だからです。
自動フィールドシフトだってAVISYNTHで使えるよ!という突込みが怖いので一応AVIUTLのプラグインをAVISYNTHで使うための方法が掲載されているページを参照しておきます。ShowAUFInfo.exeさえ使ってしまえばどんな方でもAVIUTLのプラグインをAVISYNTHで使うことが出来るかと思います。


AVIUTL+自動フィールドシフト+拡張x264出力でVFRなMP4、MKVを作成


拡張x264出力seraphyさんの改造したソフトの「x264 詰め合わせ」をダウンロードしてインストールして下さい。そうするとこの記事の冒頭にあった画像のようにプラグイン出力の欄に拡張x264出力が表示されx264のコマンドラインが入力出来ます。seraphyさんとぽむさんは毎度のこと感謝ですね(`・ω・´)

手順は以下の方法が考えられます。

私はraw形式(.264)で出力をしていますが、直接MP4形式やMKV形式で出力をすればその場でVFR化されたものが出てきます。何故raw形式でやっているのかと聞かれると直接MP4を吐いた物をmp4boxで音声とMUXしたときにVFRになっているのか心配だからです。分割したmp4を個別にFPS指定してaddするならわかるんですが・・・FPS指定しないでMUXすれば済むものなのかどうなんだろうみたいな。要するに私がmp4boxを理解し切れていませんw
↑上のように書きましたが1行目にありますように直接MP4、MKV形式を選択して自動フィールドシフトv7にチェックを入れればVFR化されたMP4が出来ます。x264.exe(x264afs.exe)を通過して出来たものです。その後mp4boxを使い音声とMUXすれば完成でDTSRepairを通す必要はありません。x264スレで混乱させてしまった方がいたようなのでこの場で謝っておきますorzID:FYCjNivgでしたorz

mp4boxについてはこちらが参考になるかと思います。タイムコードでMP4をVFR化する際にtc2mp4ではなくDTSRepairを使用しているのはseraphyさんの拡張x264出力に一緒に入っていたのでそのまま使いました。

何か色んな名前がでてきて日本語でおkエビフにゃイと思われるかもしれません。またコマンドラインは勘弁してくれという人もいるかもしれませんのでコマンドラインを書いておきます。

neroAacEnc -ignorelength -q 0.4 -if "変換元ファイル指定" -of "変換後.m4a"
mp4box -add "RAW形式のファイル指定" -add "さっき変換した音声.m4a" -new "MUXして出力.mp4"
DTSRepair -i "さっきMUXしたMP4.mp4" "タイムコード指定" "完成したMP4.mp4"

1行目のneroAacEncは音声エンコードをneroAacEncにやらせています。q0.4はMP3の128k相当です。確か音声の2PASSとかも出来たはずです。faacでエンコードするのも何も問題ありません。meGUIを使ってGUI上でエンコードしても問題ありません。
1個1個コマンドプロンプトで入力するのが面倒な場合はBATを作ると良いかと思います。私の超手抜きBATはこんな感じです。あまりにひどすぎなのでコメントを入れてフォローしておきました。オーディオコメンタリーなどトラックが複数あるDVDの場合は単純にmp4boxに追加して-addあげれば出来ると思います。parの行はアスペクト比指定ですがエンコード時にアスペクト比が保たれる拡大縮小をした場合は「-par 1=%ACP%」を消してあげるほうがいいとおもいます。

当然VFRじゃないH.264でエンコードしたMP4を作成することは出来ます。拡張x264出力設定の動作設定に自動フィールドシフトv7対応というのにチェックを外せば良いだけです。直接ここでMP4形式で吐いてしまえばmp4boxで音声とMUXする作業だけで終ります。raw264で吐いた場合はmp4boxでMUXする際にはきちんとFPSを指定してあげてください(しないと確かデフォルトFPS25が適応されてしまう)。


MKV出力は図に書いてある通りまだ試していません。ですがraw形式とタイムコードを使いMKVToolnixのmkvmerge GUIを使って試した結果MP4と同様に正常でした。チャプターエディターという便利なものもありアヴァン、オープニング、Aパート、Bパートと区切ったり簡単に出来ます。DVD Decrypterで吐いたチャプター情報のtxtもインポートすることが出来ます。他にも字幕を表示する機能なんかもありますがそれは機会があれば別途紹介しようと思います。


最後に駄文


記事冒頭の画像を見ていただければわかる人もいると思うのですが、x264そのものについてマトリクスに手をつけたりBフレームに詳しく手をつけたりしていません。マトリクスについては理屈的にはこちらがわかりやすく、直感的にはこちらがわかりやすいと思います。

2008/3/20現在では以下のようなコマンドが汎用的なパターンに落ち着きました。一般的なビルドのx264なら以下のでも動くと思います。crf、bframes、qpstep、qpmin、qpmax、scenecutの数値はソースによって変えることにしています。といいつつ--b-biasでBフレームの頻度をコントロールするほどまでは手をつけていません。

--crf 18~22 --scenecut 55~75 --level 4 --keyint 240 or 300 --bframes 3~4 --bime --b-rdo --weightb --direct auto --analyse p8x8,b8x8,i4x4 --8x8dct --trellis 1 --cqm jvt --merange 32 --qpmax 42~38 --qpmin 12~16 --qpstep 6~8 --qcomp 0.7 --ref 3 --mixed-refs --ipratio 1.70 --pbratio 1.50 --subme 6 --no-deblock --no-fast-pskip --threads auto --thread-input --progress --sar XX:XX --no-dct-decimate --no-psnr --no-ssim

本当に一筋縄ではいきませんね!とか偉そうに言っていますが普段の私は時間がかかるWavret系フィルタを使用しないで背景もろとも潰す覚悟で標準ノイズ除去をきつめにかまして済ませた挙句縞を取りこぼすようなズボラーなのです。そんなズボラな私でも簡単に一定の品質を保てて手軽にエンコードできる場所はどこだろうというのを探しているに過ぎません^ω^ その基準値は人によって差異がありますが、このように動画に関わっていると目が肥えてきて基準値が膨れ上がっていくものだと理解しました。以前私もしていた更にひどい手抜きなエンコードをしている人を見ると「それはネーヨ!」と色々言いだすことが物語っています。人に聞かれたときに思わず「それはネーヨ!」と頭ごなしに言い放ち萎えさせるケースが増えるのは困るので、出来るだけ理屈、直感の両面からわかりやすく説明できるように心がけます\(^o^)/

トラックバック 

コメント

しょしんしゃ (2008年02月29日 13:52)

こんにちはエビフにゃイさん。

私も購入したアニメDVDを動画ファイルに変換したいと思っていろいろと試行錯誤しているのですが、なかなか思うようにエンコードできません。今度はVFRに挑戦しようと思ってこのページを拝見させていただいたのですが、自動フィールドシフトの使い方がよくわかりません。上記の画像(http://blog.ebifunyai.com/entryimages/04_003_01.jpg)では上下16、左右32、切替点を64などに設定されているようですが、それ以外の設定はどうなっているのですか。間引きやスムージングのフィルタは使うべきなのでしょうか。(フレーム数が13000超えているところも気になりますが)

何かアドバイスが頂けたら幸いです。

エビフにゃイ (2008年03月02日 12:02)

>> しょしんしゃ さん
そのJPGではなのはStSのDVDで自動フィールドシフトのデフォルト数値が使われていますが、
実際に私のエンコードでは自動フィールドシフトは使われておりません。EDだけ60iで他は全て24という感じで
明確に分かれていますのでAVISYNTHのITSというものを使用して個別に指定しています。


自動フィールドシフトの基本的な使い方としては、下の作者の説明ページを見るのがよいかと思います。
http://www.geocities.jp/aji_0/afs_guide.html
http://www.geocities.jp/aji_0/afs.html


まず自動フィールドシフトで調節するとすれば、インターレース解除Lv2などで解除も行う場合でして
判定比や縞の部分の項目ぐらいです。そこはやる物によって変わるのでこの値!というのはありません~。
特に問題ないようでしたらデフォルト値のまま使用しても問題はありません。
自動フィールドシフトを使用する場合には基本的にフレームレートが混在や周期不定のものに使用するので、
間引き、スムージングはONにしています。今はよくわからない~という場合にはとりあえずONにしておいて
自動フィールドシフト側に判断させておいても問題はないかと思います。


で、私が一番良い結果をもたらした自動フィールドシフト使用のケースは、判定とフィールドシフトのみを行わ
せて(解除レベル0)、残った横縞などは別のインターレース解除プラグインを一緒に使用してエンコードする
ことです(AVIUTLではインターレース解除2プラグインや、適当補助インタレ解除など)。

しょしんしゃ (2008年03月13日 12:18)

ご丁寧な説明ありがとうございます、エビフにゃイさん。
参考にさせていただきます。

あれこれ忙しくてなかなか返事する機会がありませんでした。(冷汗)
エンコードって結構難しいですね。今後いろいろと試して、自分が納得いく設定を見つけたいと思っています。

ぷろ初心者 (2008年03月15日 10:27)

めちゃ初歩的な質問かもしれませんがどうかお許しの程…汗

x264gui.auo(デフォの状態)の拡張設定タブの自動フィールドシフト選択を
選択しなくてもVFRになる気がするのですが精神を酷使しすぎた自分の妄想でしょうか?

某らきなんたらをエンコしていてふと思いました。
それとx264guiで自動フィールドをする場合、UTL側のインターレースはどう設定及び解除すべきなのでしょうか?

もしかしてアレな子かもしれませんが教えていただけると嬉しいです('A`)

エビフにゃイ (2008年03月16日 20:53)

>> しょしんしゃ さん
そうなんですよエンコードは結構厄介で、この作品ではうまくいったのにこちらではうまくいかない何故!?
というのも後々現れてその理由がわかるまで悶々としてーとか最初は苦労が多いと思います。
凡そのことが理解できたら設定の使いまわしなんかが出来るようになって大分楽になるかと思いますので
頑張ってください~\(^o^)/


>> ぷろ初心者 さん
x264側の自動フィールドシフトをONにしないで自動フィールドシフトを実行すると恐らく29.97fpsの固定された状態で
その完成したMP4が出力されているはずです(その元のFPSが例えばDVDとか放送ソースなら)。
らきなんとかはOPが30(29.97)、本編が24(23.976)のようで、ぱっとみOPだけエンコードしたのを見るとうまくいってる
ようにみえるかもしれません。24な本編中で例えば横に一定にスクロールするようなパンのシーンは本来5フレーム中
2フレームは不要のものなので、それが削除されていないままなのでガクッ、ガクッとしているかと思います。


インターレース解除についてですが自動フィールドシフトにインターレース解除をする設定がありますので
そちらで解除してもいいのですが、らきなんとかの場合はインターレース解除0(要するに解除しない)で、
適当補助インタレ解除なりを入れてONにして横縞の残りだけどうにかしてしまうほうが良いかもしれません。
自動フィールドシフトについては私の前のコメントに本家説明ページのURLが記載されています。

ぷろ初心者 (2008年03月18日 20:26)

私のようなアレな子でも大変分かりやすい説明で痛み入ります。
ついついモニターの前で「そうそう、そうなんだよ!」と口走ってしまうようなくらい丁寧かつ分かり易いもので助かりました。

こういったaviutlからavisynthまで分かり易くまとめられているサイトは大変に貴重です。
質問に答えていただき有難う御座いました。これからも是非続けていって下さい。

エビフにゃイ (2008年03月20日 19:12)

>> ぷろ初心者 さん
わかりやすくて何よりでしたー^ω^
そのうちインターレース関係については記事にするとは思いますのでー!
頑張って続けていきます~\(^o^)/

戦闘員A (2008年06月11日 13:14)

はじめまして このサイトの情報をいつも参考にさせてもらってます
このサイトでVFRなmp4に興味を持ち試してみたのですがMMname2にて
コンテナと音声でサンプリングレートがあってないって表示されてしまいます

作成方法はフレームレートごとに音声なしでx264gui.auoで出力しmp4cat.exeでつなげて
MP4Boxでmuxしてます

再生とかに問題は今のところないみたいなんですけど
壊れてるかもとおもうと怖くて どうすればそれを直せるかわからないでしょうか?

コンビニ弁当 (2008年06月12日 08:56)

こんにちわ。
自動フィールドシフトのことで、便乗質問させてください。

>私が一番良い結果をもたらした自動フィールドシフト使用のケース
という部分で、具体的な設定項目なんですが、「解除レベル」のみが0で、あとの値はデフォですか?(間引きとスムージングもチェックをはずすんですよね?)

で、適当補助インタレ解除でインターレースを解除するようなんですが、この組み合わせはどんなアニメにでも有効なんでしょうか?というかむしろそうするべきなんでしょうか?

エビフにゃイ (2008年06月18日 01:06)

>> 戦闘員A さん
はじめましてー!こんな長文ページを参考にしてくださってありがとうございますorz
VFRなMP4をMMNameにいれますと、全部の平均値が表示されてしまいますので
そこを気にされているのかと思います。
例えばEDだけ60pで他24pで処理した場合、MMNameでは26.34fpsなんて出ますが
問題ありません。
あくまで再生を見て動きがおかしくなければOK!という感じです。


>> コンビニ弁当 さん
レス遅れてすみませんorz
その設定はどのアニメにも有効というわけではございません。あくまで一番簡単な設定の例です。
ついでに間引きとスムージングのチェックは外さないほうがよいです。

例えばその設定でソコソコうまくいく混合放送では絶対可憐チルドレンなどがありますが、
逆に思ってるほどうまくいかないものに、EDテロップ60iなD.C.Ⅱ S.S.などがあります。

・明確に全て24fpsとわかっている場合は自動フィールドシフトは使用せず24p化します
(AVIUTLなら自動24fps、AVISYNTHならAuto24FPS、IT、TITVCなどイッパイ)

・明確にEDだけ60iや30pとわかっている場合は、下記記事のように個別にエンコードを指定しています。
http://blog.ebifunyai.com/archives/2007/11/60ivfr.php

・もう混合でどうしようもない!という場合に今回の自動フィールドシフトを使うのが私のパターンです。


全部なんでも自動フィールドシフトでも、結果見栄えに問題がなければそれでよいかと思います!
(横、縦に一定に流れるパンのシーンでガクガクしたりしなければ)

戦闘員A (2008年06月23日 23:33)

返答ありがとうございました
結局は音声でneroAacEncのプロファイルでHE-AACにしてたんですが
音声2つのうち片方がサンプリングレート半分になってしまうみたいで
そのせいでコンテナと音声の表示ズレおこってたみたいでした
AUTO変更したら直っちゃいました

バンディングやこのページなどとても参考にさせてもらったので
これからも応援してます がんばってください

トシ (2008年06月26日 02:05)

皆さんはじめましてー。

エビフにゃイさんの記事はスーパー参考にさせて貰ってますww

絶対可憐チルドレンでのインタレ解除についてなんですが、AFSの「解除0」で「間引き」「スムージング」を切っているようですが、自分の場合それだとなんか一部のシーンでカクカクになっちゃうんですよね・・・w(OPの「照らし始める」って歌詞部分とか)
fpsもおかしな数値(26fpsくらい)になったり。orz

試行錯誤しまくって、自分が「一番良かったかな」という設定が、解除0+30fps固定+解除4という変態チックなことに・・・^^;

やっぱキャプソースにも個体差みたいなのがあるんでしょうか?
(それとも自分の目がおかしかったりして・・・(笑))

戦闘員A (2008年06月27日 03:04)

横槍をいれます
そのソースって24fps・30fps・60fpsの3つがかなり混合されてるアニメ

トシ (2008年06月27日 08:21)

絶チルが鬼混合なのは当然承知しています。

・・・ですが! やっぱり私の解除の仕方はやっぱまずいですかね?^^;
戦闘員Aさんの言いたい忠告の真意がよくわからないです(汗)

とにかくエビフにゃイさんの見よう見まねだけでやってきたので、知識がホントないんですよね...

戦闘員A (2008年06月27日 12:17)

afsって60fps精度でフレームを判断して半分は間引くってものなので
実際のフレームレートは30以下になりますので
60fps部分には違和感残ることば多いので自分で一番見栄えいい設定で
やるのが一番だとおもいます
多分60fpsに対応してる自動判定ものってないとおもうので

私もコードギアスR2でかなり悩みました

エビフにゃイ (2008年07月21日 21:41)

>> 戦闘員A さん
応援ありがとうございます!そういって頂いたのになかなか更新できず申し訳orzという状態ですorz
しかしHE-AACになっていたせいで表示ズレとは悩ましいですね・・・普段はlcか放送の音声そのまましか
利用しないのでびっくりしました。


>> トシ さん
私個人は解除0の30固定はある意味正しいような気がします。基本がフィールドシフトした上で29.97という状態
ですので全体で見栄えがいいのはそちらだと思います。
いずれにしましても60i部分はそのシーンでは二重になったりしますので悩ましいですよねー。
私の絶チルの設定は実に愛のない設定で半ばあきらめて放置で、AVISYNTHでは以下のような
状態でやっちゃっています。


ConvertYUY2ToAviUtlYC()
AU_afs(64,64,64,64,0,256,128,64,128,256,0,2,true,true,true,false,false,false,false,false,false,false,true,false)
ConvertAviUtlYCToYUY2()
AntiComb()


で、出来あがる結果はhttp://blog.ebifunyai.com/archives/2008/04/20084_1.phpのMP4と同じはずです。
ハヤテのときはまだ良かったんですけどねーw
話逸らしてしまって申し訳ないのですが、新しいEDの照明が当たってパンしているシーンが汚くていつも萎えてorz

トシ (2008年07月21日 23:36)

鬼混合ホント酷すぎです(^^; EDの件も分かりますww

あと、また絶チルの話になるんですが、先日放送の16話の(CMカット済みの時間で)16分42秒~48秒のあたりで
ナオミが横を振り向くシーン、残像酷くないですか?ww
いろいろ解除を試してみたんですがダメでしたorz ああいう残像はどうしても処理できないんでしょうか?

エビフにゃイ (2008年07月23日 19:53)

>> トシさん
絶チルの16話の振り向くシーンと口パクの部分は、あれはどう考えても無理でした・・・。
なにせ60にしても残像で残っていますので良い方法が浮かびません(´・ω・`)
昔あったTrueTearsというアニメOPの二重化された小窓を思い出しました・・・orz
最終的にそれは修正されたんですが小窓とメイン部分の周期が違うという厄介な
ことが起きまして・・・そういう周期違い程度ならどうにかできるのですが今回の絶チルは残ってしまって
いる状態なのでわかりませんorz

トシ (2008年07月24日 12:07)

2chでは「アレはテレ東のポケモンフィルタだ。」みたいな書き込みを見ました。。
「あの残像は無理」とも書いてあったので、やっぱり不可なんですねぇー...orz
うーん、、気になるのはあのシーンだけですし我慢しますwww

エビフにゃイさんの回答ありがとうございました(^^

S.K (2008年08月10日 00:39)

初めまして!最近DVDをISOで保存していたのですが、HDDを圧迫してきたのでMP4(AAC+H.264)に挑戦している
者です・・・w
質問があるんですが、seraphyさんの改造したソフトの「x264 詰め合わせ」の中に

x264.exe
x264afs.exe

の2つが入ってると思うんですけど、AVIUTLで処理してる場合は「x264afs.exe」の方は不要ってことですか・・・?
readmeには
「自動フィールドシフト(Ver7 Avisynth用)に対応した、x264クローンのVFR AVC-MP4作成ソフトウェアです。
※自動フィールドシフトを利用していないとエラーになります。
・出力されるMP4ファイルは、初期ディレイが発生しないように加工されています。」

とありましたが、どうなんでしょうか?むしろ、本家のほうがいらないのか・・・
よろしければ教えてくださいm(__)m

エビフにゃイ (2008年08月10日 21:15)

>> S.K さん
AVIUTLの自動フィールドシフトプラグインを使用してx264で出力をする際には、x264afs.exeを通さないと駄目
です~。おそらくその一文を読んで自動フィールドシフトとは何だろうという状態でしたら、x264afs.exeでは
ないほうを利用して下さい~。

S.K (2008年08月11日 11:14)

>>エビフにゃイさん

返答ありがとうございますm(__)m
もう1度調べたら、x264afs.exeを通さないと不可能ってことが分かりました。
(某リリカルなんとかをエンコして、VFRにしてたから当たり前ですよね・・・w)

助かりましたm(__)m

Name(必須) :   Email :   URL :
名前などの情報を保存したい場合はチェック(次回から入力が省略可能になります)


左の画像の数字を入力してください(必須):

2008年10月期 秋のお勧めアニメ (2)
2008年10月期 秋アニメの私のエンコード事情 (10)
ニコニコ動画γの動画作成まとめ (346)
2008年10月期 秋開始のアニメ (20)
PV3 PV4でのお手軽アニメエンコード設定の話 (15)