
ビデオファイルをDVDに書き込む標準のUnixyコマンドライン方法は次のとおりです(仮説)。
# 1. First use ffmpeg to convert to an mpg file.
ffmpeg -i input.m4v -target ntsc-dvd output.mpg
# 2. now do the authoring
dvdauthor --title -o dvd -f output.mpg
dvdauthor -o dvd -T
注:--title
DVDのタイトルを設定し、-T
ディレクトリを設定してください。上記の2つのコマンドでは、-oスイッチは実際のDVDではなくディレクトリを表します。
# 3. roll the .mpg file into an ISO file
genisoimage -dvd-video -o dvdimage.iso dvd
最後に作成されたisoファイルを空のDVDに書き込みます。私は非常に安定したBraseroを使用しています。
ただし、この方法は非標準アスペクト比では機能しません。 DVDフォーマットは、許容される画面の割合を指定するのに非常に厳密です。 dvdauthorが次のように言うと、この問題があるかどうかがわかります。
WARN: unknown mpeg2 aspect ratio 1
非標準アスペクト比を処理するためにこの方法を修正する良い方法は何ですか?
更新:非常に徹底的で明確な答えをいただいたAntonyに感謝します。この厳しい質問に対する答えを見つけたい人には、この内容が役立つことを願っています。私はこれについての他の明確な説明をオンラインで知りません。
答え1
基本的な方法は、ビデオに黒い枠線を追加して、DVDが許可するアスペクト比の1つに合わせることです。
TLDR: スキップ要約すると。
いくつかの定義
ただし、まずいくつかの異なる事項を定義する必要があります。
- 一つアスペクト比単にオブジェクトの幅を高さで割ったもので、通常は小数で表されます。多くの場合、伝統的なスラッシュはコロンで置き換えられます。4⁄3の代わりに4:3と書いてください。時々、これは10進表記法(1.333…)で表されます。すべて同じなので、8:6、12:9、16:12などと呼ぶこともできます。あるいは、1.333:1(十分に3を書くことができる限り同じ)も可能です。
- ㅏ展示するアスペクト比(DAR)は、実際のモニター(テレビなど)のアスペクト比です。一般的なモニターは公称4:3または16:9です。
- ㅏ保存アスペクト比(SAR)は、保存された画像またはビデオの幅と高さの比率(ピクセル単位)です。たとえば、NTSC DVDビデオの最大解像度は720 x 480(「Full D1」)、SARは1.5:1です。
- ㅏピクセルアスペクト比保存された画像の単一ピクセルのアスペクト比です。画像内のピクセルいいえ常に正方形です。正方形でない場合、通常はキーより狭いです。
上記の3つの間には、SAR×PAR = DARという単純な数学的関係があります。たとえば、720:480*8:9 = 4:3 です。これはDVDでフル解像度で再生される4:3ディスプレイビデオです。
別の種類の複雑さ
アナログテレビにはピクセルがありません。代わりに、絶えず変化する信号を持っています。信号の一部はディスプレイの各ラインに投影する必要があり、たとえば次のラインに移動できるように非アクティブ時間が必要です。ただし、テレビごとに表示される行の数が少し異なり、これはテレビの寿命やテレビの温度が上がっている間でも変わることがあります。
DVDには、一番左と一番右の8ピクセルを使用しないでください。したがって、720のうち704を使用する必要があります。各辺の8ピクセルは黒で塗りつぶす必要があります。指定されたPARはこの10:11です。
もちろん、デジタル機器に精通している人はこれが愚かだと思います(礼儀正しい会社に適した表現で)。多くの商用DVDリリースは実際には720ピクセルを使用し、一部は10:11 PARを期待し、一部は8:9を期待しています。 [または同様の16:9 DAR]。ほとんどのハードウェアDVDプレーヤーは10:11を使用しますが、これはテレビの設定によって異なります。
一般化する
すべてのピクセルを表示したいビデオから始める場合は、8px黒いバーを使用してビデオサイズを704x480(SAR 22:15)に調整できます。切り取ったエッジが大丈夫な場合は、720x480全体を使用できます。いずれにしても、10:11(DARの場合4:3)または40:33(DARの場合16:9)のPARを取得するには、必要に応じてビデオのサイズを変更し、全体のサイズより小さい場合は黒いバーを追加する必要があります。 720×480フレーム。
実際にやっている
幸いにもffmpeg
可能です。非公式ffmpegサポートフォーラムではks_kalvanはffmpegビデオフィルタチェーンを提供します。16:9 DAR 配置の場合:
-filter:v "scale='w=min(720,trunc((480*33/40*dar)/2+0.5)*2):h=min(480,trunc((720*40/33/dar)/2+0.5)*2)',pad='w=720:h=480:x=(ow-iw)/2:y=(oh-ih)/2',setsar='r=40/33'"
どのように機能しますか?
scale
、pad
との3つのフィルタがありますsetsar
。最後の項目が一番簡単なので、最後の項目から順に説明します。
最後のフィルタはドキュメント( `man ffmpeg-filter)をチェックし、それが見つかるまで混乱します。悪口を削除しましたライン: ""setsar"フィルタはフィルタ出力ビデオのサンプル(別名ピクセル)のアスペクト比を設定します。したがって、これは実際にPARを40:33に設定します。
フィルタはpad
黒い枠を追加します。文書は私達に言うああ出力幅です(たとえば、部分の720 w=720
)。ああ高さを出力します(部品の480度などh=480
)。イボそしてよくそれぞれ入力幅と高さです。ああ-イボ幅に追加するピクセル数も同じです(同様にああ-よく高さの場合)2で割ると、画像の各辺の値が半分になります。つまり、画像を中央に配置します。
ビデオのサイズを変更するには、フィルタを使用してくださいscale
。このw=
オプションは新しい/出力幅を指定し、h=
オプションは高さを指定します。繰り返しますが、これは式ですが、より複雑です。幅と高さの式は同じで、高さと幅だけが変わりました。 width()公式を確認してみましょうw=
:
関数と演算子はで説明されています
man ffmpeg-util
。正の場合、trunc(x+0.5)
ffmpegにはない最も近い整数に丸めるトリックがあります。trunc(x+0.5)
このトリックに基づいて、trunc(x/2+0.5)*2
x / 2はxの半分を提供し、切り捨ては最も近い整数に丸められます。最も近いものを得るには、倍増してください。でも数字。実際のコマンドで720を使用している場合は、「W」を使用します。これは最終出力幅(ピクセル単位)です。今回も480(最終出力高さ)を「H」に変えます。 40/33の代わりに「PAR」が対象画素のアスペクト比であるからである。 PAR⁻1はPARの逆数である33/40です。
dar
ffmpeg変数です。入力映像のDARです。これを理解するキーは中間の計算です。ここでの計算は「H」×dar ¼「PAR」です。 darは元のビデオに表示されていることを覚えておいてください。したがって、ターゲットの幅(ピクセル単位)にdarを掛けると、ターゲットの高さ「H」と正方形のピクセルを持つようにビデオのサイズを変更した場合に幅が得られます。 PARを分割して、使用する正方形ではなくピクセルの実際の幅に変換します。
min(«W», # take the minimum [lesser of] target width and...
trunc( # the truncation of (round to integer towards 0)
(«H»*«PAR⁻¹»*dar) # calculate the wanted output width, see note above
/ 2 + 0.5) * 2 # and get the nearest even number to that
))
例:アスペクト比が16:9の1280 x 720ピクセルのビデオを撮影しているとします。真ん中から始めましょう:
- «H»*«PAR⁻1»*dar = 480*33/40*16/9 = 704。
- 704/2 = 352.
- 切り捨て(352 + 0.5) = 352
- 352*2 = 704
- 分(720, 704) = 704
これは、16:9ディスプレイの16:9ビデオで予想されるように、利用可能な全幅です(つまり、利用できない8px領域は含まれません)。
高さに対してこれを行うと、min()は480に保たれるため、490が得られます。しかし実際には、これは480の720の代わりに704(利用可能な幅)を使用したいことを意味します。したがって、小さなバグがあり、小さな(おそらく検出できない)歪みが発生しているようです。私はこれが解決されたと信じています。
要約すると
ffmpeg -i YOUR-FILE-HERE \
-filter:v "scale='w=min(720,trunc((480*33/40*dar)/2+0.5)*2):h=min(480,trunc((704*40/33/dar)/2+0.5)*2)',pad='w=720:h=480:x=(ow-iw)/2:y=(oh-ih)/2',setsar='r=40/33'" \
-target ntsc-dvd YOUR-OUTPUT-HERE.mpg
メモ:以前のffmpegはテストされていないか、以下から新しい静的バージョンをダウンロードでき-filter:v
ます。-vf
ffmpeg.org。