我正在尝试将服务器上的视频从.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文件。
答案 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,因此,如果目标浏览器支持原始文件,则只需使用原始文件即可。