插件窝 干货文章 php怎么转换为mp4格式

php怎么转换为mp4格式

FFmpeg 转换 curl 使用 370    来源:    2025-03-16

PHP本身是一种服务器端脚本语言,主要用于Web开发,并不直接处理视频格式转换。要将视频文件转换为MP4格式,通常需要使用专门的视频处理工具或库。以下是一些常见的方法:

1. 使用FFmpeg

FFmpeg 是一个强大的多媒体处理工具,可以用于视频格式转换。你可以通过PHP调用FFmpeg命令行工具来完成视频转换。

安装FFmpeg

首先,你需要在服务器上安装FFmpeg。在Linux系统上,可以使用以下命令安装:

sudo apt-get update
sudo apt-get install ffmpeg

在Windows系统上,你可以从FFmpeg官网下载并安装。

使用PHP调用FFmpeg

安装完成后,你可以使用PHP的exec()函数来调用FFmpeg进行视频转换。

<?php
// 输入文件路径
$inputFile = 'input.avi';
// 输出文件路径
$outputFile = 'output.mp4';

// 调用FFmpeg进行转换
$command = "ffmpeg -i $inputFile $outputFile 2>&1";
exec($command, $output, $return_var);

// 检查转换是否成功
if ($return_var === 0) {
    echo "视频转换成功!";
} else {
    echo "视频转换失败:" . implode("\n", $output);
}
?>

2. 使用PHP-FFmpeg库

如果你希望在PHP中更优雅地使用FFmpeg,可以使用PHP-FFmpeg库。这个库提供了一个面向对象的接口来调用FFmpeg。

安装PHP-FFmpeg

你可以使用Composer来安装PHP-FFmpeg:

composer require php-ffmpeg/php-ffmpeg

使用PHP-FFmpeg进行视频转换

安装完成后,你可以使用以下代码进行视频转换:

<?php
require 'vendor/autoload.php';

use FFMpeg\FFMpeg;
use FFMpeg\Format\Video\X264;

// 输入文件路径
$inputFile = 'input.avi';
// 输出文件路径
$outputFile = 'output.mp4';

// 创建FFMpeg实例
$ffmpeg = FFMpeg::create();

// 打开视频文件
$video = $ffmpeg->open($inputFile);

// 设置输出格式为MP4
$format = new X264();

// 保存为MP4格式
$video->save($format, $outputFile);

echo "视频转换成功!";
?>

3. 使用在线API

如果你不想在服务器上安装FFmpeg,也可以使用一些在线的视频转换API。这些API通常提供RESTful接口,你可以通过HTTP请求来上传视频并获取转换后的MP4文件。

示例:使用Zamzar API

Zamzar 是一个提供文件格式转换服务的在线API。

<?php
$apiKey = 'your_zamzar_api_key';
$inputFile = 'input.avi';
$outputFormat = 'mp4';

// 上传文件
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.zamzar.com/v1/jobs");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
    'source_file' => new CURLFile($inputFile),
    'target_format' => $outputFormat
]);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Basic ' . base64_encode($apiKey . ':')
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

$jobId = json_decode($response, true)['id'];

// 检查转换状态
do {
    sleep(5); // 等待5秒
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://api.zamzar.com/v1/jobs/$jobId");
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Authorization: Basic ' . base64_encode($apiKey . ':')
    ]);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    curl_close($ch);
    $status = json_decode($response, true)['status'];
} while ($status !== 'successful');

// 下载转换后的文件
$fileId = json_decode($response, true)['target_files'][0]['id'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.zamzar.com/v1/files/$fileId/content");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Basic ' . base64_encode($apiKey . ':')
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$fileContent = curl_exec($ch);
curl_close($ch);

file_put_contents('output.mp4', $fileContent);

echo "视频转换成功!";
?>

总结

  • FFmpeg 是最常用的视频转换工具,适合在服务器上直接使用。
  • PHP-FFmpeg 提供了一个更友好的PHP接口来调用FFmpeg。
  • 在线API 适合不想在服务器上安装额外软件的场景,但可能会有额外的费用和网络延迟。

根据你的需求和环境选择合适的方案。