dnu
背景
作为一个喜欢搬运 YouTube 视频的网友,我发现将视频下载下来再上传到 B 站十分繁琐,因此我决定开发一个小工具,能够方便快捷地将 YouTube 视频下载并上传至 B 站,以节省我的时间和精力。
项目实现
语言:Python
主要借助:request库、yt-dlp、biliup
完整代码:
from PIL import Image
import json
import sys
import requests
import yt_dlp
import subprocess
from biliup.plugins.bili_webup import BiliBili, Data
def download(url):
# 初始化
video_info = {}
audio_ydl_opts = {
'format': 'bestaudio/best',
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
}],
'outtmpl': './resource/%(channel)s/%(id)s'
}
video_ydl_opts = {
'format' : 'bv[height<=1080][ext=mp4]+ba[ext=m4a]',
'outtmpl': './resource/%(channel)s/%(id)s.mp4'
}
# 下载音频
with yt_dlp.YoutubeDL(audio_ydl_opts) as ydl:
ydl.download(url)
with yt_dlp.YoutubeDL(video_ydl_opts) as ydl:
# 获取视频信息
extract_info = ydl.extract_info(url, download=False)
video_info['id'] = extract_info['id']
video_info['title'] = extract_info['title']
video_info['description'] = extract_info['description']
video_info['url'] = extract_info['webpage_url']
video_info['categories'] = extract_info['categories']
video_info['tags'] = extract_info['tags']
video_info['video_path'] = f"./resource/{extract_info['channel']}/{extract_info['id']}.mp4"
video_info['audio_path'] = f"./resource/{extract_info['channel']}/{extract_info['id']}.mp3"
video_info['thumbnail_path'] = f"./resource/{extract_info['channel']}/{extract_info['id']}.png"
# 下载视频
ydl.download(url)
# 下载壁纸,并转换成可以上传的格式
imgData = requests.get(extract_info['thumbnail']).content
with open(f"./resource/{extract_info['channel']}/{extract_info['id']}.webp", "wb") as handler:
handler.write(imgData)
im = Image.open(f"./resource/{extract_info['channel']}/{extract_info['id']}.webp").convert("RGB")
im.save(f"./resource/{extract_info['channel']}/{extract_info['id']}.png")
return video_info
# 上传
def upload(video_info):
return_code = subprocess.run([
'./biliup', 'upload', f"{video_info['video_path']}",
'--copyright', '2',
'--cover', f"{video_info['thumbnail_path']}",
'--desc', f"{video_info['description'][:99]}",
'--source', f'{video_info["url"][:79]}',
'--tag', 'youtube',
'--title', f'{video_info["title"]}',
])
print("return code:", return_code)
if __name__ == "__main__":
# 获取url
url = sys.argv[1]
# 下载
video_info = download(url)
# 上传
upload(video_info)
dnu的更多相关文章
- 解决dnu restore时的“Cannot handle address family”问题
前几天在使用基于 mono 的 dnx 中的 dnu restore 命令安装 nuget 包包时,遇到了 “Cannot handle address family” 错误,错误详情如下: Cann ...
- [DNX]解决dnu restore时找不到Newtonsoft.Json的问题
在Mac上用最新版的dnx 1.0.0-beta5-11855进行dnu restore,出现下面的错误: System.IO.FileNotFoundException: Could not loa ...
- 小白学数据分析----->DNU/DAU
行业指标观察分析-DNU/DAU 写在分析之前 一直以来,我们对于数据都是在做加法,也希望这个过程中,不断搜罗和变换出来更多的数据指标,维度等等.而在实际的分析中,我们发现,一如我们给用户提供产品一样 ...
- 理解ASP.NET 5运行时命令:DNVM, DNX, 和DNU
ASP.NET 5 引入了一个新型的运行时,让我们可以现场交付模式组合式构建应用程序,而不依赖于宿主机上的.NET框架.这种新模式为我们提供了命令行工具(DNVM.DNX.DNU)用于管理我们的.ne ...
- .NET Core、DNX、DNU、DNVM、MVC6学习资料
一.资源 1.http://dotnet.github.io/ 2.http://www.codeproject.com/Articles/1005145/DNVM-DNX-and-DNU-Under ...
- 在Ubuntu下搭建ASP.NET 5开发环境
在Ubuntu下搭建ASP.NET 5开发环境 0x00 写在前面的废话 年底这段时间实在太忙了,各种事情都凑在这个时候,没时间去学习自己感兴趣的东西,所以博客也好就没写了.最近工作上有个小功能要做成 ...
- ASP.NET 5 (vNext) Linux部署
引言 工欲善其事,必先利其器. 首先,我们先明确下以下基本概念 Linux相关 Ubuntu Ubuntu是基于linux的免费开源桌面PC操作系统 十分契合英特尔的超极本定位 支持x86.64位和p ...
- .NET跨平台:在Ubuntu上用自己编译的dnx运行ASP.NET 5示例程序
在 Linux Ubuntu 上成功编译 dnx 之后,会在 artifacts/build/ 文件夹中生成 dnx-coreclr-linux-x64/ 与 dnx-mono/ 这2个文件夹,前者是 ...
- .NET跨平台:在CentOS上编译dnx并运行ASP.NET 5示例程序
在之前的博文中我们在 Ubuntu 上成功编译出了 dnx ,并且用它成功运行了 ASP.NET 5 示例程序.在这篇博文中我们将 Ubuntu 换成 CentOS. 目前 dnx 的编译需要用到 m ...
- ubuntu15 coreclr
看了很多文章心里痒痒,也下载个ubuntu想发布个asp.net5试试,自然是下载的最新版本15.结果涉及dnu restore,dnx...什么的都没反应,切换为mono就正常,奇怪了,按说core ...
随机推荐
- IDEA中,如何将本地项目推送到Github里面
具体步骤 1.File->VCS->Create Git Repository 然后进入这样一个界面: 接着我们选中当前项目作为本地库: 设置好之后,我们会发现,项目文件全部标红,这是由于 ...
- Sql 注入方案合集
[以mysql 数据库为例] [参考书目:sqlilabs过关手册注入天书 https://www.cnblogs.com/lcamry/category/846064.html] 推荐看原书,这篇文 ...
- 使用Mathematica做序列的DTFT的几个例子
ListFourierSequenceTransform[{-2, -1, 1, 3, 3, 1, -1, -2}, \[Omega]] ParametricPlot[{Re[%], Im[%]}, ...
- 设计师必备:免费素材管理工具Billfish v3.0更新了!
Billfish是专门为设计师打造的图片收藏管理工具,可以轻松管理您的各种素材文件.Billfish是一个免费的软件,支持对大量的图片素材进行管理,提供多种快速的检索筛选功能,如颜色,格式,方向, ...
- python爬取猫眼电影Top100榜单的信息
爬取并写入MySQL中 import pymysql import requests from bs4 import BeautifulSoup headers = { 'User-Agent': ' ...
- springboot邮箱验证功能部署到服务器后报25 timeout的解决方式
可以写在application.yml中或者 写在配置类中, 如下; 原理就是更改端口,并且配置ssl的相关配置 package com.wfszmg.config; import org.sprin ...
- SpringBoot的EnableCaching简述
Spring Boot中的EnableCaching简述 spring boot中自带有数据缓存机制,主要通过其org.springframework.cache包下的各种类来实现. EnableCa ...
- windows下使用docker安装hyperf
https://blog.csdn.net/weixin_39398904/article/details/128469190 http://wiki.fengfengphp.com/zh-cn/ba ...
- vue中实用小技巧,长期更新
1.在vue 中使用webpack require.context工程化配置组件,不用一个一个import注册了 main.js中 import Vue from 'vue'//使用lodsh插件im ...
- vue之写发表评论思路
后端接口 var express = require('express'); const sql = require('../sql') const Comment = require('../sql ...