-1

私は Handbrake CLI が大好きで、これを私が作成した内部ツールとして使用しており、圧縮されていない大きなビデオを HTML5 対応の MP4 に変換するのに役立ちます。

これは、通常の HD ムービー (1920x1080 / 1280x720) では非常にうまく機能しますが、たとえば、YouTube から 720p ビデオを追加すると、エンコーダーによって黒いバーが既に自動的に削除されているため、うまく機能しません。

これは、入力ビデオの解像度が 1280x528 であることを意味します (黒いバーがないため、高さ 720 ではありません)。

したがって、私が持っているプレビュー パネルに合わせるために私がしなければならないことは、パネルの高さに合わせてビデオをスケーリングし、余分な幅をトリミングすることです。

基本的なロジック、基本的な数学、それでもハンドブレーキはすべてを歪め、私を狂気に駆り立てます。

私が使用している行は次のとおりです。

./HandBrakeCLI -i Man_of_Steel.mp4 -e x264 -a none -q 25 -f mp4 -o test.mp4 --optimize -w 714 -l 402 --start-at duration:1 --stop-at duration:3 --クロップ 0:0:130:130

これにより、3 秒間のプレビューが保存されます。

数学は次のとおりです。

int scaledWidth;
int scaledHeight;

int targetWidth = 714;

int targetHeight = 402;

float scaleFactor = (float) targetHeight / videoHeight; // 高さに合わせてスケーリング

scaledWidth = (float)videoWidth * scaleFactor; // 974 として出力されます

scaledHeight = (float)videoHeight * scaleFactor; // 402として出力されます

int オフセット = (scaledWidth - targetWidth); // 130px として出力され、各辺をトリミングする必要があります

ただし、ビデオは歪んで表示されます。試行錯誤の結果、見栄えを良くするための正しいオフセットは169であることがわかりましたが、なぜそれが正しい値なのかわかりません。

誰が何が間違っているのかを理解するのを手伝ってくれますか?

ありがとう!

4

1 に答える 1

1

あなたの数字は、元のoffsetビデオに適用されることを示唆しています。つまり、最初に移動してからスケーリングされます。さらに、マージン全体を両側で均等に配置する必要があるため、2 で割る必要があります。

int offset = (scaledWidth - targetWidth)/(2 * scaleFactor)
     170   = (    974     -     714    )/(2 * (402 / 528))
于 2013-03-06T16:01:53.923 に答える