【问题标题】:PHP - Converting images to video using ffmpegPHP - 使用 ffmpeg 将图像转换为视频
【发布时间】:2013-11-08 17:08:17
【问题描述】:

我擅长 php,但对 ffmpeg 和 exec 的东西很陌生。现在我已经通过 ssh 成功安装了 ffmpeg。我参考了一些 stackoverflow here 并找到了下面的代码来使用多个图像制作视频。

<?php

echo exec('ffmpeg -f image2 -i image%d.jpg video.mpg');

?>

我在同一个文件夹中有 image1.jpg 和 image2.jpg。我运行了这个 php 代码,但没有发生任何事情...... video.mpg 保存在哪里?以及如何检查 exec 函数是否成功运行或如何调试它?感谢任何帮助。

【问题讨论】:

  • 您可以从手册开始:php.net/manual/en/function.exec.php
  • 是的,我读到了,我运行命令 ffmpeg -f image2 -i image%d.jpg video.mpg ...但是如何知道它是否成功

标签: php video ffmpeg


【解决方案1】:

如果成功,video.mpg 会保存在您当前的工作目录中。如果需要,您可以将文件名更改为绝对路径。

要检查exec() 函数是否成功运行,您可以传递第三个参数来获取退出状态:

exec('ffmpeg -f image2 -i image%d.jpg video.mpg', $output, $exit_status);

如果成功,$exit_status 将得到0 值,所以:

if ($exit_status === 0) {
    // ran fine
} else {
    // failed...
}

如果失败,您可能希望在$output 上得到错误。您可以将STDERR 移动到STDOUT 忽略原来的STDOUT 这样:

exec('ffmpeg -f image2 -i image%d.jpg video.mpg 2>&1 >/dev/null', $output, $exit_status);

然后你可以转储$output 看看你在STDERR 上得到了什么:

if ($exit_status !== 0) {
    print implode("\n", $output);
}

如果 video.mpg 文件已经存在,命令会卡住,您可能需要将 -y 标志传递给 ffmpeg 以覆盖任何现有文件:

exec('ffmpeg -y -f image2 -i image%d.jpg video.mpg 2>&1 >/dev/null', $output, $exit_status);

【讨论】:

  • 我已经通过一些示例改进了我的答案...尝试system() 版本,然后var_dump($exit_status, $output); 看看发生了什么。 :)
  • 嘿真棒:) +1,我通过调试修复了错误:) 非常感谢
  • @Vishnu 不客气!我为您可能会遇到的 file existing 问题添加了进一步的说明。 :)
猜你喜欢
  • 2014-03-02
  • 2017-02-26
  • 2017-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-14
相关资源
最近更新 更多