ffmpeg 进度条 - PHP 中的编码百分比

regexphp

1个回答

写回答

坨坨和萌萌

2025-06-18 16:05

+ 关注

php
php

使用FFmpeg库进行视频编码是一种常见的需求。在php中,我们可以通过调用FFmpeg的命令行工具来实现视频编码,并且可以通过解析输出信息来获取编码进度信息。本文将介绍如何在php中实现一个进度条来显示编码的百分比,并提供一个案例代码来帮助读者理解。

什么是FFmpeg?

FFmpeg是一个开源的音视频处理工具集,可以用来对音视频进行转码、剪辑、合并等操作。它提供了一系列的命令行工具,可以在不同的操作系统上运行。

获取编码进度信息

php中调用FFmpeg命令行工具进行视频编码时,可以通过解析命令行输出来获取编码的进度信息。一般来说,FFmpeg的输出信息中包含了当前编码的帧数和总帧数,我们可以根据这两个值来计算编码的百分比。

下面是一个示例代码,用来获取编码的进度信息:

php

$command = 'ffmpeg -i input.mp4 output.mp4';

$descriptorspec = array(

array('pipe', 'r'), // 标准输入

array('pipe', 'w'), // 标准输出

array('pipe', 'w') // 错误输出

);

$process = proc_open($command, $descriptorspec, $pipes);

if (is_resource($process)) {

while (!feof($pipes[1])) {

$output = fgets($pipes[1]);

// 解析输出信息,获取当前编码的帧数和总帧数

if (preg_match('/frame=([0-9]+).*fps=.*size=.*time=.*bitrate=.*speed=/', $output, $matches)) {

$currentFrame = $matches[1];

$TotalFrame = 1000; // 假设总帧数为1000

$percentage = round($currentFrame / $TotalFrame * 100, 2);

// 输出编码进度条

echo "Encoding progress: {$percentage}%\n";

}

}

fclose($pipes[0]);

fclose($pipes[1]);

fclose($pipes[2]);

proc_close($process);

}

实现编码进度条

为了更直观地显示编码进度,我们可以使用进度条来代替简单的百分比数字。下面是一个示例代码,用来实现一个简单的编码进度条:

php

function drawProgressBar($percentage, $barWidth = 50) {

$filledWidth = round($percentage / 100 * $barWidth);

$emptyWidth = $barWidth - $filledWidth;

echo "[" . str_repeat("=", $filledWidth) . str_repeat(" ", $emptyWidth) . "] {$percentage}%\r";

}

$command = 'ffmpeg -i input.mp4 output.mp4';

$descriptorspec = array(

array('pipe', 'r'), // 标准输入

array('pipe', 'w'), // 标准输出

array('pipe', 'w') // 错误输出

);

$process = proc_open($command, $descriptorspec, $pipes);

if (is_resource($process)) {

while (!feof($pipes[1])) {

$output = fgets($pipes[1]);

// 解析输出信息,获取当前编码的帧数和总帧数

if (preg_match('/frame=([0-9]+).*fps=.*size=.*time=.*bitrate=.*speed=/', $output, $matches)) {

$currentFrame = $matches[1];

$TotalFrame = 1000; // 假设总帧数为1000

$percentage = round($currentFrame / $TotalFrame * 100, 2);

// 输出编码进度条

drawProgressBar($percentage);

}

}

fclose($pipes[0]);

fclose($pipes[1]);

fclose($pipes[2]);

proc_close($process);

}

通过解析FFmpeg的命令行输出,我们可以获取到视频编码的进度信息,并且可以通过进度条来直观地显示编码的百分比。在php中,可以使用proc_open函数来调用FFmpeg命令行工具,并通过解析输出信息来获取编码进度。本文提供了一个简单的示例代码,读者可以根据自己的需求进行修改和扩展。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号