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://fushidao.cc/wangluobiancheng/23814.html
您可能感兴趣的文章
- 03-07PHP多线程为何重要?有哪些挑战和解决方案?
- 03-07PHP和Python哪个好,哪个更适合项目开发?
- 03-06PHP服务器编程核心原理是什么,如何掌握应用技巧?
- 03-06PHP高级编程下载为何如此热门?哪里有免费资源?
- 03-06PHP接口编程如何掌握?高效开发技巧有哪些?
- 03-05PHP常见安全漏洞有哪些,PHP编程安全漏洞怎么防范
- 03-02PHP编程器为何受欢迎?有哪些独特优势与应用
- 02-28PHP编程教程新手如何快速掌握?,PHP入门基础教程怎么学?
- 02-28PHP编程领域当前面临的最大挑战与未来发展趋势?PHP有前途吗
- 02-28PHP网络编程如何实现高效安全,网络通信怎么做?
阅读排行
推荐教程
- 07-25PHP建立MySQL与MySQLi持久化连接(长连接)区别
- 07-25PHP WindSearch实现站内搜索功能
- 07-25PHP调用FFmpeg实现视频切片
- 02-01PHP编程用什么软件?资深开发者为你揭秘最佳工具组合
- 01-23重庆哪里能找到专业的PHP编程培训班?推荐哪家比较好?
- 01-23如何通过PHP编程实现从文本框输入并处理整数的完整代码示例?
- 01-21PHP编程如何巧妙实现九九乘法表?分享编程技巧与代码细节!
- 11-23PHP 7安装使用体验之性能大提升,兼容性强,扩展支
- 01-28php编程第3版pdf中,有哪些新特性或更新让我不得不重新学习?
- 02-22PHP编程架构原理,如何深入理解其应用与实际开发中的应用场景?



