我正在尝试使用ffmpeg从url转换文件,并且大多数时候,我得到的正是我想要的东西:
$video = "tmpVideos/".$img->image_id.$randNum.".mov";
$largeURL = uniqid();
$command = "ffmpeg -i $video -filter:v scale=720:-2:force_original_aspect_ratio=decrease -c:v libx264 -x264-params crf=23 -an large/$largeURL.mp4";
shell_exec($command);
但是,当输入文件大于2GB时,就会发生奇怪的事情。大多数情况下,它只会产生额外的文件。我要求的文件将被创建,然后再以相同的分辨率创建多个文件(有时为1,有时为3),但文件大小稍大(大约20%)。
为什么会这样?创建所需文件时,有什么方法可以杀死ffmpeg?
经过大量的反复试验,我确实解决了这个问题。
我有两个问题。上面列出了一个,另一个是我下载的2-4GB文件将下载1-4次,然后每个文件将用ffmpeg处理1-4次以上,因此我吞噬了很多处理能力和带宽。
事实证明,整个脚本只是在重复进行自身操作才能到达die()或exit();超时后,PHP将停止执行,但下载或进程将继续进行。
我仍然不知道为什么它在超时后会重复出现,但是加上ini_set('max_execution_time', '1000');
(1000或其他一些大数字)就可以了。该脚本有足够的时间执行,并且自然会die()
。