【发布时间】:2020-07-02 04:07:18
【问题描述】:
我正在开发一个简单的视频上传和压缩系统,我目前正在使用以下过程。
第一步
我使用multipart/form-data 上传原始视频文件,并将其存储在/var/www/site/videos_pre/video.mp4。我的公共文件夹是var/www/site/public_html/。我在我的数据库中存储了一个带有视频信息的条目。
第二步
我有一个非常基本的转换器进程,但可以完成工作(至少在 CLI 中)。
代码如下:
public function converter($content_id)
{
$content = $this->videos_m->get($content_id);
$id = uniqid();
$name_mp4 = $content->name_slug.'_'.$id.'.mp4';
$name_webm = $content->name_slug.'_'.$id.'.webm';
$command_mp4 = 'ffmpeg -i ../videos_pre/'.$content->original_file.' -b:v 1500k -bufsize 1500k ./videos/'.$name_mp4;
system($command_mp4);
$command_webm = 'ffmpeg -i ./videos/'.$name_mp4.' -c:v vp9 -c:a libvorbis ./videos/'.$name_webm;
system($command_webm);
$update_video = new stdClass();
$update_video->archivo_mp4 = $name_mp4;
$update_video->archivo_webm = $name_webm;
$this->db->where('content_id', $content_id);
$this->db->update('Videos', $update_video);
}
第三步 - 问题发生的地方
我已经在 Windows 10 和 Ubuntu 18.04 上对此进行了测试。该代码在 php 和 cli 中都适用于 Windows 10。 Ubuntu 上的代码仅适用于 cli。
生成的命令是这样的:
// First command to reduce the bitrate of the mp4
ffmpeg -i /var/www/site/videos_pre/video.mp4 -b:v 1500k -bufsize 1500k /var/www/site/public_html/videos/video_5e757d3e0d762.mp4
// Second command to convert the mp4 to a webm to get both types
ffmpeg -i /var/www/site/public_html/videos/video_5e757d3e0d762.mp4 -c:v vp9 -c:a libvorbis /var/www/site/public_html/videos/video_5e757d3e0d762.webm
如果我执行这些命令,它们会完美运行。如果我运行 php 脚本,无论是在浏览器中还是通过 CLI,都不会发生任何事情。没有任何错误信息。
我不确定这是否是权限问题,是否有特定于 php 的东西来运行它,或者我没有激活某些模块。我有足够的执行时间,我有 600 秒,但正如我所说,它甚至不需要时间,它什么都不做。
我什至可以回显命令并且它们会出现。所以,基本上问题是我需要能够从 PHP 运行这些命令。我是在 Windows 上完成的,但 Ubuntu 18.04 不允许。两个操作系统最近都安装了 ffmpeg,我已经能够在它们上进行转换。
我尝试将路径从绝对路径更改为相对路径,完全没有区别。
【问题讨论】:
-
并且在网络服务器错误日志中也没有输出?
-
没什么。就好像什么事都没发生一样。 @Evil_skunk
标签: php video ffmpeg windows-10 ubuntu-18.04