PHP/FFMPEG - 为什么我的视频转换会导致空文件?

标签 php video ffmpeg

我正在尝试将我服务器上的视频从 .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 .

解决方案

  • 不要将典型的 WebM 格式(VP9 或 VP8 + Opus 或 Vorbis)混合到 MP4 中。如果您想要一组更常见的 MP4 格式,您可以使用 AAC 音频将其重新编码为 H.264(或 H.265):
    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
    
  • 或者不要一开始就重新混入 MP4。 HTML5 视频在 WebM 中支持 VP9 + Opus,因此如果您的目标浏览器支持,请使用原始文件。
  • 关于PHP/FFMPEG - 为什么我的视频转换会导致空文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53090946/

    相关文章:

    php - 使用 zend db 插入 .. select from ..

    audio - 比特率在视频/音频文件中到底意味着什么?

    audio - 渲染动画(视频)时,Blender VSE 音频不同步

    php - Paypal webhooks 到达服务器,但值为空

    php - 如何自动刷新有错误的 HTML 页面?

    php - 我需要在mysql中删除之前选择吗? :

    javascript - 使用javascript在特定时间间隔播放视频并发布消息

    python - pyAV 的 pip 安装失败,退出状态为 1181

    ffmpeg - 输入文本文件中的持续时间使用

    linux - ffprobe如何确定持续时间?