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

FFmpeg转换iPhone MOV视频为MP4无音频及AAC编码报错如何解决?

问题解决方法

第一步:定位错误原因

你当前的转换逻辑存在两个直接导致输出无音频的问题:

  • ffmpeg命令中重复添加了-an参数:该参数的作用是禁用音频流输出,无论后续如何配置音频编码器都不会生成音频轨道,需要首先删除所有命令中的-an参数
  • 缺少aac编码器启用参数:你运行测试命令时的报错已经明确说明,ffmpeg默认自带的aac编码器属于实验性编码器,默认未启用,需要添加-strict -2参数开启,或者替换为非实验性的libfdk_aac编码器

第二步:修改process.php中的转换代码

MP4转换命令调整(两种方案二选一)

方案1:使用自带aac编码器,添加启用参数

// MP4 转换命令修改后
exec($ffmpeg . ' -i "' . $uploaded_file . '" -vcodec h264 -acodec aac -strict -2 "./converted/' . $video_mp4 . '" -y 1>convert.txt 2>&1', $output, $convert_status['mp4']);

方案2:如果服务器已安装libfdk_aac编码器,推荐使用该更稳定的版本,无需加启用参数

exec($ffmpeg . ' -i "' . $uploaded_file . '" -vcodec h264 -acodec libfdk_aac "./converted/' . $video_mp4 . '" -y 1>convert.txt 2>&1', $output, $convert_status['mp4']);

WebM转换命令调整

删除命令中的-an参数即可:

// WebM 转换命令修改后
exec($ffmpeg . ' -i "' . $uploaded_file . '" -c:v libvpx -c:a libvorbis "./converted/' . $video_webm . '" -y 1>convert.txt 2>&1', $output, $convert_status['webm']);

可选优化建议

当前文件名截取逻辑存在缺陷:如果上传的文件名包含多个英文点(例如winter.vacation.mov),使用explode('.', $file_name)[0]只会截取到第一个点之前的内容,导致输出文件名错误,建议替换为pathinfo方法获取纯文件名:

// 替换原来的$output_name赋值代码
$output_name = pathinfo($file_name, PATHINFO_FILENAME);

内容的提问来源于stack exchange,提问作者John Adams

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:54:05