You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用FFmpeg或PHP-FFmpeg 0.19.0实现视频与MP3音频合并及音频替换的技术咨询

使用FFmpeg或PHP-FFmpeg 0.19.0实现视频与MP3音频合并及音频替换的技术咨询

嘿,我来帮你搞定这个视频替换原有音频、和新MP3合并的需求!不管你是想用原生FFmpeg命令,还是PHP-FFmpeg 0.19.0库,你提到的两种时长匹配场景都能轻松实现,下面给你一步步拆解说明:

一、用原生FFmpeg命令实现

场景1:音频时长(8分钟)长于视频时长(22秒)——循环视频匹配音频

这种情况我们需要让视频无限循环播放,直到音频结束。FFmpeg的-stream_loop参数可以实现视频循环,再配合-shortest参数就能确保最终输出的时长和音频完全一致。

命令直接抄走用就行:

ffmpeg -stream_loop -1 -i input_video.mp4 -i input_audio.mp3 -c:v libx264 -c:a aac -shortest output_video.mp4

简单解释下关键参数:

  • -stream_loop -1:让输入的视频无限循环(-1代表无限次)
  • -c:v libx264和-c:a aac:用主流的H.264视频编码和AAC音频编码,保证输出的MP4文件兼容性拉满
  • -shortest:因为视频是无限循环的,所以最终输出时长会自动匹配音频的8分钟,完美贴合需求

场景2:音频时长(8分钟)短于视频时长(10分钟)——音频结束即停止输出

这个场景更简单,不需要循环视频,只需要让输出文件的时长和音频一致,同样用-shortest参数,它会自动截断视频到音频结束的时间点。

命令示例:

ffmpeg -i input_video.mp4 -i input_audio.mp3 -c:v libx264 -c:a aac -shortest output_video.mp4

这里-shortest会取输入中时长较短的那个(也就是8分钟的音频)作为输出时长,视频到8分钟的位置就会被截断,刚好和音频同步结束。

二、用PHP-FFmpeg 0.19.0实现

首先得确保你已经通过Composer正确安装并配置了PHP-FFmpeg库,下面分场景给出代码示例:

场景1:音频时长 > 视频时长——循环视频匹配音频

我们需要给视频添加循环参数,在PHP-FFmpeg里可以通过传递FFmpeg原生参数来实现:

require 'vendor/autoload.php';

use FFMpeg\FFMpeg;

// 初始化FFMpeg,替换成你服务器上的FFmpeg和FFprobe路径
$ffmpeg = FFMpeg::create([
    'ffmpeg.binaries'  => '/usr/bin/ffmpeg',
    'ffprobe.binaries' => '/usr/bin/ffprobe',
]);

// 打开视频和音频文件
$video = $ffmpeg->open('input_video.mp4');
$audio = $ffmpeg->open('input_audio.mp3');

// 合并时添加循环和shortest参数,让视频无限循环直到音频结束
$video->addAudio($audio)
    ->save(new FFMpeg\Format\Video\X264(), 'output_video.mp4', [
        '-stream_loop' => '-1',
        '-shortest' => '',
    ]);

场景2:音频时长 < 视频时长——音频结束即停止输出

这个场景只需要在合并时加上-shortest参数,就能自动截断视频到音频时长:

require 'vendor/autoload.php';

use FFMpeg\FFMpeg;

$ffmpeg = FFMpeg::create([
    'ffmpeg.binaries'  => '/usr/bin/ffmpeg',
    'ffprobe.binaries' => '/usr/bin/ffprobe',
]);

$video = $ffmpeg->open('input_video.mp4');
$audio = $ffmpeg->open('input_audio.mp3');

// 合并音频,用shortest参数确保输出时长和音频一致
$video->addAudio($audio)
    ->save(new FFMpeg\Format\Video\X264(), 'output_video.mp4', [
        '-shortest' => '',
    ]);

备注:内容来源于stack exchange,提问作者KubinParker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 13:58:09