PHP使用ffmpeg将任何视频转换为MP4 [英] PHP convert any video to MP4 using ffmpeg

查看:698
本文介绍了PHP使用ffmpeg将任何视频转换为MP4的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个网站,允许用户上传视频.但是对于HTML5标签视频,只允许使用MP4视频

I have a website in wich I allow users to upload videos. But with the HTML5 tag video, only MP4 videos are allowed

因此,我想将用户上传的任何类型的视频转换为MP4,然后在我的数据库中添加路径.

So, I want to convert any type of videos that the users upload to MP4 and then add the path in my database.

我尝试了一些操作,将文件扩展名更改为MP4,但是没有用. 我已经读过一些关于ffmepg的内容,但是我不知道该如何使用.

I tried something, changing the file extension to MP4 but it didn't work. I've read something about ffmepg but I can't figure out how to use it.

这是我的PHP脚本,在这里我更改文件扩展名,然后在数据库中添加路径,请如何正确转换视频,我应该添加/更改什么?

Here is my PHP script where I change the file extension and then add the path in my data base, please how can I convert the video correctly, what should I add/change?

<?php 
    if(file_exists($_FILES['media-vid']['tmp_name']) && is_uploaded_file($_FILES['media-vid']['tmp_name']))
    {
        $targetvid = md5(time());
        $target_dirvid = "videos/";
        $target_filevid =  $targetvid.basename($_FILES["media-vid"]["name"]);
        $uploadOk = 0;
        $videotype = pathinfo($target_filevid,PATHINFO_EXTENSION);

        $video_formats = array(
            "mpeg",
            "mp4",
            "mov",
            "wav",
            "avi",
            "dat",
            "flv",
            "3gp"
        );
        foreach ($video_formats as $valid_video_format)
        {
            if (preg_match("/$videotype/i", $valid_video_format)) 
            {
                $target_filevid = $targetvid . basename($_FILES["media-vid"] . ".mp4");
                $uploadOk = 1;
                break;
            } 
            else 
            {
                //if it is an image or another file format it is not accepted
                $format_error = "Invalid Video Format!";
            }
        }

        if ($_FILES["media-vid"]["size"] > 5000000000000)
        {
            $uploadOk = 0;
            echo "Sorry, your file is too large.";
        }

        // Check if $uploadOk is set to 0 by an error
        if ($uploadOk == 0 && isset($format_error))
        {
            echo "Sorry, your video was not uploaded.";
            // if everything is ok, try to upload file
        }
        else if ($uploadOk == 0) 
        {
            echo "Sorry, your video was not uploaded.";
        }
        else
        {
            $target_filevid = strtr($target_filevid,
            'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
            'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
            $target_filevid = preg_replace('/([^.a-z0-9]+)/i', '_', $target_filevid);
            if (!move_uploaded_file($_FILES["media-vid"]["tmp_name"], $target_dirvid. $target_filevid))
            {
                echo "Sorry, there was an error uploading your file. Please retry.";
            }
            else
            {
                $vid= $target_dirvid.$target_filevid;
                $nbvid = 1;
            }
        }
    }
?>

谢谢.

推荐答案

这对我有用

$folder = '/path/to/uploads/folder';
$filename = 'your_video.avi';
$newFilename = pathinfo($filename, PATHINFO_FILENAME).'.mp4';

exec('/usr/bin/ffmpeg -y -i '.$folder.DIRECTORY_SEPARATOR.$filename.' -c:v libx264 -c:a aac -pix_fmt yuv420p -movflags faststart -hide_banner '.$folder.DIRECTORY_SEPARATOR.$newFilename.' 2>&1', $out, $res);

if($res != 0) {
    error_log(var_export($out, true));
    error_log(var_export($res, true));

    throw new \Exception("Error!");
}

这篇关于PHP使用ffmpeg将任何视频转换为MP4的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆