如何从youtube视频制作gif图像?

时间:2013-08-07 10:53:24

标签: javascript php youtube youtube-api gif

有人帮我,我想用PHP代码开发一个网站。 GIF-KING这是我的网站我已经完成了jpeg图片给gif创建者但是如何从YouTube网址创建GIF图像,如yt2gif

我试图搜索Google,但没有给出足够的结果来满足我的要求。

我将代码上传视频发送给GIF创建者但无法找到制作YouTube网址的脚本给GIF创建者。

我有一个解决方案首先使用YouTube API下载YouTube视频。然后将其转换为GIF图像。但这不是正确的方法。我无法在中间部分进行转换。始终从开始转换此外,无法从YouTube下载大量视频。

请参阅我从YouTube网址创建GIF图片的过程。

屏幕截图-1:

复制YouTube网址 enter image description here

屏幕截图-2:

将其粘贴到网站http://www.gif-king.com/make-your-gif3中,请参阅下面的屏幕截图。 enter image description here

点击Create Gifs一段时间后会显示视频详细信息。请参阅屏幕截图-3。

截图-3:

Showing the video details from YouTube

点击Make Gif后,此视频将转换为GIF。

它正在制作一个小视频。但不适用于大视频。

我的PHP代码:

ajax.php

if(isset($_REQUEST['vid'])){
    $vidID=$_REQUEST['vid'];
    if($vidID){
        include('curl.php');
        include('youtube.php');
        $tube = new youtube();

        $links = $tube->get("http://www.youtube.com/watch?v=".$vidID);
        $getVideo=$links[3]['url']; //Get the avi video from youtube 
        $cate=mysql_query("select * from category ORDER BY id ");
        while($categoryName=mysql_fetch_array($cate)){
            $getCatRes .= '<option value="'.$categoryName['id'].'">'.$categoryName['name'].'</option>';
        }
        if($getVideo) {
            $url = "http://gdata.youtube.com/feeds/api/videos/". $vidID;
            $doc = new DOMDocument;
            $doc->load($url);
            $title = $doc->getElementsByTagName("title")->item(0)->nodeValue;
            $duration = $doc->getElementsByTagName('duration')->item(0)->getAttribute('seconds');
            if($duration > 1200){
                $array[] = array('result'=>'error','message'=>'ERROR!!! Maximum 20 minutes video allowed');
            }
            else{
            $newVideo = "gifking_".time().".avi";
            $videoUploaded=file_put_contents("myvideo/".$newVideo,file_get_contents($getVideo));
            if($videoUploaded){
                    $video='<iframe width="360" height="240" frameborder="0" allowfullscreen="" src="http://www.youtube.com/embed/'.$vidID.'?enablejsapi=1&amp;playerapiid=ytplayer&amp;version=3&amp;cc_load_policy=0&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;theme=light"></iframe>';

                    $video_title='<input type="text" class="add-gif-textbox" name="title" id="title" placeholder="Title" value="'.$title.'"  />';
                    $category='<select class="add-gif-dropdown" id="cat_id" name="cat_id">
                                  '.$getCatRes.'
                                  </select>';
                    $tag='<input type="text" class="add-gif-textbox" name="tag" id="tag" placeholder="tiger,book,flower" />';
                    $submitBtn='<input id="button" class="button1" type="submit" value="Make Gif" name="submit">';

                    $array[] = array('result'=>'success','title'=>$video_title,'category'=>$category,'video'=>$video,'duration'=>$duration,'tag'=>$tag,'filename'=>$newVideo,'submit_btn'=>$submitBtn);
                }
                else{
                    $array[] = array('result'=>'error','message'=>'ERROR!!! Uploading image please try again');
                }
            }
        }
        else{
            $array[] = array('result'=>'error','message'=>'ERROR!!! Invalid video id');
        }
        echo json_encode($array);
    }
}

请建议我如何在php代码中创建它?

9 个答案:

答案 0 :(得分:11)

它非常简单,对您来说很幸运!这是一个简单的分步计划:

  1. 您首先从Youtube(或任何其他视频网站下载视频不要过于具体)下载视频。这可以通过下载程序完成。那些存在,有流行的。

  2. 然后你需要一个视频转换器程序。那些存在,有流行的。有了它,您可以将每个X帧提取为图像。注意使时间正确,以便了解每个X帧之间的持续时间(以毫秒为单位)。

  3. 然后,您将所提取帧的所有图像文件再次与可以创建GIF动画的软件合并。那些存在,有流行的。现在请注意在帧之间设置正确的时间。

  4. 然后将gif图像保存为特定的文件名。

  5. 好消息:你已经完成了。

    就这个程序而言(编程问题),您可以找到上面列表中列出的步骤。

    实施取决于现场偏离主题的工具建议(但这不应该显示给你,因为上面的每一步都在互联网中详细解释,你似乎很聪明地使用互联网否则你不会在Stackoverflow上询问。

    祝你好运,玩得开心。让我们知道它是如何成功的!

答案 1 :(得分:4)

我建议使用类似ffmpeg(用于转换/录制视频的多平台开源库)来为您完成大部分更困难的工作。快看看这个 http://www.ffmpeg.org/以及http://www.catswhocode.com/blog/19-ffmpeg-commands-for-all-needs第二个网站上的其中一个代码专门用于转换为gif。

您还需要在PHP中实现该库,快速谷歌搜索显示许多可以帮助您解决此问题的网站。它可能涉及服务器上的插件或程序,以允许PHP自动执行此过程。

我还没有在PHP中完成大量的工作,但似乎很有可能将youtube视频转换为gif并进行一些工作 - 所以我希望这会有所帮助。

答案 2 :(得分:1)

我认为我会更具体,并扩展我的答案,因为评论中的字符限制非常困难:

如前所述,您必须遵循几个步骤。首先,您必须从youtube获取视频才能将其转换为: 在php中你可以在页面上尝试一个反映视频的file_get_contents()(或者其他一些下载方法,简单搜索“php download youtube video”就会发现很多。

然后你必须将它转换为gif。 xampp和ffmpeg适合于任务,虽然只需“转换为gif php”的另一个网页搜索显示了一些选项。通过搜索找到了一些教程,所以它不应该太难。您还应该查看xampp和ffmpeg网站,如果您选择使用它们,请查看相关文档。

转换后你必须保存带有特定文件名的gif,这不应该太难了,这也取决于你用来转换它的方法,再一次有很多文档来帮助解决这类问题。< / p>

所以看看它是怎么回事,虽然它会花费太长时间并且很难在stackoverflow上显示一个例子,如果你有一个更具体的问题关于其中一个步骤,我很乐意为你找到一个教程或者试着找一个适合你的小例子。尽你所能,并确保通过一些搜索和努力,你将能够立即找到如何做到这一点。

答案 3 :(得分:1)

Soluton:1

我首先使用youtube-to-gif(如果未安装您的服务器。请与服务器支持团队联系)shell下载YouTube视频,而不是将其转换为gif图片。

这是我的代码:

$vodeo_id = 'UiPRwDUGQLE';
$start_second = 5;
$duration = 10;
$filePath = 'some_path_here';
$fileName = 'some_file_name.gif';
exec("youtube-to-gif -u https://www.youtube.com/watch?v={$video_id} -b $start_second -d $duration -s 550x? -o {$filePath}{$fileName} -f 10", $out, $err);

上面工作正常,但有一个问题。你无法从0秒转换为gif。因为youtube-to-gif占用默认时间从3秒开始。

解决方案:2

这是第二个想法。 如果您想将YouTube转换为GIF图片。 您应该安装以下扩展

  • FFMEPG(doc
  • youtube-dl(doc

如果您的服务器中未安装上述扩展程序,请与您的服务器支持团队联系。

首先使用youtube-dl命令下载YouTube视频。然后,您可以轻松使用ffmpeg命令转换为GIF图像。

这是我的代码:

$input = 'your video path which you was downloading from YouTube by using youtube-dl commmand';
$start = 5;
$end = 15;
$limit = $end - $start;
$thumbnail = 'img/logo.png'; /* adding watermark on that GIF image */

$storeFolder = 'destination path here';
$targetPath = dirname(__FILE__) . $ds . $storeFolder;
$newName = time() . '.gif';
$destinationPath = $targetPath . $newName;

$command = "ffmpeg -t $limit -ss $start -i $input -i $thumbnail -vf scale=500:-1 -codec:a copy $destinationPath";
@exec($command, $ret, $returnvalue);
if ($returnvalue == 127) {
      $data['message'] = "FFMPEG not installed. Please contact with support team.";
} else {
     $data['message'] = "Success";
}

答案 4 :(得分:0)

有一个纯PHP解决方案,但我建议您使用外部应用程序(通过命令行)进行此转换,这很简单,因为PHP不够快,不能经常进行这种视频操作。加载时间和服务器负载都很糟糕。

对于纯PHP解决方案,您可以使用此类将视频文件转换为帧(例如,gif图像): http://www.phpclasses.org/package/3747-PHP-Manipulate-and-convert-videos-with-ffmpeg-program.html

然后将图像转换为.gif图像的帧的下一个解决方案: PHP - Create simple animated GIF from two JPEG images?

对于基于终端的解决方案,您可以查看: https://askubuntu.com/questions/107726/how-to-create-animated-gif-images-of-a-screencast

你也可以建立一个基于另一种语言的自定义应用程序的连接(比如说; python或C ++),让这个程序进行硬转换,而PHP完成剩下的工作(也许创建GUI?)

答案 5 :(得分:0)

如果您想在上传文件时生成gif / image文件,请参阅ffmpeg,

ffmpeg -i orginal.avi -t 10 output.gif

-i:视频文件名  -t:是时间

如果您想使用YouTube视频调用现有的图片文件,请点击here

答案 6 :(得分:0)

我认为你的任务没有开箱即用的东西。 你应该开发一些东西来做到这一点。
例如你可以:

  1. 使用此node.js插件下载youtube视频:https://github.com/fent/node-youtube-dl
  2. 使用gif.js转换它:http://jnordberg.github.io/gif.js/tests/video.html

答案 7 :(得分:0)

Google提供Youtube API,用于处理与Youtube视频相关的任务,包括图片网址。 Youtube-Google Developers

答案 8 :(得分:0)

您可以使用外部API YouTube video to gif Animation

示例PHP代码:

$response = Unirest::post(
  "https://squbit-video-to-animation.p.mashape.com/animation",
  array(
    "X-Mashape-Authorization" => "Mashape-Authorization-Key",
    "Content-Type" => "application/json"
  ),
  "{\"sourceId\":\"ZL6a4U_UdTc\",\"width\":\"480\",\"height\":\"270\",\"startTime\":\"192\",\"duration\":\"17\",\"callback\":\"http:\/\/yourhost.com\/callback\/\"}"
);

您在JSON请求中指定输入参数。

动画准备就绪后,您将收到http://yourhost.com/callback_url/的回调,其中包含指向已创建的gif动画的链接

谢谢