0

我需要找出以编程方式获取 youtube 视频长度的最简单方法,给定所述视频的 url。

youtube API 是最好的方法吗?它看起来有些复杂,而且我以前从未使用过它,所以我可能需要一点时间才能适应,但我真的只想要最快的解决方案。我浏览了一个视频页面的来源,希望它可以在那里列出,但显然它没有(尽管它在一个易于解析的非常好的列表中列出了推荐的视频时间)。如果这是最好的方法,有没有人有一个snippit?

理想情况下,我可以在 Python 中完成这项工作,并且我需要它最终采用以下格式

00:00:00.000

但我对任何人可能拥有的任何解决方案都持完全开放的态度。

我会很感激任何见解。

4

5 回答 5

3

您所要做的就是从 Youtube API 2.0 返回的 XML 中读取元素seconds中的属性。yt:duration您最终只会得到秒分辨率(还没有毫秒)。这是一个例子:

from datetime import timedelta
from urllib2 import urlopen
from xml.dom.minidom import parseString
for vid in ('wJ4hPaNyHnY', 'dJ38nHlVE78', 'huXaL8qj2Vs'):
    url = 'https://gdata.youtube.com/feeds/api/videos/{0}?v=2'.format(vid)
    s = urlopen(url).read()
    d = parseString(s)
    e = d.getElementsByTagName('yt:duration')[0]
    a = e.attributes['seconds']
    v = int(a.value)
    t = timedelta(seconds=v)
    print(t)

输出是:

0:00:59
0:02:24
0:04:49
于 2013-06-21T17:00:55.087 回答
1

(我不确定“预下载”指的是什么。)

获取长度的最简单方法VIDEO_ID是发出 HTTP 请求

http://gdata.youtube.com/feeds/api/videos/VIDEO_ID?v=2&alt=jsonc

然后查看返回的data->duration元素的值。它将设置为视频的持续时间(以秒为单位)。

于 2013-06-21T16:26:24.383 回答
1

使用 python 和 V3 youtube api,这是每个视频的方式。您需要 API 密钥,您可以在此处获取:https ://console.developers.google.com/

# -*- coding: utf-8 -*-
import json
import urllib

video_id="6_zn4WCeX0o"
api_key="Your API KEY replace it!"
searchUrl="https://www.googleapis.com/youtube/v3/videos?id="+video_id+"&key="+api_key+"&part=contentDetails"
response = urllib.urlopen(searchUrl).read()
data = json.loads(response)
all_data=data['items']
contentDetails=all_data[0]['contentDetails']
duration=contentDetails['duration']
print duration

控制台响应:

>>>PT6M22S

对应6分22秒。

于 2015-11-15T21:27:34.367 回答
0

为此,您始终可以使用Data API v3。只需进行视频->列表调用。

GET https://www.googleapis.com/youtube/v3/videos?part=contentDetails%2C+fileDetails&id={VIDEO_ID}&key={YOUR_API_KEY}

作为响应,获取ISO 8601格式的contentDetails.duration

或者您可以从fileDetails.durationMs获取以毫秒为单位的持续时间。

于 2013-06-21T20:16:28.767 回答
0

如果您使用的是 Python 3 或更新版本,则可以对YouTube v3 API URL 执行 GET 请求。为此,您需要在Google 控制台中启用YouTube v3 API并且您需要在启用 YouTube v3 API 后创建 API 凭据。

下面的代码示例:

import json 
import requests 

YOUTUBE_ID = 'video_id_here'
API_KEY = 'your_youtube_v3_api_key'
url = f"https://www.googleapis.com/youtube/v3/videos?part=contentDetails&id={YOUTUBE_ID}&key={API_KEY}"

response = requests.get(url) # Perform the GET request 
data = response.json() # Read the json response and convert it to a Python dictionary 

length = data['items'][0]['contentDetails']['duration']
print(length)

或者作为一个可重用的函数:

import json 
import requests 

API_KEY = 'your_youtube_v3_api_key'
def get_youtube_video_duration(video_id):
    url = f"https://www.googleapis.com/youtube/v3/videos?part=contentDetails&id={video_id}&key={API_KEY}"

    response = requests.get(url) # Perform the GET request 
    data = response.json() # Read the json response and convert it to a Python dictionary 

    return data['items'][0]['contentDetails']['duration']

duration = get_youtube_video_duration('your_video_id')

注意:如果您拥有视频,则只能从 API 获取 fileDetails,因此您需要使用与 YouTube 帐户相同的 Google 帐户作为 YouTube v3 API 密钥。

来自 Google 的响应将如下所示:

{
    "kind": "youtube#videoListResponse",
    "etag": "\"SJajsdhlkashdkahdkjahdskashd4/meCiVqMhpMVdDhIB-dj93JbqLBE\"",
    "pageInfo": {
        "totalResults": 1,
        "resultsPerPage": 1
    },
    "items": [
        {
            "kind": "youtube#video",
            "etag": "\"SJZWTasdasd12389ausdkhaF94/aklshdaksdASDASddjsa12-18FQ\"",
            "id": "your_video_id",
            "contentDetails": {
                "duration": "PT4M54S",
                "dimension": "2d",
                "definition": "hd",
                "caption": "false",
                "licensedContent": false,
                "projection": "rectangular"
            }
        }
    ]
}

您的视频时长在哪里:PT4M54S这意味着4 Minutes 54 Seconds

编辑:要将 YouTube 持续时间转换为秒,请参阅此答案:https ://stackoverflow.com/a/49976787/2074077

将时间转换为秒后,您可以使用 timedelta 将秒转换为您的格式。

from datetime import timedelta
time = timedelta(seconds=duration_in_seconds)
print(time)
于 2020-03-14T10:41:01.963 回答