1

我有一个简单的网站,人们可以在上面上传视频,所以我想从上传的视频中生成一个简单的缩略图。我已经尝试了许多网站的所有技巧和方法来做到这一点,但我无法让命令运行没有问题。

$video = $_FILES['vpopupdropin']["tmp_name"];
    $ffmpeg = "C:\\Ffmpeg\\ffmpeg-20130605-git-3289670-win64-static\\bin";
    $image = "manu.jpg";
    $second = 12;
    $size = "150x90";
$command = "$ffmpeg -i $video -an -ss $second -s $size -vcodec mjpeg      $image";
echo $command;
    shell_exec($command);

    if(shell_exec($command)){
        echo 'okay';
        echo '<img src="'.$image.'"/ >';
        }

    else{
        echo ' Problem';
        }

我回应了 PHP 的命令,这就是我得到的: C:\Ffmpeg\ffmpeg-20130605-git-3289670-win64-static\bin -i C:\xampp\tmp\php27F1.tmp -an -ss 12 - s 150x90 -vcodec mjpeg manu.jpg 问题

所以我拿了上面的命令并在 Cmd 中输入它并得到这个错误

[image2 @ 00000000000000003d87580] 无法打开文件:manu.jpg av_interleaved_write_frame():输入/输出错误。上传的文件可以很好地传输到我保存它的位置,并且可以在网站上正常播放,这意味着文件没有损坏。但缩略图命令似乎失败了,我什至检查了这个网站上的其他问题,但我似乎没有得到正确的解决方案。命令中的路径是正确的,我已经验证至少

4

1 回答 1

3

你没有给 ffmpeg 一个名字:-) 所以你试图执行一个\\bin文件夹!

$ffmpeg = "C:\\Ffmpeg\\ffmpeg-20130605-git-3289670-win64-static\\bin";

你忘了 ffmpeg.exe

$ffmpeg = "C:\\Ffmpeg\\ffmpeg-20130605-git-3289670-win64-static\\bin\\ffmpeg";

我使用以下命令为 .avi 执行此操作

ffmpeg -i Echo2012.avi -r 1 -s 1024x576 -f image2 -vframes 1 foo-001.jpg

不要执行你的命令两次!

$command = "$ffmpeg -i $video -an -ss $second -s $size -vcodec mjpeg      $image";
echo $command;
shell_exec($command);

    if(shell_exec($command)){

编辑 :

你的命令字符串:

ffmpeg -i upload.tmp -an -ss 12 -s 150x90 -vcodec mjpeg     manu.jpg
  • -vcodec 编解码器(输出):设置视频输出编解码器。这是一个输出视频的开关。您想要输出图像。
  • -an :您可以禁用音频流。图像不需要音频。
  • -ss : 位置(输入/输出)当用作输入选项时(在 -i 之前),在此输入文件中寻找位置。

我的命令字符串:

ffmpeg -i Echo2012.avi -r 1 -s 1024x576 -f image2 -vframes 1 foo-001.jpg
  • -r:fps(输入/输出,每个流)。设置帧速率(Hz 值、分数或缩写)。
    作为输入选项,忽略文件中存储的任何时间戳,而是在假设帧速率 fps 不变的情况下生成时间戳。
  • -f image2:强制输出文件格式image2。该格式通常是从输出文件的文件扩展名中自动检测到的。
  • -vframes number(输出):设置要录制的视频帧数。
于 2013-06-18T22:05:28.127 回答