PHP调用FFmpeg实现视频切片
注:使用的视频为mp4,转换成.m3u8播放列表和.ts切片文件
1、安装FFmpeg
我这边是通过Nux Dextop仓库来安装FFmpeg。
(1) 安装EPEL仓库
(2)下载并安装Nux Dextop仓库的RPM包
(3)更新YUM缓存
(4) 安装FFmpeg
(5)验证安装
2、安装PHP
验证安装
3、php脚本
<?php
// 设置输入视频文件、切片时长(秒)和输出目录
$videoFile = '/data/video/input.mp4'; // 输入视频文件路径
$segmentDuration = 10; // 切片时长,单位:秒
$outputDir = 'output'; // 输出目录
// 确保输出目录存在
if (!is_dir($outputDir)) {
mkdir($outputDir, 0777, true);
}
// 构建并执行FFmpeg命令以生成.m3u8播放列表和.ts切片文件
// 使用'-strict -2'参数允许使用实验性编码器'aac'
$cmd = "ffmpeg -i " . escapeshellarg($videoFile) .
" -codec:v libx264 -codec:a aac -strict -2 -hls_time " . escapeshellarg($segmentDuration) .
" -hls_list_size 0 -hls_flags delete_segments " . escapeshellarg($outputDir . "/output.m3u8");
// 或者,如果您有 'libfdk_aac' 可用,可以替换 '-codec:a aac -strict -2' 为 '-codec:a libfdk_aac'
// $cmd = "ffmpeg -i " . escapeshellarg($videoFile) .
// " -codec:v libx264 -codec:a libfdk_aac -hls_time " . escapeshellarg($segmentDuration) .
// " -hls_list_size 0 -hls_flags delete_segments " . escapeshellarg($outputDir . "/output.m3u8");
shell_exec($cmd);
// 设置目标目录
$targetDir = 'target_dir';
if (!is_dir($targetDir)) {
mkdir($targetDir, 0777, true);
}
// 检查.m3u8文件是否存在
$playlistFile = $outputDir . '/output.m3u8';
if(file_exists($playlistFile)){
// 复制.m3u8播放列表文件
copy($playlistFile, $targetDir . '/output.m3u8');
// 获取所有.ts切片文件,并将其复制到目标目录
$tsFiles = glob($outputDir . '/*.ts');
foreach ($tsFiles as $tsFile) {
copy($tsFile, $targetDir . '/' . basename($tsFile));
}
echo "视频切片及文件复制操作完成。\n";
} else {
echo "FFmpeg处理失败,未找到输出文件。\n";
}
?>4、创建目录(/data)
视频目录:/data/video
php脚本目录:/data 脚本名称:slice_video.php
5、执行脚本
6、生成的切片文件夹
7、安装Nginx
(1)安装
(2)启动 Nginx
(3) 检查 Nginx 状态
(4)关闭防火墙
(5)nginx.conf文件配置
文件位置:/etc/nginx/nginx.conf
sudo nginx -t # 测试配置文件语法是否正确
sudo systemctl reload nginx # 重新加载 Nginx使配置生效
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
server_name 192.168.126.129;
location /hls/ {
alias /data/target_dir/; # 替换为你的实际目录路径
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
add_header 'Cache-Control' 'no-cache';
add_header 'Access-Control-Allow-Origin' '*';
}
}
}栏 目:PHP编程
下一篇:PHP究竟是不是运行在浏览器端的编程语言?其工作原理是什么?
本文标题:PHP调用FFmpeg实现视频切片
本文地址:https://www.fushidao.cc/wangluobiancheng/23814.html
您可能感兴趣的文章
- 01-22如何实现PHP编程中九九乘法表的倒序显示?
- 01-22如何通过PHP编程在网页中灵活输出不同尺寸的字体样式?
- 01-22php编程第3版pdf 百度云盘免费获取?版本更新内容有何不同?
- 01-22为何PHP编程仅限与MySQL数据库联合,其他数据库呢?
- 01-22PHP究竟有何独特之处,使其成为网页开发首选编程语言?
- 01-22如何利用PHP编程高效实现学生信息管理系统的开发与应用?
- 01-22PHP编程语言在众多网站中究竟占据怎样的使用比例和地位?
- 01-22在PHP编程中如何高效求解2的10次方等于多少?
- 01-22PHP编程基础与实例教程,期末考试如何应对?技巧解析与复习指南
- 01-22PHP如何实现小写字母转大写的完整编程示例及疑问?
阅读排行
推荐教程
- 07-25PHP建立MySQL与MySQLi持久化连接(长连接)区别
- 07-25PHP WindSearch实现站内搜索功能
- 07-25PHP调用FFmpeg实现视频切片
- 01-21PHP编程如何巧妙实现九九乘法表?分享编程技巧与代码细节!
- 11-23PHP 7安装使用体验之性能大提升,兼容性强,扩展支
- 01-22php编程一元二次方程如何用一元二次方程在php中求解?详细教程分享!
- 11-22PHP自定义函数判断是否为Get、Post及Ajax提交的方法
- 01-22PHP编程如何高效接收文件并安全保存至数据库中?
- 01-22PHP编程挑战,如何编写代码计算从1到1100所有奇数的和?
- 01-22php编程第3版pdf 百度云盘免费获取?版本更新内容有何不同?



