gpt4 book ai didi

FFmpeg 不工作

转载 作者:行者123 更新时间:2023-12-04 23:30:20 24 4
gpt4 key购买 nike

我拥有一个类似于 youtube 的网站 www.goploom.com,允许用户上传和观看视频。上传的视频会转换为 mp4 格式,以便与我们网站的 html5 视频播放器兼容。我的问题是,虽然 FFmpeg 成功地从上传的视频生成视频缩略图并将图像存储在正确的目录中,但我的代码的视频转换方面不会产生任何输出。我已经调整了几个小时的代码,但我无法解决这个问题,但是,我被告知我可以使用 html、php 和 ffmpeg 执行视频转换。

我的 ffmpeg 路径是正确的,因为缩略图生成完美。

**上传时从上传的视频中收集的信息。
$name = $_FILES['video']['name'];
$title = $_POST['videotitle'];
$type = explode('.', $name);
$type = end($type);
$size = $_FILES['video']['size'];
$random_name = rand();
$tmp = $_FILES['video']['tmp_name'];

                if($type != 'mp4' && $type != 'MP4' && $type != 'flv' && $type != 'FLV' && $type != 'mov' && $type != 'MOV'){
$message = "Video Format Not Supported<br>";
} else {
$username_query = mysql_query("SELECT `username` FROM `users` WHERE `user_id` = $session_user_id");
$username = mysql_fetch_assoc($username_query);
$username = $username['username'];

**完美运行的缩略图生成。
$ffmpeg = "/usr/local/bin/ffmpeg";
$videoFile = $_FILES['video']['tmp_name'];
$imageFile = "上传/".$username."/thumbnails/".$random_name.".jpg";
$size = "160x90";
$getFromSecond = 5;
$cmd = "$ffmpeg -i $videoFile -an -ss $getFromSecond -s $size $imageFile";
如果(!shell_exec($cmd)){
echo "缩略图已创建!";
} 别的 {
echo "创建缩略图时出错!";
}

**将上传的文件移动到其永久目录以进行视频转换。
$newFileLocation = "上传/".$username."/temp".$random_name.".".$type;
move_uploaded_file($tmp, $newFileLocation);

*视频转换代码。
$outputFile = "上传/".$username."/".$random_name.".mp4";
$databaseStoredVideoUrl = "上传/".$username."/".$random_name.".mp4";
$video_cmd = "$ffmpeg -i $newFileLocation $outputFile";
回声 $video_cmd;
如果(!shell_exec($video_cmd)){
echo "视频转换!";
} 别的 {
echo "创建缩略图时出错!";
}

**将输出的src链接正确存储在数据库中,但是视频因为不存在而无法查看。
//视频存储到数据库中正确的用户名和用户目录下
mysql_query("INSERT INTO videos VALUES('$session_user_id','', '$name', '$outputFile', '$title', '', '$imageFile')");
$message = "视频上传成功。";

任何帮助或见解都会很棒。
谢谢。

**编辑:通过使用以下行修复。
$video_cmd = "$ffmpeg -i $newFileLocation -vcodec libx264 -vpre normal -acodec libfaac $outputFile";

然后将 $video_cmd 输入到 shell_exec

最佳答案

不知道。
曾多次使用 FFMPEG 和 PHP,您可能会遇到以下问题:

  • 内存限制,因为您似乎正在运行视频编码服务器端,我不建议这样做。
  • 其次,ffmpeg 进程本身可能需要很长时间,因为视频编码的执行时间可能比您的 Web 服务器 Apache/Nginx 允许的最大脚本执行时间更长。

  • 如果您将编码作为 Web 请求运行,您应该避免这样做,而是创建一个 cron 作业或一个单独的服务来检查是否有任何新的视频需要处理和编码(视频队列服务)。

    确保这一点的步骤大致如下:
  • 首先直接从 cmdline 测试您的编码。
  • 更新您的视频表并标记应该处理的那些,或制作一个视频队列表。
  • 有一个 cron 作业或服务来检查要处理的新视频,然后一个一个地处理它们。

  • 如果您最熟悉 PHP,请使用 ini_set("set_time_limit", 0) 创建一个 php 脚本,以确保您的脚本不会超时。其他选项可以是 bash 脚本,或者例如使用 node.js 和 forever一个 ffmpeg library做加工服务。

    关于FFmpeg 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17624497/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com