ffmpeg-php创建视频的缩略图 [英] ffmpeg-php to create thumbnail of video

查看:78
本文介绍了ffmpeg-php创建视频的缩略图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用此脚本使用 ffmpeg 创建视频的缩略图。起初我使用 phpinfo(); ,我发现ffmpeg安装在我的服务器上。

I am trying to use this script to create thumbnail of a video using ffmpeg. At first I used phpinfo(); and I found ffmpeg is installed on my server.

然后我复制了 ffmpeg-php 到我的服务器并运行测试文件

Then I copied ffmpeg-php onto my server and run the test file

我知道许多功能都在我的服务器上工作

I got to know that many function are working on my server

我得到这样的输出

输出: -

Functions available in /usr/lib/php/extensions/no-debug-non-zts-20060613/ffmpeg.so extension:

Methods available in class ffmpeg_movie:
__construct
getduration
getframecount
getframerate
getfilename
getcomment
gettitle
getauthor
getartist
getcopyright
getalbum
getgenre
getyear
gettracknumber
getframewidth
getframeheight
getframenumber
getpixelformat
getbitrate
hasaudio
hasvideo
getnextkeyframe
getframe
getvideocodec
getaudiocodec
getvideostreamid
getaudiostreamid
getaudiochannels
getaudiosamplerate
getaudiobitrate
getvideobitrate
getpixelaspectratio
getpixelaspectratio
getvideobitrate
getaudiobitrate
getaudiosamplerate
getaudiochannels
getaudiostreamid
getvideostreamid
getaudiocodec
getvideocodec
getframe
getnextkeyframe
hasvideo
hasaudio
getbitrate
getpixelformat
getframenumber
getframeheight
getframewidth
gettracknumber
getyear
getgenre
getalbum
getcopyright
getartist
getauthor
gettitle
getcomment
getfilename
getframerate
getframecount
getduration
__construct

我写了这段代码,并尝试了任何可能的路径来分配 $ ffmpeg;

I wrote this code and tried any possible path to assign $ffmpeg;

<?php

    $thumb_stdout;
    $retval=0;
    $ffmpeg = '/home/lib/ffmpeg';

// change "demo.mpg" to your mpg file name!
$video  = dirname(__FILE__) . 'demo.mpg';

// change "demo.jpg" to whichever name you like or don't
// for this example, the name of the output jpg file does not matter
$image  = dirname(__FILE__) . 'demo.jpg';

$second = 1;

$cmd = "$ffmpeg -i $video 2>&1";
if (preg_match('/Duration: ((\d+):(\d+):(\d+))/s', '$cmd', $time)) {
    $total = ($time[2] * 3600) + ($time[3] * 60) + $time[4];
    $second = rand(1, ($total - 1));
}

//$cmd = "$ffmpeg -i $video -deinterlace -an -ss $second -t 00:00:01 -r 1 -y -vcodec mjpeg -f mjpeg $image 2>&1";
$cmd = "$ffmpeg -i $video -r 1 -ss 00:00:05 -t 00:00:01 -s 250x250 -f image2 $image";
echo $cmd;
exec($cmd);
//$return = '$cmd';

echo '<br>done!';
?>


推荐答案

最后我得到代码感谢 。您的链接帮助很多。尝试此代码。

At last I got the code thanks to Anubhaw.Your link helped lot.Try this code.

            //thumb path should be added in the below code
            //test for thumb
            $dir_img='uploads/';
            $mediapath='123.jpg';
            $file_thumb=create_movie_thumb($dir_img.$mediapath,$mediapath,$mediaid);

            $name_file=explode(".",$mediapath);
            $imgname="thumb_".$name_file[0].".jpg";     

            /*
              Function to create video thumbnail using ffmpeg
            */
            function create_movie_thumb($src_file,$mediapath,$mediaid)
            {
                global $CONFIG, $ERROR;

                $CONFIG['ffmpeg_path'] = '/usr/local/bin/'; // Change the path according to your server.
                $dir_img='uploads/';
                $CONFIG['fullpath'] = $dir_img."thumbs/";

                $src_file = $src_file;
                $name_file=explode(".",$mediapath);
                $imgname="thumb_".$name_file[0].".jpg";
                $dest_file = $CONFIG['fullpath'].$imgname;

                if (preg_match("#[A-Z]:|\\\\#Ai", __FILE__)) {
                    // get the basedir, remove '/include'
                    $cur_dir = substr(dirname(__FILE__), 0, -8);
                    $src_file = '"' . $cur_dir . '\\' . strtr($src_file, '/', '\\') . '"';
                    $ff_dest_file = '"' . $cur_dir . '\\' . strtr($dest_file, '/', '\\') . '"';
                } else {
                    $src_file = escapeshellarg($src_file);
                    $ff_dest_file = escapeshellarg($dest_file);
                }

                $output = array();

                if (eregi("win",$_ENV['OS'])) {
                    // Command to create video thumb
                    $cmd = "\"".str_replace("\\","/", $CONFIG['ffmpeg_path'])."ffmpeg\" -i ".str_replace("\\","/" ,$src_file )." -an -ss 00:00:05 -r 1 -vframes 1 -y ".str_replace("\\","/" ,$ff_dest_file);
                    exec ("\"$cmd\"", $output, $retval);

                } else {
                    // Command to create video thumb
                    $cmd = "{$CONFIG['ffmpeg_path']}ffmpeg -i $src_file -an -ss 00:00:05 -r 1 -vframes 1 -y $ff_dest_file";
                    exec ($cmd, $output, $retval);

                }


                if ($retval) {
                    $ERROR = "Error executing FFmpeg - Return value: $retval";
                    if ($CONFIG['debug_mode']) {
                        // Re-execute the command with the backtick operator in order to get all outputs
                        // will not work if safe mode is enabled
                        $output = `$cmd 2>&1`;
                        $ERROR .= "<br /><br /><div align=\"left\">Cmd line : <br /><span style=\"font-size:120%\">" . nl2br(htmlspecialchars($cmd)) . "</span></div>";
                        $ERROR .= "<br /><br /><div align=\"left\">The ffmpeg program said:<br /><span style=\"font-size:120%\">";
                        $ERROR .= nl2br(htmlspecialchars($output));
                        $ERROR .= "</span></div>";
                    }
                    @unlink($dest_file);
                    return false;
                }

                $return = $dest_file;
                //@chmod($return, octdec($CONFIG['default_file_mode'])); //silence the output in case chmod is disabled
                return $return;
            }

享受编码

请问,

Wasim

Wasim

这篇关于ffmpeg-php创建视频的缩略图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆