環境:Windows10 64bit
参考:ffmpeg で DVD-VIDEO用 ファイルをいい感じに生成する方法
ffmpegのスレッド数指定ですが、昨今16スレッドのCPUなどもザラにあるため、スレッド数を指定せずffmpegに任せたほうが良いんじゃないかという気がします。
それからこちらのサイトによるとこのままDVDStyler等のオーサリングソフトに投げ入れても家電で再生できない可能性があるらしいので、こちらのサイトの通り、生成した動画をセグメント付きVOBファイルに変えてから扱うといいと思います。
とりあえずffmpeg
それぞれ、コマンドと、ドラッグ&ドロップで一括変換するバッチファイル用のスクリプトを掲載。
コマンドの場合はコマンドプロンプト等にコピペしてファイル名のところを書き換え
バッチの場合はメモ帳かなんかにコピペして、適当な名前.bat
で保存し、保存したbatファイルに動画をドラッグ&ドロップすると変換された動画が生成されます。
**動画のアスペクト比が16:9じゃないときは各自16:9
の部分を書き換えてください。
1Pass VBRのとき
コマンド
ffmpeg -i "元動画のファイル名" -c:v mpeg2video -vf "scale=720:480,format=yuv420p,fps=30000/1001" -vsync 1 -target ntsc-dvd -aspect 16:9 -b:v 6000k -maxrate 9000k "出力ファイル名.mpg"
一括変換バッチ
cd /d %~dp1
:loop
if "%~1" == "" goto end
ffmpeg -i %1 -c:v mpeg2video -vf "scale=720:480,format=yuv420p,fps=30000/1001" -vsync 1 -target ntsc-dvd -aspect 16:9 -b:v 6000k -maxrate 9000k "%~dpn1.mpg"
shift
goto loop
:end
2Pass VBRのとき
コマンド
ffmpeg -i "元動画のファイル名" -c:v mpeg2video -pass 1 -vf "scale=720:480,format=yuv420p,fps=30000/1001" -vsync 1 -target ntsc-dvd -aspect 16:9 "出力ファイル名.mpg" && ffmpeg -y -i "元動画のファイル名" -c:v mpeg2video -pass 2 -vf "scale=720:480,format=yuv420p,fps=30000/1001" -vsync 1 -target ntsc-dvd -aspect 16:9 -b:v 6000k -maxrate 9000k "出力ファイル名.mpg"
一括変換バッチ
cd /d %~dp1
:loop
if "%~1" == "" goto end
ffmpeg -i %1 -c:v mpeg2video -pass 1 -vf "scale=720:480,format=yuv420p,fps=30000/1001" -vsync 1 -target ntsc-dvd -aspect 16:9 "~dpn1.mpg" && ffmpeg -y -i %1 -c:v mpeg2video -pass 2 -vf "scale=720:480,format=yuv420p,fps=30000/1001" -vsync 1 -target ntsc-dvd -aspect 16:9 -b:v 6000k -maxrate 9000k "~dpn1.mpg"
shift
goto loop
:end
解説
2Passエンコード
VBRとは可変ビットレートのこと。動きが多いところにたくさんデータを使い、動きの少ないところでデータ量を減らす。
2Passエンコードを行うと、1回目で動画の解析を行ってから2回目でエンコードするので、2倍の時間がかかるが効率よく圧縮できる。DVDは4.7GBと容量が限られているためおすすめする。
-target ntsc-dvd
NTSCとは日本で使われている映像放送規格。
このオプションは、このサイトによると
-c:v mpeg2video -c:a ac3 -f dvd -s 720x480 -r 30000/1001 -pix_fmt yuv420p -g 18 -b:v 6000000 -maxrate 9000000 -minrate 0 -bufsize 1835008 -packetsize 2048 -muxrate 10080000 -b:a 448000 -ar 48000
と同じらしい。これはDVDの規格に沿ったものである。一部書いたコマンドと被ってる部分があるが、自分で書いた方の記述が優先されるようなのでOK。
fps=30000/1001
と-vsync 1
一応target ntsc-dvd
の中でもフレームレートを29.97fps(=30000/1001fps、DVDの規格)にするために-r 30000/1001
としているが、これだと音ズレすることが多々あるので、fps=30000/1001
として強制的に29.97fpsにし、-vsync 1
でズレないように補強している。
2pass目にだけ存在する-y
-y
は、同名のファイルが存在したときに強制的に上書きするオプション。だって、1pass目でできたファイル、いらねえじゃん。
大体どのサイトでも1Pass目はNULL
とかそういう名前にして保存しているが、これが後で残るので、だったら出力ファイル名と同じに名前にしておけば2Pass目でついでに消してくれるよね、という構文になっている。
さいごに
どうせffmpegのことだしどうせエラー吐くんで自分で修正してください。頑張れ!
あとDVDに焼くときは必ず生成したmpgファイルをこちらのサイトの通りにセグメント付きVOBファイルに変換してから作業してください。そのうちVOB生成まで一通りバッチファイルで自動化するつもり。