最近のお手軽mp4作成手順

最近なにも更新してなかったので、とりあえず最近のお手軽mp4作成手順。

DGIndexに、こんなAVSテンプレートを登録しています。

DGDecode_mpeg2source("__vid__", info=3)
# color correction
#ColorMatrix(hints=true)

# VFR one pass
tfm(d2v="__vid__").tdecimate(mode=3,hybrid=2,vfrDec=1,mkvOut="timecode.txt")

# noise filter
#TBilateral()

DGIndexでDVDからd2v作ったあと、これをmeguiでmp4にエンコード
そのあと、始めにd2vを保存したときの名前を引数にして、こんなバッチスクリプトを実行してVFRなmp4の完成。

set PATH=c:\megui;%path%

if exist "%1 T01 48K 16bit 2ch.mp4" ren "%1 T01 48K 16bit 2ch.mp4" %1.m4a
if exist "%1 T01 2_0ch 448Kbps 48KHz.mp4" ren "%1 T01 2_0ch 448Kbps 48KHz.mp4" %1.m4a
if not exist %1.m4a neroAacEnc -if "%1 T01 3_2ch 448Kbps DELAY 0ms.wav" -of %1.m4a -2pass -he -br 320000
if not exist %1.m4a neroAacEnc -if "%1 T01 48K 16bit 2ch.wav" -of %1.m4a
if not exist %1.m4a neroAacEnc -if "%1 T01 2_0ch 448Kbps 48KHz.wav" -of %1.m4a

tc2mp4 -i %1.mp4 -t timecode.txt -o %1_vfr.mp4
mp4box -add %1_vfr.mp4:par=32:27 -add %1.m4a:lang=jpn -new %1_vfr.mp4
mp4box -info %1_vfr.mp4

PATHの設定を自分の環境にあわせて適当に変更した後、拡張子cmdのファイルとして保存。音声エンコードにはNero Platinum Suite - Award-winning all-rounderを使ってます。

VFRなmp4の作り方(3)

24fpsと30fpsが混合したmp4を作る自分的手順(自動化編)

timecode v1対応のnhml→VFR変換スクリプトを作ってみた。
これの場合、timecode v2対応のものに比べて、30000/1001とか24000/1001など、より正確なフレームレートが再現できる。

使い方:
 mp4box -nhml 1 cfr.mp4
 (VFR変換スクリプト) -i mkv-timecodesfile.txt -n cfr_track1.nhml -o vfr_track1.nhml
 mp4box -add vfr_track1.nhml -new vfr_track1.mp4
 mp4box -add vfr_track1.mp4 -add cfr.aac -new vfr.mp4
続きを読む

VFRなmp4の作り方(2)

24fpsと30fpsが混合したmp4を作る自分的手順(自動化編)

mp4boxを利用すると、nhmlというmkvのtimecodeファイルと同じようなものを扱うことが出来る。
このnhmlファイルを上手く使って、面倒な分割作業なしにVFRなmp4を作る手順を考えてみた。

 DGDecode_mpeg2source("vfr.d2v")
 tfm(d2v="vfr.d2v")
 tdecimate(mode=3,hybrid=2,vfrDec=1,mkvOut="vfr-timecode.txt",tcfv1=false)
  • x264でvfr.avsをエンコードし、mp4形式で出力する。
  • mp4boxでvfr.mp4からnhmlファイルを抽出する。
 mp4box -nhml 1 vfr.mp4
  • nhmlファイル内のタイムスタンプをtimecodeファイルにあわせて修正。
 (とあるツール) vfr-timecode.txt vfr_track1.nhml > vfr_track1_tc.nhml
  • 修正済のnhmlファイルと音声ファイルから、mp4boxを使ってmp4を合成。
 mp4box -add vfr_track1_tc.nhml -add vfr.aac -new vfr.mp4

これで"vfr.mp4"が24fps/30fps混合のVFRなmp4になる。

続きを読む

VFRなmp4の作り方(1)

24fpsと30fpsが混合したmp4を作る自分的手順(分割編)

  • DGIndexで24fps部分を切り出して"24fps.d2v"として保存。このとき音声は省略。
  • DGIndexで30fps部分を切り出して"30fps.d2v"として保存。このとき音声は省略。
  • DGIndexで全体を"all.d2v"として保存。このときは音声も出力する。
  • "24fps.avs"を作成し、インターレース解除、24fps化をする。
 DGDecode_mpeg2source("24fps.d2v")
 tfm(d2v="24fps.d2v").tdecimate(mode=1)
  • 30fps.avsを作成し、インターレース解除する。
  • 30fps.avsの出力fpsを24fps.avsの出力fpsとそろえる。このときフレームを削って24fps化するわけではなく、フレーム数は30fpsのままfpsの設定だけを24fpsにする。(mp4boxで合成するためのおまじない)
 DGDecode_mpeg2source("30fps.d2v")
 tfm(d2v="30fps.d2v")
 AssumeFPS(24000,1001)
  • "24fps.avs"と"30fps.avs"をx264を使ってエンコードし、H.268 raw形式で出力。
  • "all.d2v"を保存したときに出力された"all T01 48K 16bit 2ch.wav"を"all.aac"に変換。
  • mp4boxで合成。
 mp4box -add 24fps.264:fps=23.976 -cat 30fps.264:fps=29.970 -add all.aac:lang=jpn -new vfr.mp4

これで"vfr.mp4"が24fps/30fps混合のVFRなmp4になる。

参考情報
Help with concatenating avc into mp4... - Doom9's Forum
HowTo create Variable Framerate MPEG-4 video streams in MP4 - Doom9's Forum
http://www.avisynth.org/mediawiki/wiki/VFR