我想 yt-dlp 應當不用做太多簡介,他本身容納了各種影音網站的分析器,以前也片段片段的研究:
原本有個任務是讓同事處理,他在忙碌就幫忙試了一下,整體上就問問 ChatGPT 就得到想要的八成的範例程式,接著再小幅修改一下使用方式就收工。有了 ChatGPT 後,幾乎可以不用做什麼筆記,忘了就在問一下即可,當然,能不能一問就得到結果,就回歸到詢問者的功力了。
例如情境:
透過 yt-dlp extractor 內的 facebook.py ,幫我列出 facebook video 內的格式,以協助進行產品多媒體格式的偵錯
如此 ChatGPT 就給我不錯的程式碼,修改一下,搞定:
```% git clone https://github.com/yt-dlp/yt-dlp.git% cat test-facebook.pyimport sysimport argparsedef get_video_formats(url):from yt_dlp.YoutubeDL import YoutubeDLfrom yt_dlp.extractor.facebook import FacebookIE# 创建一个 YoutubeDL 实例ydl_opts = {}with YoutubeDL(ydl_opts) as ydl:# 实例化 FacebookIE 类,并传递 ydl 对象作为 downloaderfacebook_ie = FacebookIE(ydl)# 使用 extract 方法提取视频信息video_info = facebook_ie.extract(url)# 获取可用的格式formats = video_info.get('formats', [])# 打印所有格式的id和分辨率for fmt in formats:# 获取格式的分辨率,如果没有就使用 'N/A'resolution = fmt.get('height', 'N/A')print(f"Format ID: {fmt['format_id']}, Resolution: {resolution}p")if __name__ == "__main__":# 设置命令行参数解析parser = argparse.ArgumentParser(description='Extract video formats from a Facebook video URL using yt-dlp.')parser.add_argument('--path', required=True, help='Path to the yt-dlp directory')parser.add_argument('--facebook-url', required=True, help='Facebook video URL')args = parser.parse_args()# 将 yt-dlp 的路径插入 sys.pathsys.path.insert(0, args.path)# 调用函数来获取视频格式get_video_formats(args.facebook_url)% python3 test-facebook.py --path ./yt-dlp/ --facebook-url 'https://www.facebook.com/TED/videos/1464960234158173'[facebook] Extracting URL: https://www.facebook.com/TED/videos/1464960234158173[facebook] 1464960234158173: Downloading webpageFormat ID: hd, Resolution: N/ApFormat ID: sd, Resolution: N/ApFormat ID: 492667606832062v, Resolution: 720pFormat ID: 1654227388706906v, Resolution: 720pFormat ID: 849737406808391v, Resolution: 720pFormat ID: 1263117531679597v, Resolution: 1080pFormat ID: 1036187750774836a, Resolution: Nonep```
收工!
這樣往後有哪些 extrator 內有一些有趣的 function ,就可以這樣呼叫出來使用,省去自己在重複刻輪子,且如果有需要更新維護,僅需把 yt-dlp code 更新到最新即可,保留異質系統整合彈性
此外 yt-dlp 本身指令有支援 JSON output ,若 yt-dlp JSON output 已夠用,也不需要向上述那樣用法,上述筆記純粹是一個範例,像是取得中間資料結構等等。
沒有留言:
張貼留言