我正在尝试将我服务器上的视频从 .webm 转换为 .mp4。
shell_exec('ffmpeg -i file.webm output.mp4');
但是,这会导致一个空的 mp4(0 字节 - 或者,有时,非常奇怪的是,28 字节。)输入文件存在,并且是 45MB。
This answer建议显式复制输入编解码器,但结果相同。
shell_exec('ffmpeg -i file.webm -vcodec copy -acodec-copy output.mp4');
我究竟做错了什么?
[ ===== 编辑 ===== ]
在尝试了更多的东西之后,受到评论的启发,我仍然没有高兴地转换为 MP4。
看来我正在运行 FFMPEG v.2.8.15。这似乎比当前版本的 4~ 低了很多,但是我大约一周前才安装了这个,所以我不确定为什么会这样,我不知道如何更新它(我在WHM 面板。)
无论如何,我的问题与路径无关,因为如果我将 .mp4 更改为 .webm,相同的命令可以正常工作 - 我得到一个成功转换的 .webm 文件。
但是当我运行时:
$foo = shell_exec('ffmpeg -i file.webm -vcodec copy -acodec copy output3.mp4 -report');
...我得到 this FFMPEG log output .
我也试过:
shell_exec('ffmpeg -fflags +genpts -i file.webm -r 24 KKK.mp4 -report');
...来自 this answer , 和
shell_exec('ffmpeg -i file.webm -c:v copy III.mp4');
...来自 this article .
两者都会导致相同的问题,即 0 字节的 .mp4 文件。
最佳答案
问题
您正在尝试将 VP9 视频和 Opus 音频混合到 MP4 容器中。目前,将 Opus 混合到 MP4 容器中被认为是实验性的,需要 -strict experimental
(或 -strict -2
),但您的 ffmpeg
太旧了,无法支持。 Download a new version .
解决方案
ffmpeg -i input -c:v libx264 -c:a aac -movflags +faststart output.mp4
ffmpeg
并添加 -strict experimental
(或 -strict -2
)输出选项到你的命令,如果你知道你想要 MP4 中的 VP9 + Opus:ffmpeg -i input -c copy -strict experimental -movflags +faststart output.mp4
关于PHP/FFMPEG - 为什么我的视频转换会导致空文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53090946/