在php中获取ffmpeg中的音频持续时间

A.B*_*per 1 php ffmpeg laravel

我正在使用PHP-FFMpeg库来处理音频和视频文件.

我知道要获得特定视频的持续时间可以这样:

$ffprobe    = \FFMpeg\FFProbe::create();
$duration   = $ffprobe->format('path/to/file')->get('duration');
Run Code Online (Sandbox Code Playgroud)

但我知道如何为给定的音频文件执行此操作.

有人知道解决方案吗?

小智 5

对于音频和视频,它的工作方式应该完全相同.

例如这段代码:

$ffprobe    = \FFMpeg\FFProbe::create();
$durationMp3   = $ffprobe->format('test.mp3')->get('duration');
$durationFlac   = $ffprobe->format('test.flac')->get('duration');

echo "$durationMp3\n";
echo "$durationFlac\n";
Run Code Online (Sandbox Code Playgroud)

输出mp3和FLAC格式的持续时间(以秒为单位):

255.477551
255.477551
Run Code Online (Sandbox Code Playgroud)

您的音频文件是否可能未正确编码,因此ffm​​peg本身无法识别?

您可以尝试运行cli命令:

ffmpeg -i test.mp3 2>&1 | grep Duration | awk '{print $2}' | tr -d ,
Run Code Online (Sandbox Code Playgroud)

对于它产生的相同test.mp3

00:04:15.48
Run Code Online (Sandbox Code Playgroud)

这与php代码生成的255.48秒相同

如果直接运行ffmpeg不会产生任何有用的东西,那么问题在于音频文件本身.然后,您可以修复文件或使用其他(正确编码的)文件进行测试.