2

任何人都可以帮助我,我想使用 php 代码开发一个网站。GIF-KING这是我的网站我已经完成了 jpeg 图像到 gif 创建者,但是如何从yt2gif 之类的 YouTube URL 创建 GIF 图像

我试图搜索谷歌,但没有提供任何足够的结果来满足我的要求。

我将代码上传视频到 GIF 创作者,但找不到将 YouTube URL 制作给 GIF 创作者的脚本。

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

查看我从 YouTube URL 创建 GIF 图像的过程。

截图 1:

复制 YouTube 网址 在此处输入图像描述

截图 2:

将其粘贴到网站http://www.gif-king.com/make-your-gif3见下面的截图。 在此处输入图像描述

单击Create Gifs一段时间后,将出现视频详细信息,请参见屏幕截图-3。

截图 3:

显示来自 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 代码中创建它?

4

9 回答 9

11

It works totally easy, lucky for you! Here is a simple step-by-step program of that:

  1. You first of all download the video from Youtube (or any other video website not to make it too specific). This can be done with a download program. Those exist, there are popular ones.

  2. Then you need a video converter program. Those exist, there are popular ones. With it you extract each X frames as an image. Take care to get the timing right so you understand the duration in milliseconds between each of those X frames.

  3. Then you merge all the image files of the extracted frames again with a software that can create an animated gif. Those exist, there are popular ones. Take care here now that you set the timing right between the frames.

  4. Then you save the gif image to a specific filename.

Good News: You are done.

As far as the program of this is concerned (the programming question), you find the steps outlined in the list above.

The implementation depends on tool suggestions which are off-topic here on site (but this shouldn't be show stopper for you as each step above is explained in detail within the interwebs and you seem to be clever enough to use the interwebs otherwise you wouldn't have asked on Stackoverflow).

Good luck and have fun. Let us know how it worked out!

于 2013-08-15T09:21:04.360 回答
4

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

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

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

于 2013-08-07T11:05:56.313 回答
1

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

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

然后你必须把它转换成gif。xampp 和 ffmpeg 将适合该任务,尽管仅使用“转换为 gif php”的网络搜索显示了一些选项。A 也通过该搜索找到了一些教程,所以它不应该太难。您还应该查看 xampp 和 ffmpeg 网站,如果您选择使用它们,请查看它们的文档。

转换后,您必须使用特定的文件名保存 gif,这不应该太难,它还取决于您用于转换它的方法,再次有大量文档可以帮助解决此类问题。

所以看看它是如何进行的,虽然它会花费很长时间并且很难向你展示一个关于 stackoverflow 的例子,如果你对其中一个步骤有一个稍微更具体的问题,我很乐意为你找到一个教程或尝试并获得一个为你工作的小例子。尽你最大的努力,我确信通过一些搜索和努力,你将能够立即找到如何做到这一点。

于 2013-08-16T02:31:54.663 回答
1

解决方案: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 图像。您应该安装以下扩展

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

首先使用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";
}
于 2013-10-16T09:05:34.860 回答
0

您可以使用外部 API YouTube 视频 gif 动画

示例 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 动画的链接

谢谢

于 2014-06-04T09:48:43.740 回答
0

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

  1. 使用此 node.js 插件下载 youtube 视频:https ://github.com/fent/node-youtube-dl
  2. 用 gif.js 转换它:http: //jnordberg.github.io/gif.js/tests/video.html
于 2013-08-20T09:05:58.097 回答
0

如果想在上传文件的时候生成gif/image文件,参考ffmpeg,

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

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

如果您想使用 youtube 视频调用现有的图像文件,请单击此处

于 2013-08-19T01:59:16.023 回答
0

Google 为与 Youtube 视频相关的任务提供了一个 Youtube API,包括图片 url。 Youtube-谷歌开发者

于 2013-08-20T10:13:10.453 回答
0

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

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

然后是下一个将图像转换为 .gif 图像帧的解决方案: PHP - 从两个 JPEG 图像创建简单的动画 GIF?

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

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

于 2013-08-18T20:56:15.530 回答