Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/FFMPEG-为什么我的视频转换会导致空文件?_Php_Video_Ffmpeg - Fatal编程技术网

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

PHP/FFMPEG-为什么我的视频转换会导致空文件?,php,video,ffmpeg,Php,Video,Ffmpeg,我正在尝试将服务器上的视频从.webm转换为.mp4 shell_exec('ffmpeg -i file.webm output.mp4'); 然而,这会导致MP40字节为空,有时甚至是非常奇怪的28字节。输入文件已存在,大小为45MB 建议显式复制输入编解码器,但结果相同 shell_exec('ffmpeg -i file.webm -vcodec copy -acodec-copy output.mp4'); 我做错了什么 [=======编辑=====] 在尝试了更多的东西之后,受

我正在尝试将服务器上的视频从.webm转换为.mp4

shell_exec('ffmpeg -i file.webm output.mp4');
然而,这会导致MP40字节为空,有时甚至是非常奇怪的28字节。输入文件已存在,大小为45MB

建议显式复制输入编解码器,但结果相同

shell_exec('ffmpeg -i file.webm -vcodec copy -acodec-copy output.mp4');
我做错了什么

[=======编辑=====]

在尝试了更多的东西之后,受这些评论的启发,我仍然不喜欢转换成MP4

看起来我正在运行FFMPEG v.2.8.15。这似乎比当前版本的4~要低很多,但是我只是在一周左右前安装的,所以我不知道为什么会出现这种情况,我不知道如何更新它,我在WHM Cpanel上

无论如何,我的问题与路径无关,因为如果我将.mp4更改为.webm,同样的命令也可以正常工作-我得到一个成功转换的.webm文件

但当我跑步时:

$foo = shell_exec('ffmpeg -i file.webm -vcodec copy -acodec copy output3.mp4 -report');
…我明白了

我也试过:

shell_exec('ffmpeg -fflags +genpts -i file.webm -r 24 KKK.mp4 -report');
…来自,以及

shell_exec'ffmpeg-i file.webm-c:v copy III.mp4'

…来自

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

问题 您正在尝试将VP9视频和Opus音频多路复用到MP4容器中。目前,将Opus复制到MP4容器中被认为是实验性的,需要-strict experional或-strict-2,但您的ffmpeg太旧,无法支持这一点

解决 不要将典型的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-experional或-strict-2 output选项(如果您知道希望在MP4中使用VP9+Opus):

ffmpeg -i input -c copy -strict experimental -movflags +faststart output.mp4
或者首先不要将多路复用器重新插入MP4。HTML5视频支持WebM中的VP9+Opus,因此,如果目标浏览器支持,只需使用原始文件即可


您需要显示ffmpeg命令中的完整日志。任何一个都可以。当您在没有shell_exec的终端上运行时,输出是什么?-acodec-copy not-acodec copy。最好确保您也有最新的ffmpeg,并使用更新的语法:-c:v copy-c:a copy抱歉,上面的输入错误:我会再试一次:-acodec copy not-acodec copy。最好确保您也有最新的ffmpeg并使用更新的语法:-c:v copy-c:a copy您可能需要指定文件的完整路径,也可能需要指定可执行文件。谢谢。我想升级FFMPEG,但我不知道如何升级,因为我对服务器管理知之甚少,而且我只能在WHM中执行操作,运行Centos 7时,我无法访问物理服务器。其次,我正在转换为MP4,因为Mac inc.iPhone上的Safari,所以我的想法是转换为第二种受支持的格式。另外,您在解决方案下给我的命令仍然产生了0字节的MP4:-FFMPEG日志说我需要实验;我打开了它,在命令中添加了-strict-2,我知道你说我的版本太旧了,不能使用实验版本,但我还是尝试了,得到了相同的结果-0字节,并抱怨我需要使用实验性。@Utkanos使用-strict-2/-strict-experiative并不是一个通用的包罗万象:当您尝试使用特定的实验性功能时,需要它。你遇到了两种不同的情况。旧的FFmpeg AAC编码器-c:AAC过去被认为是实验性的,因此旧的FFmpeg需要-strict-2来使用它。现代版本不需要-严格的编码器。您的旧ffmpeg不支持MP4中的Opus,但现代版本支持,但它们对此要求严格。谢谢,@LordNeckbeard。最后,在我的情况下,服务器noob是否可以直接更新我的ffmpeg版本?我已经看过了你链接的下载页面,我不知道我的服务器构建Centos 7应该点击哪个链接,也不知道我用它做了什么。我非常乐意去学习,我只需要一个kickstart来为我指明正确的方向。@Utkanos我会在你的文章中提供这个答案。这里的答案将专门针对MP4问题中的作品。