讲师中心 微信公众号

工具推荐

视频效率加速
剧云
剧云

中文短剧剧本制作平台

立刻MV
立刻MV

低成本歌曲 MV、视频生成

Seko
Seko

AI短剧一键生成成片

updream

一键生成高质量推广成片

php怎么把视频格式转成mp4

大敏吖_9948

大敏吖_9948

发布时间:2026-11-14 09:45:33

|

861人浏览过

|

来源于php中文网

原创

在 php 中将视频转换为 mp4 格式,最直接且可靠的方法是使用命令行工具 ffmpeg 进行转码。通过 php 的 `exec()`、`shell_exec()` 或 `proc_open()` 函数调用系统安装的 ffmpeg 程序,指定输入文件路径和输出文件路径,并设置合适的编码参数(如 h.264 视频和 aac 音频),即可生成标准的 mp4 文件。这种方法兼容性最好,能处理绝大多数源格式,但需要服务器环境支持执行外部命令。

php怎么把视频格式转成mp4

如何调用 FFmpeg 执行基础转码

使用 PHP 调用 FFmpeg 进行基础转码,核心是构建正确的命令行字符串并通过系统函数执行。推荐使用 `proc_open()` 因为它能更好地处理标准输入输出流,避免阻塞,适合处理可能耗时较长的视频转码任务。你需要提供源视频路径和目标 MP4 路径,FFmpeg 会自动检测容器格式并进行必要的重封装或转码。

php怎么把视频格式转成mp4

$input = 'path/to/source.avi';
$output = 'path/to/output.mp4';

// 构建命令,-y 覆盖已存在文件,-c:v libx264 使用 H.264 编码,-c:a aac 使用 AAC 音频
$command = 'ffmpeg -i ' . escapeshellarg($input) . ' -c:v libx264 -c:a aac -movflags +faststart ' . escapeshellarg($output);

// 使用 proc_open 执行命令
$descriptorspec = array(
   0 => array("pipe", "r"), // stdin
   1 => array("pipe", "w"), // stdout
   2 => array("pipe", "w")  // stderr
);

$process = proc_open($command, $descriptorspec, $pipes);

if (is_resource($process)) {
    // 关闭 stdin,因为 ffmpeg 不需要从 php 读取输入
    fclose($pipes[0]);
    
    // 读取错误输出以监控进度或捕获错误
    $errorOutput = stream_get_contents($pipes[2]);
    fclose($pipes[2]);
    
    // 等待进程结束
    $returnCode = proc_close($process);
    
    if ($returnCode === 0) {
        echo '转换成功!';
    } else {
        echo '转换失败: ' . $errorOutput;
    }
}

上述代码中,`escapeshellarg()` 用于防止命令注入攻击,确保文件名中的特殊字符被安全处理。`-movflags +faststart` 参数对于 Web 播放非常重要,它将元数据移动到文件头部,允许浏览器在完全下载前开始播放。如果源视频已经是 MP4 容器且编码兼容,FFmpeg 可能会使用 `-c copy` 进行快速复用,速度极快;但如果编码不匹配(如 AVI 中的 DivX),则必须进行重新编码,耗时较长。

立即学习“PHP免费学习笔记(深入)”;

btpanel phpsite 宝塔面板PHP网站
btpanel phpsite 宝塔面板PHP网站

宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理

下载

如何处理转码过程中的进度反馈与错误

视频转码通常耗时较长,直接阻塞用户请求是不友好的做法。在实际应用中,可以通过解析 FFmpeg 的标准错误输出(stderr)来获取实时进度信息,或者将转码任务放入后台队列。FFmpeg 在转码过程中会不断向 stderr 输出包含时间戳、帧数、比特率等信息的行,PHP 可以逐行读取这些内容来更新前端进度条或记录日志。

php怎么把视频格式转成mp4

// 改进版:实时读取 stderr 获取进度
$descriptorspec = array(
   0 => array("pipe", "r"),
   1 => array("pipe", "w"),
   2 => array("pipe", "r") // 改为可读模式以实时读取
);

$process = proc_open($command, $descriptorspec, $pipes);
fclose($pipes[0]);

while (!feof($pipes[2])) {
    $line = fgets($pipes[2]);
    // 示例:解析类似 'frame=  150 fps=0.0 q=29.0 size=    5120kB time=00:00:06.00 bitrate=6998.4kbits/s speed=12x' 的行
    if (preg_match('/time=(\d+:\d+:\d+\.\d+)/', $line, $matches)) {
        $currentTime = $matches[1];
        // 这里可以将 $currentTime 发送给前端或通过日志记录
        // echo '当前时间: ' . $currentTime . '\n';
    }
}

$returnCode = proc_close($process);

在处理错误时,除了检查返回码,还应仔细分析 `$errorOutput` 或实时读取的 stderr 内容。常见的错误包括:输入文件不存在、权限不足、磁盘空间不够、编码器不可用等。对于生产环境,建议结合消息队列(如 RabbitMQ 或 Redis Queue)将转码任务异步化,PHP 脚本只负责提交任务和轮询结果,避免 HTTP 请求超时。同时,务必对输入的文件名和路径进行严格的 sanitization,防止恶意用户通过文件名注入系统命令。

当 FFmpeg 未安装或无法执行时有哪些替代方案

如果服务器出于安全考虑禁用了 `exec` 系列函数,或者未安装 FFmpeg,可以考虑使用纯 PHP 库进行有限的格式转换,但功能远不如 FFmpeg 强大。例如,可以使用 `php-ffmpeg` 这样的封装库,但它底层依然依赖 FFmpeg 二进制文件。另一种思路是使用在线 API 服务(如 CloudConvert API),将视频上传到第三方服务进行转换,然后下载结果。这种方式解耦了服务器负载,但涉及网络传输和隐私问题,且通常需要付费。对于简单的容器复用(如 MKV 转 MP4 而不改变编码),可以尝试使用 `MediaInfo` 库配合手动构造 MP4 头,但这极其复杂且不推荐,因为大多数情况下视频编码本身也需要转换,纯 PHP 无法高效完成 H.264/AAC 的编解码工作。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

SoundView
SoundView Hot

SoundView是一款面向跨境电商的视频翻译、配音和本地化 AI 创作平台。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

12824

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

7361

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2255

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

4648

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

5354

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

4211

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

6117

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4802

2023.11.13

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

20

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Laravel5.2博客实战视频教程
Laravel5.2博客实战视频教程

共41课时 | 22.1万人学习

后盾网ECShop从入门到精通视频教程
后盾网ECShop从入门到精通视频教程

共42课时 | 11.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn