我喜欢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 --crop 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 offset =(scaledWidth - targetWidth); //以130px的形式出现 需要在每一侧裁剪
然而,视频出现了扭曲! 通过反复试验,我找出了正确的偏移,使它看起来很好 169 ,只是我不知道为什么这是正确的价值。
任何人都可以帮我弄清楚出了什么问题吗?
谢谢!
答案 0 :(得分:1)
您的数字表明offset
适用于原始视频,即首先移动然后缩放。此外,你必须除以2,因为你希望整个边距在两边均匀分布。
int offset = (scaledWidth - targetWidth)/(2 * scaleFactor)
170 = ( 974 - 714 )/(2 * (402 / 528))