PHP / FFMPEG-为什么我的视频转换结果为空文件?

时间:2018-10-31 19:48:31

标签: 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复制III.mp4');

...来自this article

两者都会导致相同的问题,即0字节的.mp4文件。

1 个答案:

答案 0 :(得分:1)

问题

您正在尝试将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,因此,如果目标浏览器支持原始文件,则只需使用原始文件即可。