-1

我喜欢 Handbrake CLI,并一直将它用于我创建的内部工具,以帮助将未压缩的大型视频转换为 HTML5 就绪的 MP4。

这对您的普通高清电影 (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 目标宽度 = 714;

int 目标高度 = 402;

float scaleFactor = (float) targetHeight / videoHeight; // 缩放到适合高度

scaledWidth = (float)videoWidth * scaleFactor; // 输出为 974

scaledHeight = (float)videoHeight * scaleFactor; // 输出为 402

int offset = (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 回答