thinkphp6 使用ffmpeg查看视频时间和编码信息 并转码ts切成m3u8 详细代码
时间: 2023-11-22 16:53:26 浏览: 118
基于Java+ffmpeg的将视频切成多份TS的m3u8程序源码+说明.tar
下面是使用ffmpeg查看视频时间和编码信息并转码ts切成m3u8的示例代码:
```php
use think\facade\Filesystem;
// 视频文件路径
$videoPath = '/path/to/video.mp4';
// 获取视频时长和编码信息
$cmd = "ffmpeg -i $videoPath 2>&1";
exec($cmd, $output);
$duration = 0;
$codec = '';
foreach ($output as $line) {
if (preg_match('/Duration: ([\d:\.]+),/', $line, $matches)) {
$duration = strtotime("1970-01-01 $matches[1] UTC");
}
if (preg_match('/Video: (.+?),/', $line, $matches)) {
$codec = $matches[1];
}
}
// 转码ts并切成m3u8
$dirPath = '/path/to/output';
Filesystem::mkdir($dirPath);
$outputPath = $dirPath . '/output.m3u8';
$cmd = "ffmpeg -i $videoPath -codec:v $codec -map 0 -f segment -segment_list $outputPath -segment_time 10 $dirPath/%03d.ts";
exec($cmd);
```
首先,我们使用`ffmpeg`命令获取视频的时长和编码信息。在命令中,`-i`参数表示输入文件,`2>&1`表示将标准错误输出重定向到标准输出。然后通过正则表达式解析输出内容获取时长和编码信息。
接着,我们使用`ffmpeg`命令将视频转码成ts格式,并将其切成长度为10秒的小段。`-codec:v`参数表示选择视频编码器,`-map 0`参数表示将所有流映射到输出,`-f segment`参数表示使用分段输出,`-segment_list`参数表示输出m3u8文件路径,`-segment_time`参数表示每个小段的时长,`%03d.ts`表示小段文件名的格式。
最后,我们使用`Filesystem`组件创建输出目录,然后执行`ffmpeg`命令将视频转码并切成小段,输出m3u8文件和ts小段文件。
阅读全文