Video 如何从Youtube下载视频广告?

Video 如何从Youtube下载视频广告?,video,youtube,ads,Video,Youtube,Ads,我想从YouTube下载一些(我是说很多)视频广告(不是视频,而是之前播放的广告)用于研究目的 对实现这一目标的工具或方法有何建议?我不介意在我的hack上做一些编程,但我目前不知道如何做。此外,YouTube不是一项要求;其他视频网站的视频广告对我也很有用 当我发现你的问题时,我想玩它会很有趣, 正如我最近开发的站点()允许您 从包括YouTube在内的许多网站下载视频 我只查看了Youtube的广告系统,这对其他系统不起作用(很可能)。YouTube的好处是,你可以直接从视频页面获取所有必要

我想从YouTube下载一些(我是说很多)视频广告(不是视频,而是之前播放的广告)用于研究目的

对实现这一目标的工具或方法有何建议?我不介意在我的hack上做一些编程,但我目前不知道如何做。此外,YouTube不是一项要求;其他视频网站的视频广告对我也很有用

当我发现你的问题时,我想玩它会很有趣, 正如我最近开发的站点()允许您 从包括YouTube在内的许多网站下载视频

我只查看了Youtube的广告系统,这对其他系统不起作用(很可能)。YouTube的好处是,你可以直接从视频页面获取所有必要的信息,因此很容易快速抓取(我在一个非常小的服务器上一天下载了将近2200万个视频页面)。所以你要找的部分是
;ytplayer.config={(.*)}包含内联json对象(易于处理)。你不需要其他任何东西

如果您不想从HTML解析它,您可以通过在任何Youtube视频链接的末尾添加参数
&spf=prefetch
直接获取json对象,例如

并非所有YouTube视频都显示广告(根据我的统计,只有18%的视频显示广告)。只需在json对象内查找
ad_标记
键,即可验证是否为视频启用了ads

YouTube使用三种不同的广告系统:

  • 广告
  • AdSense/ADX
  • 第三方系统
提供来自两个不同来源的广告: -上传到YouTube上用作广告的视频(大部分仅显示部分视频) -来自外部来源的视频(第三方ads服务器)

他们的出发点都是一样的。找到json对象内部的
dynamic\u allocation\u ad\u tag
键。它包含指向双击服务器的url。除非您更改此部分
sz=WIDTHxHEIGHT具有真实AR值,例如
sz=480x70480x360480x361

您希望在同一json文件中找到另外三个键
tpas\u partner\u id
tpas\u video\u id
video\u id
(是url中的视频id),因为它们将用于第三方广告系统

现在您可以点击双击url,该url将返回一个XML文件,其中包含有关此视频将提供的广告的信息。整个文件都很有趣,并且充满了重要的信息(因此您可能应该将其与视频一起存储)。查找这三个键
AdSystem
AdTitle
Description

  • AdSystem:告诉您使用什么系统来提供广告。有三个选项(如我前面提到的)
    • 广告
    • AdSense/ADX
    • GDFP
  • AdTitle:告诉您它是什么类型的广告(例如视频或横幅)
  • 说明:告诉您与AdTitle基本相同,但有时它包含对广告的说明
如果广告由adsense系统(adsense或adx)提供,则此xml包含广告的所有信息,包括广告的持续时间和直接链接。该链接正是您要查找的内容,您可以在一个键
MediaFile
下找到它

链接大部分看起来像这样
http://www.youtube.com/get_video?video_id=LCeDi-d5CRg&ts=1391921207&t=CyJEI0XYwJVJEYE5CVhqY-DF3KQ&gad=1
并将您重定向到mp4格式的真实文件。如果广告系统是ADX,您将获得一个直接链接,主要指向flv文件,例如
http://playtime.tubemogul.com/ad_promoted_videos/4799351_dhxsYlMYHmLMmxL0oBem_1390593897.flv

如果ad是来自第三方系统GDFP的服务器,则必须调用不同的服务器。对于第三方广告,Youtube使用FreeWheel服务。要获取广告数据,必须准备一个XML请求,如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <adRequest profile="{profile}" networkId="10613" version="1">
       <capabilities>
          <expectMultipleCreativeRenditions />
          <supportsAdUnitInMultipleSlots />
          <supportsSlotCallback />
          <supportNullCreative />
          <supportAdBundle />
          <supportsFallbackAds />
          <autoEventTracking />
          <requiresRendererManifest />
          <requiresVideoCallbackUrl />
       </capabilities>
       <visitor caller="AS3-5.6.0-r9954-1305270957">
          <httpHeaders>
             <httpHeader value="https://www.youtube.com/watch?v={video_id}" name="referer" />
             <httpHeader value="12,0,0,38" name="x-flash-version" />
          </httpHeaders>
       </visitor>
       <keyValues>
          <keyValue key="_fw_distributorvideoassetid" value="{video_id}" />
          <keyValue key="_fw_yt_type" value="short" />
          <keyValue key="_fwu:10613:lang" value="eng" />
       </keyValues>
       <siteSection pageViewRandom="{random}" customId="youtube_watch" siteSectionNetworkId="{tpas_partner_id}">
          <videoPlayer>
             <videoAsset autoPlay="true" duration="318" videoPlayRandom="{random}" customId="{tpas_video_id}" videoAssetNetworkId="{tpas_partner_id}">
                <adSlots height="390" defaultSlotProfile="{profile}" width="699" compatibleDimensions="2560,1440">
                   <temporalAdSlot height="390" adUnit="preroll" timePosition="0" customId="0_1" width="699" />
                   <temporalAdSlot height="390" adUnit="overlay" timePosition="0" customId="0_2" width="699" />
                </adSlots>
             </videoAsset>
             <adSlots>
                <nonTemporalAdSlot height="60" customId="0_5" width="300" acceptCompanion="true" />
                <nonTemporalAdSlot height="250" customId="0_6" width="300" acceptCompanion="true" />
             </adSlots>
          </videoPlayer>
          <adSlots />
       </siteSection>
    </adRequest>

您可能在{}中发现了多个变量。您必须用自定义数据替换它们,主要是从json对象获得的数据

  • tpas\u partner\u id:从json对象获取
  • tpas\u video\u id:从json对象获取
  • random:以微秒为单位的自历元以来的时间
  • 视频\u id:从json对象(或youtube url)获取
  • 配置文件:我找到了两个不同的配置文件。有时一个有效,另一个无效,反之亦然。每次都可以尝试
    10613:10613\u youtube\u as3\u播放器
    10613:youtube2
现在,将此XML文件作为POST请求发送到
https://2975c.v.fwmrm.net/ad/p/1?
(不要忘了发送内容类型为
应用程序/xml

响应包含另一个XML文件,其中包含广告的所有必要数据,包括各种共振峰和维度的直接链接。您可以在键
资产
下找到它们。同样,您可能应该将整个文件与视频一起存储,因为它包含广告的附加数据


就是这样,快乐狩猎。

一个简单得多的解决方案是右键单击视频窗口,然后选择
Stats for nerds

此时将出现一个统计信息列表,查找
视频ID
并复制它-仅复制
/
字符前面的字符串部分,如所示
https://www.youtube.com/watch?v=XXXXXXXXX
<div class="html5-video-info-panel" data-layer="4">
   <button class="html5-video-info-panel-close ytp-button" title="close">[x]</button>
   <div class="html5-video-info-panel-content">
      <div>
         <div>Video ID / sCPN</div>
         <span>I4VzIvGdTxI / GD6Y 2G9R N3W5</span>
      </div>
      <div>
         <div>Viewport / Frames</div>
         <span>640x360 / 0 dropped of 1706</span>
      </div>   
      <!-- a lot of divs    -->
   </div>
</div>
$(".html5-video-info-panel-content").children[0].children[1]
.textContent.replace(" ","").split("/")[0]
"https://www.youtube.com/watch?v="