能否向FFmpeg传入PHP文件以处理并输出视频?
解决方法
方法1:通过PHP CLI管道输出给FFmpeg
直接让PHP执行脚本并把输出通过管道传给FFmpeg,这是本地处理效率最高的方式:
php /path/to/your-video-script.php | ffmpeg -i pipe:0 -c copy output.mp4
关键注意事项:
- 你的PHP脚本必须输出纯视频二进制数据,不能包含任何额外内容(比如调试echo、PHP错误信息)。可以在脚本开头加上:
<?php error_reporting(0); // 关闭错误输出 ob_clean(); // 清空输出缓冲区 flush(); // 刷新缓冲区 // 这里写你的视频输出逻辑,比如读取视频文件后echo,或者生成视频流 readfile('/path/to/source-video.mp4'); ?> pipe:0告诉FFmpeg从标准输入读取视频流,后面的参数可以根据你的需求调整(比如转码、剪辑等)。
方法2:通过HTTP请求让FFmpeg获取PHP处理后的流
如果你的PHP脚本已经部署在Web服务器上(能通过URL访问并输出视频),可以直接让FFmpeg请求这个URL:
ffmpeg -i http://your-domain.com/your-video-script.php -c copy output.mp4
这种方式和你在浏览器访问PHP脚本获取视频的逻辑一致,Web服务器会先执行PHP脚本,再把输出的视频流返回给FFmpeg。
修复你的Bash脚本方案
如果你之前尝试的Bash脚本没成功,可能是写法或权限问题,正确的Bash脚本示例:
- 创建脚本
run-php-video.sh:
#!/bin/bash # 直接执行PHP脚本,确保路径正确 php /path/to/your-video-script.php
- 给脚本添加执行权限:
chmod +x run-php-video.sh
- 用管道或进程替换传给FFmpeg:
# 管道方式 ./run-php-video.sh | ffmpeg -i pipe:0 -c copy output.mp4 # 进程替换方式(部分Shell支持,比如Bash) ffmpeg -i <(./run-php-video.sh) -c copy output.mp4
排查要点
如果还是失败,检查:
- 单独执行
php /path/to/your-video-script.php > test.mp4,看生成的test.mp4是否能正常播放,排除PHP脚本输出问题。 - 确保FFmpeg支持你输出的视频格式,比如如果是自定义编码,可能需要指定解码器。
内容的提问来源于stack exchange,提问作者cantsay
相关产品推荐
相关产品推荐

