在 php 中通过 ffmpeg 命令将 avi 文件转换为 mp4 文件

Posted

技术标签:

【中文标题】在 php 中通过 ffmpeg 命令将 avi 文件转换为 mp4 文件【英文标题】:To convert from avi file to mp4 file by ffmpeg command in php 【发布时间】:2019-02-17 08:18:57 【问题描述】:

下面 php 中的 ffmpeg 命令从 avi 文件创建 mp4 文件,而不删除原始 avi 文件,这意味着,例如, 目录下毕竟有1221222.avi和1221222.mp4这两个文件。

('for i in /xxxxx/xxxxxx/*.avi; do ffmpeg -i "$i" -frames:v 1 "/xxxxx/xxxxxx/$(basename "$i" .avi).mp4";完成')

我想在命令创建 1221222.mp4 文件后立即删除这个 1221222.avi 文件。

是否有任何命令可以通过替换将文件从 avi 转换为 mp4?还是我必须在上面的命令之后添加删除命令?

如果有人可以帮助我完成命令,我将不胜感激。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

尽管下面的 php 脚本可以将 avi 文件从本地驱动器上传到我目前正在开发的应用程序,但 avi 不会以 html 格式播放。 所以,我试图从 avi 文件转换为 mp4 文件,通过在 php 中使用 ffmpeg 命令可以正常工作。此 ffmpeg 命令创建 mp4,但 html 仍然不播放它。是不是因为目录中还存在原来的avi文件?

//php
case "video/x-msvideo":

if($header)
    header("Content-Type: video/x-msvideo");

 $dst_im = copy($path, $dst_file);
 return "";
 else 

 $dst_file = $dst_file . ".avi";
 shell_exec('for i in  /xxxxxx/xxxxxx/*.avi; do ffmpeg -i "$i" - frames:v 1 "/xxxxxx/xxxxxx/$(basename "$i"  .avi).mp4"; done');      

 $dst_im = copy($path, $dst_file);
 
 unlink($dst_im);
 break; 


//html
<video     id="bgvid" poster="video.jpg"    controls="controls" preload="auto" autoplay>
<source type="video/mp4" src="xxxxxxxxxxxxxxxxxxxxx.mp4" />
</video>

【问题讨论】:

【参考方案1】:

没有这样的操作,你可以像这样追加一个bash命令

rm filename.mp4

到脚本或通过 php 删除文件

unlink($filepath);

【讨论】:

BlackNetworkBit 很抱歉造成混淆。我在上面添加了更多我这样做的原因。你能告诉我这种情况我应该怎么做吗? mp4 文件是否可以从服务器访问,如果您直接请求视频会发生什么?你在哪个浏览器下开发? 谢谢,BlackNetworkBit,我从服务器移动到本地,然后再次上传到应用程序后,从 avi 新创建的 mp4 以 html 播放。因此,如果我直接从 html 请求 mp4,则应该播放它。 我试过这个 unlink('/xxxxxxxxx/xxxxxxxxx/*.avi');就在 shell_exec 下,但它根本不会删除 avi 文件。对于rm filename.mp4,我还是不知道怎么用。你能告诉我如何使用它吗? 那么请出示您的 mp4 上传代码。谁是 mp4 文件的所有者? ls -a 是什么意思?

以上是关于在 php 中通过 ffmpeg 命令将 avi 文件转换为 mp4 文件的主要内容,如果未能解决你的问题,请参考以下文章

FFMPEG 如何将 MJPEG 编码数据复用到 mp4 或 avi 容器 c++

PHP 和 FFMPEG - 执行智能视频转换

如何在 Android 中通过 FFmpeg 解码音频

ffmpeg 将 avi 拆分为具有已知帧速率的帧

使用ffmpeg将.h264批量转换为.avi [重复]

使用FFmpeg将AVI容器转换为MOV容器