使用 PHP 库合并 FFMPEG 音频



我一直在使用FFMPEG,仍然是初学者,但我学到了很多东西。

所以我必须合并 2 个音频,一个属于视频,一个只是一个.mp3文件。 我得到了正确的shell可执行文件,但现在我想使用FFMPEG php库。

这是正确的(我认为(和有效的 shell 命令:

/usr/bin/ffmpeg -y -i video-short.mp4 -i audio-short.mp3 -filter_complex "[0:a][1:a]amerge=inputs=2 [a]" -map 0:v -map "[a]" -c:v copy -c:a aac -ac 2 -b:a 128k video3-audio-output.mp4

这将输出一个带有 2 个音频的视频。

在我制作了 php 代码并编辑了一些输出的代码以便脚本工作后,我得到了这个想法。 这是 php 代码,我似乎无法弄清楚如何返回正确的 shell。

$video = $this->ffmpeg->openAdvanced([
'video-short.mp4',
'audio-short.mp3'
]);
$video
->filters()
->custom('[0:a][1:a]', 'amerge=inputs=', '2[a]' );
$video
->map(array('0:v', '"[a]"'), new X264('aac'),
'video3-audio-output.mp4'
)
->save();

现在我需要让代码返回一些像 shell 这样确实有效的东西,我已经尝试了很多小时。

这是我的 php 返回的内容,它给出了编码错误,加上

No channel layout for input 1

/usr/bin/ffmpeg -y -i video-short.mp4 -i audio-short.mp3 -filter_complex [0:a][1:a]amerge=inputs=2[a] -map 0:v -map "[a]" -vcodec libx264 -acodec aac -b:a 128k video3-audio-output.mp4

(编辑( 所以我在FFMpeg\Format\Video\X264 getAvaiableVideoCodecs((中添加了"Copy"。

如果我将"复制"添加到新的 X264("aac"、"复制"(它确实会转储正确的 Shell 命令,但它仍然在"编码失败"时崩溃

我找到了解决方案,这可能是一个常见问题。

所以你需要将"copy"添加到FFMpeg\Format\Video\X264 getAvaiableVideoCodecs((。

但是不是"amerge",由于某种原因,它不会合并前端中的给定音频文件并返回编码失败。我们使用混合。

使用混合。下面是一个示例,说明代码在工作时的外观。

$video = $this->ffmpeg->openAdvanced(array(
'videoplayback.mp4',
'audio-short.mp3'
));
$video
->filters()
->custom('[0:a][1:a]', 'amix=inputs=', '2[a]' );
$video
->map(array('0:v', '[a]'), new X264('aac', 'copy'),
'video3-audio-output.mp4'
)
->save();

这可以在未来帮助人们。

最新更新