Php Ffmpeg使用固定宽度更改高度

Php Ffmpeg使用固定宽度更改高度,php,ffmpeg,video-processing,Php,Ffmpeg,Video Processing,我正在尝试使用ffmpeg更改视频尺寸。 例如,用户正在上载视频1280*960 我需要得到视频640*480作为回报 我试过这个代码,它是有效的 exec($ffmpegPath." -i ".$srcFile." -ar 22050 -ab 32 -f flv -s 640x480".$destFile,$tmp); 但这种方法无法保持视频的宽度/高度平衡(即视频5000*480变为640*480,从左到右看都是压缩的) 在这种尺寸(5000*480)的情况下,我需要在出口处获得视频,比如

我正在尝试使用ffmpeg更改视频尺寸。 例如,用户正在上载视频1280*960

我需要得到视频640*480作为回报

我试过这个代码,它是有效的

exec($ffmpegPath." -i ".$srcFile." -ar 22050 -ab 32 -f flv -s 640x480".$destFile,$tmp);
但这种方法无法保持视频的宽度/高度平衡(即视频5000*480变为640*480,从左到右看都是压缩的)

在这种尺寸(5000*480)的情况下,我需要在出口处获得视频,比如640*61 我的意思是固定高度不适合我

我在网上查了一下,发现了这个话题

但这两种方法都不适用于我(ffmpeg甚至不适用于此代码,可能是我在ffmpeg字符串中添加了它们的代码部分时出错了)

请帮助我改进我的代码


谢谢

我自己也遇到过这个问题,最后我编写了自己的函数(它是用C++编写的)

QSize fitTo(QSize originalSize,QSize fitTo)
{
int width=originalSize.width();
int height=originalSize.height();
int fitToWidth=fitTo.width();
int fitToHeight=fitTo.height();

如果(fitToWidth*height/width/2*2我不能流利地使用ffmpeg,但我似乎找不到一种方法来做到这一点。我相信你可以用mencoder来实现,或者你可以尝试获取视频的宽度和高度,然后自己计算所需的高度

ob_start();
passthru('ffmpeg -i "'. $srcFile . '" 2>&1');
$output = ob_get_clean();
ob_end_clean();
preg_match('/(\d+)x(\d+)/', $output, $matches);
$width = $matches[1];
$height = $matches[2];
$ratio = $width/640;
$newwidth = 640;
$newheight = $height/$ratio;

如果
ffmpeg
支持视频过滤器,则可以使用
缩放
过滤器,将视频大小调整为640像素宽,并按比例更改高度,如下所示:


exec($ffmpegPath.-i.“$srcFile.-ar 22050-ab 32-f flv-vf scale=640:ih*640/iw.“$destFile,$tmp)是的,如果没有命令字符串解决方案,我将不得不手动计算尺寸,但我相信ThantCString解决方案存在——ffmpeg dt将其设置为\,这太奇怪了。好消息是,如果不设置输出文件,ffmpeg将立即退出。但它只有在回显有关流的信息后才会这样做这意味着你自己的开销非常小。正如你已经调查过的和Dmitry Shkuropatsky建议的那样,缩放过滤器可能是你想要的,但是你没有包括你尝试缩放使用的完整ffmpeg输出,所以我只能猜测你的ffmpeg可能太旧了。好吧,它看起来像我的ffmpeg build dt支持-vf命令:(我将使用php和图像工作类手动计算大小,无论如何感谢您的帮助)
ob_start();
passthru('ffmpeg -i "'. $srcFile . '" 2>&1');
$output = ob_get_clean();
ob_end_clean();
preg_match('/(\d+)x(\d+)/', $output, $matches);
$width = $matches[1];
$height = $matches[2];
$ratio = $width/640;
$newwidth = 640;
$newheight = $height/$ratio;