【
もくじ】
- 用
語
- フ
レームとフィールド
- イ
ンタレ解除と逆テレシネ
- 基
本的なアプローチ
- MEncoder
のインタレ解除、逆テレシネ
- 例
1)filmdint:
インタレ解除。映画・アニメ用
- 例
2)filmdint:インタレ解除。大半のTV番組用
- 例
3)yadif:インタレ解除。大半のTV番組用
- 例
4)pullup:逆テレシネ。映画・アニメ用
- 実
験段階のインタレ解除)mcdeint:動き補償デインターレーサ
- ク
ロップについて
- 参
考リンク
用
語
フ
レームとフィールド
- 空間軸画質:一時停止した時の画質。
- 勝手な造語。情報量が多いほど奇麗。動画では解像度。320x240よりも640x480のほうが精細で、データ量も多い。ま
た量子化(情報の間引きのようなもの)をしないほうが奇麗。
- ※デジカメは空間軸画質しか考え
なくて良い。2006/秋
現在、大抵
のデジカメは
300万~500万画素あるが、640x480は約30万画素。"フルスペック・ハイビジョン"の1920x1080でも約200万画素。
- 時間軸画質:動きの滑らかさ。
- 勝手な造語。情報量が多いほど滑らかで、データ量も多い。動画ではfps (frame per second)。
- フレーム:
- 映像の一コマ。完全な1枚絵。プログレッシブとも言う。
- フィールド:
- TV放送映像の一コマ。シュレッダにかけたような、ブラインドごしに窓の外を見るような切り刻まれた絵。インターレースドとも言
う。奇麗な一こまに補完するのは脳の役目(残像現象)。一般的に、フィールドを2枚ひと組で1フレームと数える。アナログTV放送の為に案出された方式。
-
- 映画カメラ:毎秒24000/1001フレーム
- 一般的に24fpsとか23.976fpsとか言う。正確には24000/1001fps
- 空間軸画質は映画カメラ(フィルム)が優れている。
- TVカメラ:毎秒 60000/1001フィールド(=30000/1001フレーム)
- 一般的に30fpsとか29.97fpsとか言う。正確には30000/1001fps。
- フィールド基準なら60Hzとか59.94Hzとか。
- 時間軸画質はTVカメラが優れている。
TVカメラで撮った映像はフィールドと次のフィールドとの間に1/60秒ほどの時差があるので、一時停止するとインタレ縞(櫛状ノイズ、コーミング
ノイズ、動きが僅かな場合はジャギ、など)が出る。1/60秒の間にも動きがあるからだ。これは目が慣れて来ると普通にブラウン管TVを見ていても見え
る。フレーム
構造にはこの問題が無い。
DVDの中の映像は規格上、フレーム構造とフィールド構造のどちらでも良い。自分の理解では、最終的にはTV
に映すので再生機が必要に応じて自前のフレーム>フィールド変換機能を使うという事のようだ。しかし、映画DVDでもフレーム構造で入っているものは稀と
も聞く。
MPEG-2
のTVキャプチャは当然フィールド構造。
DVDバックアップにせよ、TVキャプチャのエンコードにせよ、インタレ縞を目にしたくなければインタレ解除
が
必要になる。TVで見る場合はインターレース保持でエンコードしても良いが、2006/秋現在のx264はこれに対応しておらず、見込みも薄い。
Xvidは対応済。
※日本のHDTV規格の1080i(1920×
1080)はインターレース(フィールド構造)。国外では地域や放送局
の違い
で720p(プログレッシブ)と1080iが混在らしい。日本の地デジはこれからの国、例えば将来の印度などに時間軸・空間軸画質の双方で劣り得る。
1080pはお金がかかりすぎるにしても、720pまで排除したのは疑問。PS3版グランツーリスモはまだデモ段階だが1080p・60fps。理屈で
は、ピカピカの"フルスペッ
ク・ハイビジョン・パネル"を
使い切るならコレになる。
イ
ンタレ解除と逆テレシネ
- テレシネ変換:(他にプルダウンなど)
- 映画をTV放送する際にフレームを水増しし(24fps to 30fps)、さらに
フィールド構造に切り刻む事(毎秒60フィールド)。
- 逆テレシネ変換:(他にインバース・テレシネ、IVTC、プルダウン・リバーサルなど)
- テレシネ変換された映像をフレーム構造へ再変換する事。
- テレシネ変換固有のパターンを解析して、映画カメラで撮影した時点の映像を"復元"する。
- 映画カメラで撮った時点でインターレースは存在しないので、優れた逆テレシネフィルタはほぼ完璧な24fps映像を復元できる。
- TVカメラ撮影素材に使うと、インターレース縞が取りきれない上に動きの速い箇所が「カクツく」事になる。
- インターレース解除:
- 2枚のフィールドから1枚のフレームを合成する事。
- 完璧なインターレース解除は存在し無い。
- なぜなら2枚のフィールド間には約1/60秒の時差が存在し、単純合成しても場面によってはシマシマが残るから。
- また、毎秒60000/1001フィールドの
映像を毎秒30000/1001フレームに
減らす事になるので、動きの激しい箇所が「カクツく」事になる。
基
本的なアプローチ
手許ではインタレ解除とテレシネ、どちらのフィルタを使うかは、「素材映像を撮影したカメラ」を意識して決めている。
- 映画・アニメ:
- 逆テレシネ(pullup)を基本にビデオ・フィルタ・チェイン(-vf以下)を組み立てる。特に映画は空間軸画質・時間軸
画質ともにほぼ完全に"復元"可能。
- 普通のテレビ番組:
- フィールド to フレーム変換
- 毎秒60000/1001フィールドの
映像を毎秒30000/1001フレームに
減らす。空間軸画質はフィールド同士を合成する手法によっては劣化する。時間軸画質は基本的に劣化する。
- 毎秒60000/1001フィールドの
映像を毎秒60000/1001フレームにする。空間軸画質は補間手法によっては問題が残る。素材の時間軸画質はキープできる。
- フィールド構造保持
- 2006/秋時点ではx264は非対応。Xvidを選択する。
残る問題は以下の通り。
- 時間軸fps混在:
- 勝手な造語。可変フレームレート(VFR)と言った方が通りが良い。
- 歴史的に映画カメラによるコマ撮りで始まったアニメは基本24fps。古いディズニーなどは絵描きががっつり24枚描く。国産
は戦前のウ
ルトラ気
合いの入ったものなどごく一部を除いて8~15fpsだ
が、製作工程のデジタル化で部分的に30fpsが使われるケースが増えている。らしい。8
や15に慣れているはずの業界がわざわざ
30使うという事はそこが"見どころ"なわけでもある。Winでは古くからココにこだわって120fps.AVIや、CFR.mp4をMKVに突っ込んでVFR.MKVにするいった手法がある。らしい。また
AviSynthやAviUtilにはこれに適したフィルタ群があるようだ。
- 話を戻すと、時間軸fps混在は映画カメラ撮影シーン(24fps)とTVカメラ撮影シーン(30fps)を繋ぎ合わせたもの
は全て該当
する。『BSアニメ夜話』ではスタジオでゲストがダベるシーンと、アニメの名場面が交互に出て来るし、『なつかし映画名場面全集』、『全部みせます水戸黄
門総集編』、『親子で見ようゴレンジャーからボウケンジャーま
で』みたいな番
組があったらバリバリに該当するだろう。TVドラマでも古いものは映画カメラ撮影だし、最近でも予算が許せばフィルム撮りがある。"表現"に拘る場合は映
画カメラの蓄積ノウハウやフィルム自体の質感が無視出来ないものらしい。さ
らにさらにチャップリンやマルクス兄弟は15fpsだとか、『そのとき歴史が動いた』の戦争の記録フィルムまで「撮影カメラに忠実な画質を!」とか言
い出すと、、、言ってみただけですごめんなさい。ゼンマイならまだしも、下手すっと手回しもありそうだし。
- 空間軸fps混在:映画字幕やTV局のロゴ
- 勝手な造語。
- 一場面の中で映画カメラ撮影成分(24fps)とTVカメラ撮影成分(30fps)が混在しているもの。字幕やTV局のロゴな
どは、最初から毎秒60000/1001フィールドを想定して作られている。映画などはテレシネ変換の後で、字幕や局ロゴを合成している事が多い。
- こうした部分は逆テレシネフィルタではウマく扱えない。
完璧な画質を求めるなら、AVI(
CFRの
み)作成機のMEncoderではfpsの変わり目を自分で見つけてでカットしてエンコして後で繋げるとかTV局ロゴ除去フィルタなど、手間と根性を惜し
まないのだと思うが、手許では、時間軸混在は素材のうち分量の多
いfpsに合わせて
CFR.mp4にし、空間軸混在
は逆テレシネとインタレ解除を併用してインタレ縞を潰している。
MEncoder
のインタレ解除、逆テレシネ
- 適切なインタレ解除、逆テレシネフィルタは、素材の撮影カメラがどちらであるかに
よって異なる。TVカメラ撮影素材に逆テレシネを使うと時間軸画質が落ちる(動きの滑らかさが減る)。映画カメラ撮影素材にインタレ解除を使うと空間軸画
質が落ちる(無駄な重複コマがビットを喰う)。どちらの場合もインタレ縞が取りきれずに残る。
- ffmpegXはインターレース解除にpp=md
(median
deinterlace、中央値補完)を使う。pp系はインターレース縞の存在しない部分も一律に「合成」するもので、素材がなんであれインタレ縞を徹底
的に消す事が出来る。
反面、一長一短が激し
い。pp=md
はpp系の中ではベストバランスではあるが、輪郭線部分にジャギが残りやすい。特にアニメで目立つ。pp=lb
(リニアブレンド)はジャギも縞も完璧に消すが、色味や輪郭がかなりボケる。pp=l5はいわば弱っちいリニアブレンド。副作用が弱い代わ
り、ジャギも縞も消しきれない。手許ではこのpp=l5を他のより「賢
い」フィルタの補助として使うが、kerndeintの方を好む人もあるようです。
- なお、特に断りが無い限り、以下の例はMPlayerでは動作しません。MEncoder専用です。
例
1)filmdint:
インタレ解除。映画・アニメ用
-vf filmdint,pp=l5 -fps 30000/1001 -ofps 24000/1001
- 映画カメラ(24000/1001fps)撮影素材を、TVの毎秒60000/1001
フィールドに直して放送した
ものに向く。
- TV放送(MPEG2キャプチャやフィールド構造のDVD)
からはコマを間引く事になるが、カメラ撮影時のfpsに戻すので動きがカクツクことは無
い。元々filmdintはTV放送向けの「万能ナイフ」。基本的には逆テレシネだ
が"テレシネパターン"が見つからない場合は、シンプルなインタレ解除を行う。
- それでも稀にインタレ縞がとりきれない部分が残る、特に字幕や局ロゴなど。後ろにpp=l5を置く事で潰している。
- pp=l5は一律に前後のフィールドを混ぜる
「賢くない」タイプだが、先にfilmdintでほとんどのインタレ縞は取れているので副作用は少なめ。時間軸fps混在アニメでは30fps箇所でゴー
スト状のコマができる事になるが、再
生時にはまぁまぁそれっぽく見える。
例
2)filmdint:インタレ解除。大半のTV番組用
-vf filmdint=io=2997/2997 -fps 30000/1001 -ofps 30000/1001
- TVカメラ(毎秒60000/1001フィールド)撮影素材に向く。フィールド2個を合成してフレームにしてしまうが、ほとん
どの場合で動きのカクツキは意識できない。ボクシングとかオリンピックとかダンスとかになると、目が慣れた人には厳しいかも知れない。上記では省いたが、
これもpp=l5などの補助を付けた方が良いと思う。
【filmdintの問題
点】
- filmdintには固有のデメリットがあり、字幕類(スタッフ
ロールなど)が荒れる。
- また、手許でビルドするようになってから細かいブロックノイズ状のチラつきが出るようになった。ffmpegX版は
0.0.9t以降、同様の不具合が直っていない。0.0.9s
版(230105)は正常に動作する。逆テレシネ目的で使う場合はそれ専用のpullupの方が優秀なのだが、filmdintは「万能ナイフ」と呼ば
れるだけあって使いでが広い。豊富な子オプションの設定を追い込んだり、その中でcropもできる。x86でなければ性能を引き出せない部分があると言う
オープンソースにしては不思議な仕様なのだが、x86
Macでは動くかもしれないので残しておきます。
- 実はコレがAltivec最適化してねぇかと期待してビルドに手を出したので少し愛着もあるのです。
例
3)yadif:インタレ解除。大半のTV番組用
-vf yadif=0,pp=l5 -fps 30000/1001 -ofps 30000/1001
- filmdintよりも新しく、PPCでも安定動作する。稀に幽かにジャギが残る場面があるのでpp=l5でぼかしている。
2006/秋現在の常用。
- yadif=1で1フィールドを1フレームに変換して60000/1001fps映像が作れる。サッカーでいくつか試したが、
時間軸・空間軸ともに特に
yadif=0との差は感じなかった。とくにx264はオプション次第で同じビットレートでも30fpsと60fpsの空間軸画質がさほど変わらないの
で好みに応じて選べるだろう。
- 60fpsで作れば映画やアニメにもオールラウンドに使えないかと思って試したが、静止画像の上をカメラがゆっくりパンしてゆ
く場面でカクツキが出
た。コマ送り確認すると、できるだけ一こま一こまが奇麗になるように、インタレ縞の少ないコマのほうへ"吸着"、つまり、パンの途中で同じコマが2枚連続
していた。これで動きが一瞬カクンと止まって見えたわけだ。
- MEncoder専用 1.0pre8(2006.06.11)以降。
- ※サッカーはドイツワールドカップだったので、EUのPAL(毎秒50000/1001フィールド)カメラが混在していた可能性
がある。
例
4)pullup:逆テレシネ。映画・アニメ用
-vf pullup,softskip,pp=l5,harddup -ofps 24000/1001
- テレシネ固有のパターンを解析して、カメラで撮った時点の24fps映像を再構築するも
の。MEncoderの真打ち。
- softskipは素材の全フレームを検証する
必要が有るフィルタの直後に置く。また、最終的にmp4boxで.mp4にmuxする場合は-vfチェイン末尾にharddupが必須。こ
れがないと、ほとんど同一内容のフレームが連続した場合にきちんとフレームを書き出さず、「前のフレームリピートして」とAVI
ヘッダ
に書き込む。.mp4や.mkv作成用にrawvideo.264などで書き出す場合、このヘッダは存在しないので、最終
出力のフレーム数が不足する。
- MEncoder専用。ffmpegX版でも使える。
- pullupは空間軸・時間軸ともfps混在を想定していない。そうした部
分でインタレ縞が残る。手許では時間軸混在も空間軸混在もpp系で一律に潰している。例:
-vf pullup,softskip,crop=720:480:0:0,scale=640:480,hqdn3d=4:3:6,pp=l5,harddup
- インタレ解除は先頭に置くのが定石。最初のpullupで縞はほぼ完全に消えてしまう。この後ろでpp系で時間軸混在箇所の縞を潰す。同時に空間軸混在箇所も潰す。pp系は
「賢くない」ベタ合成なので、30fps箇所は前後のコマが混ざっ
たような不気味なコマになるが、通常視聴ではまぁ
まぁ見れる。上記ではpp=l5(弱いリニアブレンド)を使っているが、クロップ、スケール、デ
ノイズをかけた後に回す事で副作用(特に色ボケ)の緩和を狙った。好みによりkerndeintを使う人もあるようだ。
- フィルタチェイン内の順番だが
基本はインタレ解除・クロップ・スケール・デノイズ。上記では一律に合成するpp系の特性を考えて、デノイズの後に置いている。これで良いか
否かは不詳だし、結果も個人の視覚と感性によるだろう。
実
験段階のインタレ解除)mcdeint:動き補償デインターレーサ
-vf yadif=1,mcdeint=1:0 -ofps 60000/1001
- ※上記が正しいか否かは確証が無いのでmanなどをよく読んで使って下さい。
- ここまでは手許で使い物になったものを挙げて来たが、まだ実験段階のmcdeintというインタレ解除がある。mcの名前の通
り、インタレ解除に動き補償を、しかもモーションベクトル算出精度の量子化値まで弄れるという豪快さんだ。かなり奇麗に作れるのだが桁違い
に遅い。比喩でなくfpsの桁が変わる。フィールドオーダーの自動検出が無い点も惜しい。これが使い物になれば(そういう設定値が見つかれば)、
filmdintを超える万能ナイフになるかもしれない。あるいは
AviSynthやAviUtilに肉薄できるかも知れない。カンタンにシアワセになりたい。
ク
ロップについて
crop=w:h:x:y
w:hは16の倍数でないものを使うと画質劣化。MPEG系は基本的に16x16ピクセル単位で動き分析を
行う。特にMPEG4
ASP(xvidなど)では、端っこの黒いとこが残ってると、黒みが映像に侵入したり戻ったりを繰り返すので、ギリギリではなく「うそ!!」ってくらい
バッサリ行くのが基本。x264ではさほど深刻では無い。
x:yは画面左上隅から数えたピクセル数。xは偶数のみ。yも偶数のみ。インターレース素材では4の倍数のみ。値の確認は、
mplayer INFILE.mpeg -vf rectangle=w:h:x:y
で再生すると画面内の白枠で確認できる。手許ではこうゆうシェルスクリプトを使っている。
#!/bin/sh
# chelper.bash
echo
echo "==========================================="
echo " --- Crop Helper ---"
echo "==========================================="
echo
#
echo "入力ファイルをD&D"
read iFN
a1=y
while [ $a1 = "y" ]
do
echo =====================================
echo "Cropしない ; そのままreturn"
echo "Cropする ; (w:h:x:y)で指定してreturn"
echo ""
echo "# 参考(w,hは16の倍数、xは偶数、yは4の倍数が基本)"
echo " 4:3 ;704:464:8:8"
echo " 16:9 ;704:352:8:64"
echo " シネスコ ;704:272:8:104 (640x272,2.35:1)"
echo =====================================
read cROP
echo ===START==============================
mplayer \
${iFN} \
-vf rectangle=${cROP}
echo
echo "### 好きな方をCrop設定にコピペ ###"
echo "-vf crop="${cROP}
echo "-vf filmdint=crop="${cROP}
echo
echo "### もう一度?(y=Crop値再指定 / n=exit) ###"
read a1
done
なお、AVC/H.264ではオプション次第で8や4の倍数でも良さそうだが、手許では16x16を墨守している。そうしないとMEncoderに「コ
デックをいじめるな!」と怒られるし、規格上も16x16をマクロブロックと呼ぶの
に対してx8やx4は"サブマクロブロック"と呼ばれているからだ。自分の理解ではこれはマクロブロックの「中の人」だ。
参
考リンク
読了、お疲れさまであります。追記・訂正希望歓迎であります。質問は
掲示版の活用もご検討下さい。
詳しい方は以下に手をお貸し頂ければ幸いであります。
MEncoder Document試訳(途中)
MEncoderマニュアル試訳(途中)
スポンサーサイト