You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PHP+FFmpeg将远程裁剪视频直接保存至用户本地?

嘿,这个需求其实不难实现,核心就是把FFmpeg裁剪好的视频从服务器直接推给用户下载,同时加上权限确认的环节,我给你拆解成具体步骤和代码示例:

实现步骤与代码示例

1. 先做用户权限确认的前端页面

先搞个简单的表单让用户确认是否要下载,比如:

<form method="POST" action="download_cropped_video.php">
    <p>确认要下载裁剪后的视频吗?</p>
    <button type="submit" name="confirm_download" value="1">确认下载</button>
</form>

2. PHP处理逻辑(download_cropped_video.php)

这部分是核心,要完成FFmpeg裁剪、文件输出和清理:

<?php
// 检查用户是否确认下载
if (!isset($_POST['confirm_download'])) {
    header("Location: index.php"); // 跳转回确认页面
    exit;
}

// 1. 配置FFmpeg参数和临时文件
$remote_video_url = "example.com/test.mp4";
$start_time = "00:00:30";
$duration = "00:00:09";
// 创建临时文件,避免文件名冲突
$temp_file = tempnam(sys_get_temp_dir(), "cropped_video_");
$output_file = $temp_file . ".mp4"; // 加上mp4后缀

// 2. 构建FFmpeg命令(用escapeshellarg避免命令注入)
$ffmpeg_cmd = sprintf(
    'ffmpeg -ss %s -i "%s" -t %s -acodec copy -vcodec copy -async 1 -y "%s"',
    escapeshellarg($start_time),
    escapeshellarg($remote_video_url),
    escapeshellarg($duration),
    escapeshellarg($output_file)
);

// 3. 执行FFmpeg命令并检查结果
exec($ffmpeg_cmd, $output_log, $return_var);
if ($return_var !== 0 || !file_exists($output_file) || filesize($output_file) === 0) {
    die("裁剪视频失败,请检查FFmpeg配置或远程视频链接");
}

// 4. 发送下载响应给用户
header('Content-Type: video/mp4');
header('Content-Disposition: attachment; filename="cropped_video.mp4"');
header('Content-Length: ' . filesize($output_file));
// 输出文件内容到浏览器
readfile($output_file);

// 5. 清理临时文件,避免服务器空间占用
unlink($output_file);
unlink($temp_file); // 删除tempnam生成的空文件
exit;
?>

3. 关键注意事项

  • FFmpeg环境:确保服务器已安装FFmpeg,且PHP的exec函数未被禁用(检查php.ini的disable_functions列表,移除exec)。
  • 权限问题:临时目录(sys_get_temp_dir()返回的路径)要给PHP进程写权限,不然生成不了文件。
  • 超时处理:如果视频较大、裁剪耗时久,要调整PHP的max_execution_time(php.ini里设置)和Web服务器(Nginx/Apache)的超时时间,避免脚本中途中断。
  • 远程视频访问:如果远程视频是HTTPS链接,服务器需要支持SSL,FFmpeg才能正常拉取资源;如果目标网站有防盗链,可能需要在FFmpeg命令里加-headers参数模拟合法请求。

内容的提问来源于stack exchange,提问作者hmaxx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:23:23