登录
首页 >  文章 >  php教程

视频转码触发PHP执行方法详解

时间:2025-12-31 23:45:44 166浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《视频转码触发PHP执行方法解析》,很明显是关于文章的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

视频转码同步执行PHP代码有五种方法:一、FFmpeg命令后用&&调用PHP脚本;二、通过-progress HTTP接口轮询触发回调;三、监听输出文件写入完成事件;四、借助消息队列解耦执行;五、利用-vstats_file生成日志触发钩子。

视频转码如何触发php代码执行_视频转码触发php代码执行方法【解析】

如果在视频转码过程中需要同步执行 PHP 代码,通常是因为需在转码完成、失败或特定阶段触发业务逻辑,例如更新数据库状态、发送通知、生成缩略图或写入日志。以下是实现该目标的多种方法:

一、通过 FFmpeg 的 -exec 或 -report 机制配合 shell 脚本调用 PHP

FFmpeg 本身不直接支持 PHP 执行,但可通过其 -exec 参数(需编译时启用)或结合 shell 脚本,在转码结束时调用 PHP 解释器运行指定脚本。

1、编写 PHP 脚本 /var/www/trigger/transcode_done.php,确保具有可执行权限且 Web 服务器用户可读。

2、构造 FFmpeg 命令,在转码完成后执行 shell 命令:ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4 -y && php /var/www/trigger/transcode_done.php

3、若需传递参数(如输入文件名、输出路径),可在命令中追加:&& php /var/www/trigger/transcode_done.php "input.mp4" "output.mp4"。

二、使用 FFmpeg 的 -progress HTTP 接口轮询并触发回调

FFmpeg 支持通过 -progress 参数向 HTTP 端点持续上报进度,PHP 后端可监听该端点,在收到 finish 事件时执行对应逻辑。

1、启动一个轻量 PHP HTTP 服务(如使用 PHP 内置服务器)监听 /transcode-progress。

2、运行 FFmpeg 命令:ffmpeg -i input.mp4 -c:v libx264 output.mp4 -y -progress http://127.0.0.1:8000/transcode-progress

3、PHP 服务接收到包含 quit=1 或 progress=finished 的 POST 请求后,解析 query 参数并调用业务函数。

三、基于文件系统事件监听转码输出文件生成

当转码输出文件被完整写入磁盘时,可借助 inotifywait(Linux)或 fswatch(macOS)监控目标目录,检测文件创建或关闭写入事件,进而调用 PHP 脚本。

1、安装 inotify-tools:apt-get install inotify-tools(Debian/Ubuntu)。

2、运行监听命令:inotifywait -m -e close_write /var/www/output/ | while read path action file; do [ \"\$file\" = \"output.mp4\" ] && php /var/www/trigger/on_file_complete.php \"\$file\"; done

3、确保 PHP 脚本中校验文件大小是否稳定(避免监听到未写完的临时文件),可添加 sleep 1 后二次 stat 比对。

四、通过消息队列解耦转码与 PHP 执行

将转码任务提交至队列系统(如 Redis List、RabbitMQ),由独立的 PHP Worker 进程消费任务并在转码结束后执行回调逻辑,提升可靠性与扩展性。

1、FFmpeg 转码完成后,使用 redis-cli 向队列推送完成消息:echo \"{'job_id':'abc123','status':'done','output':'/out/video.mp4'}\" | redis-cli -n 2 RPUSH transcode_queue

2、PHP Worker 使用 while 循环阻塞式读取:$msg = $redis->blPop('transcode_queue', 0)。

3、Worker 解析 JSON 消息,调用业务类处理完成事件,如更新 MySQL 中 job_status 字段为 completed。

五、利用 FFmpeg 的 -f null 输出配合 -vstats_file 触发钩子

通过伪造一个无实际输出的转码流程(-f null),同时启用 -vstats_file 记录统计信息,当该文件被成功创建并写入最终帧数据时,视为转码逻辑完成,可触发 PHP 调用。

1、执行命令:ffmpeg -i input.mp4 -f null -vstats_file /tmp/vstats_abc.log -v quiet -stats

2、编写检测脚本定期检查 /tmp/vstats_abc.log 是否存在且末尾含 frame=xxxx,表示已到达终帧。

3、一旦确认完成,执行:php /var/www/trigger/post_vstats.php /tmp/vstats_abc.log,由 PHP 解析日志提取耗时、帧数等信息。

今天关于《视频转码触发PHP执行方法详解》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>