ffmpeg响度不返回任何文件

时间:2019-03-01 17:51:11

标签: php ffmpeg

我正在使用Aruba.it管理的共享服务器 它使用

ffmpeg version 4.1
built with gcc 4.8.5
(GCC) 20150623
(Red Hat 4.8.5-36)

我需要使用ffmpeg将任何上传的MP3的响度固定为-12 dB LUFS -1 dB TP

我在互联网上发现以下命令,但未生成任何输出。mp3

PHP

exec("/usr/bin/ffmpeg -i Temp.mp3 -af loudnorm=I=-12:LRA=7:tp=-2:measured_I=-30:measured_LRA=1.1:measured_tp=-11 04:measured_thresh=-40.21:offset=-0.47 -y output.mp3");

请问我在哪里错了?

编辑 没有返回任何错误。

3 个答案:

答案 0 :(得分:1)

如果您手动运行它,并且没有在终端中编写脚本,则会出现错误:

Unable to find a suitable output format for '04:measured_thresh=-40.21:offset=-0.47'
04:measured_thresh=-40.21:offset=-0.47: Invalid argument

您的命令中有错误的空格,因此请将measured_tp=-11 04更改为measured_tp=-11.04

答案 1 :(得分:1)

根据@llogan的建议,我找到了解决方案。 它应该分三步进行,而不仅仅是一步。 就我而言,MP3到MP3无效。 所以我将输入的MP3转换为wave,对其进行归一化,然后转换回MP3

exec("/usr/bin/ffmpeg -i Temp.mp3 Temp.wav");
exec("/usr/bin/ffmpeg -i Temp.wav -af loudnorm=I=-12:LRA=7:tp=-2:measured_I=-30:measured_LRA=1.1:measured_tp=-11.04:measured_thresh=-40.21:offset=-0.47 output.wav");
exec("/usr/bin/ffmpeg -i output.wav -ab 320k output.mp3");

此解决方案效果很好

答案 2 :(得分:0)

shell_exeexec配合使用:

$output = shell_exec('/usr/bin/ffmpeg -i Temp.mp3 -af loudnorm=I=-12:LRA=7:tp=-2:measured_I=-30:measured_LRA=1.1:measured_tp=-11 04:measured_thresh=-40.21:offset=-0.47 -y output.mp 2>&1');

2 refers to the second file descriptor of the process, i.e. stderr.

> means redirection.

&1 means the target of the redirection should be the same location as the first file descriptor, i.e. stdout.

您将在$output中得到答复。如果apache用户www-data没有足够的权限,请以sudo

的身份执行命令。