Spaces:
Paused
Paused
update
Browse files
toolbox/bilibili/video/video_manager.py
CHANGED
|
@@ -67,8 +67,8 @@ class BilibiliVideoUploader20200810(BilibiliClient):
|
|
| 67 |
stop=stop_after_attempt(3),
|
| 68 |
before_sleep=before_sleep_log(logger, logging.ERROR),
|
| 69 |
)
|
| 70 |
-
def get_upload_video_id(self, upos_uri, auth, **kwargs):
|
| 71 |
-
url = f"https
|
| 72 |
response = requests.request(
|
| 73 |
method="POST",
|
| 74 |
url=url,
|
|
@@ -87,18 +87,7 @@ class BilibiliVideoUploader20200810(BilibiliClient):
|
|
| 87 |
return js
|
| 88 |
|
| 89 |
def upload_video_in_chunks(self, endpoint, upos_uri, auth, upload_id, fileio, filesize, chunk_size, chunks):
|
| 90 |
-
""
|
| 91 |
-
Upload the video in chunks.
|
| 92 |
-
:param upos_uri: str, get from `pre_upload`
|
| 93 |
-
:param auth: str, get from `pre_upload`
|
| 94 |
-
:param upload_id: str, get from `get_upload_video_id`
|
| 95 |
-
:param fileio: io.BufferedReader, the io stream of the video to be uploaded
|
| 96 |
-
:param filesize: int, the size of the video to be uploaded
|
| 97 |
-
:param chunk_size: int, the size of each chunk to be uploaded
|
| 98 |
-
:param chunks: int, the number of chunks to be uploaded
|
| 99 |
-
:return:
|
| 100 |
-
"""
|
| 101 |
-
url = f"https://upos-sz-upcdnbda2.bilivideo.com/{upos_uri}"
|
| 102 |
params = {
|
| 103 |
"partNumber": None, # start from 1
|
| 104 |
"uploadId": upload_id,
|
|
@@ -110,7 +99,7 @@ class BilibiliVideoUploader20200810(BilibiliClient):
|
|
| 110 |
"total": filesize,
|
| 111 |
}
|
| 112 |
|
| 113 |
-
process_bar = tqdm(desc="bilibili_upload_video", total=chunks)
|
| 114 |
for chunknum in range(chunks):
|
| 115 |
start = fileio.tell()
|
| 116 |
batchbytes = fileio.read(chunk_size)
|
|
@@ -139,8 +128,8 @@ class BilibiliVideoUploader20200810(BilibiliClient):
|
|
| 139 |
stop=stop_after_attempt(3),
|
| 140 |
before_sleep=before_sleep_log(logger, logging.ERROR),
|
| 141 |
)
|
| 142 |
-
def finish_upload(self, upos_uri, auth, filename, upload_id, biz_id, chunks):
|
| 143 |
-
url = f"https
|
| 144 |
params = {
|
| 145 |
"output": "json",
|
| 146 |
"name": filename,
|
|
@@ -178,13 +167,6 @@ class BilibiliVideoUploader20200810(BilibiliClient):
|
|
| 178 |
before_sleep=before_sleep_log(logger, logging.ERROR),
|
| 179 |
)
|
| 180 |
def publish_video(self, bilibili_filename, metadata: dict):
|
| 181 |
-
"""
|
| 182 |
-
publish the uploaded video
|
| 183 |
-
https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/creativecenter/upload.md
|
| 184 |
-
:param bilibili_filename:
|
| 185 |
-
:param metadata:
|
| 186 |
-
:return:
|
| 187 |
-
"""
|
| 188 |
url = f'https://member.bilibili.com/x/vu/web/add?csrf={self.cookies["bili_jct"]}'
|
| 189 |
|
| 190 |
data = {
|
|
@@ -233,20 +215,25 @@ class BilibiliVideoUploader20200810(BilibiliClient):
|
|
| 233 |
filesize = filename.stat().st_size
|
| 234 |
|
| 235 |
js = self.pre_upload(filename=filename, filesize=filesize)
|
|
|
|
| 236 |
upos_uri = js["upos_uri"].split("//")[-1]
|
| 237 |
auth = js["auth"]
|
| 238 |
biz_id = js["biz_id"]
|
| 239 |
chunk_size = js["chunk_size"]
|
| 240 |
chunks = math.ceil(filesize / chunk_size)
|
| 241 |
|
| 242 |
-
upload_video_id_response = self.get_upload_video_id(
|
|
|
|
|
|
|
|
|
|
|
|
|
| 243 |
upload_id = upload_video_id_response["upload_id"]
|
| 244 |
key = upload_video_id_response["key"]
|
| 245 |
|
| 246 |
bilibili_filename = re.search(r"/(.*)\.", key).group(1)
|
| 247 |
fileio = filename.open(mode="rb")
|
| 248 |
self.upload_video_in_chunks(
|
| 249 |
-
endpoint=
|
| 250 |
upos_uri=upos_uri,
|
| 251 |
auth=auth,
|
| 252 |
upload_id=upload_id,
|
|
@@ -259,14 +246,15 @@ class BilibiliVideoUploader20200810(BilibiliClient):
|
|
| 259 |
|
| 260 |
# notify the all chunks have been uploaded
|
| 261 |
self.finish_upload(
|
|
|
|
| 262 |
upos_uri=upos_uri, auth=auth, filename=filename,
|
| 263 |
upload_id=upload_id, biz_id=biz_id, chunks=chunks
|
| 264 |
)
|
| 265 |
-
|
| 266 |
-
return biz_id, bilibili_filename
|
| 267 |
|
| 268 |
def upload_video_and_publish(self, filename: str, metadata: dict):
|
| 269 |
-
_, bilibili_filename = self.upload_video_file(filename)
|
|
|
|
| 270 |
publish_video_response = self.publish_video(bilibili_filename=bilibili_filename, metadata=metadata)
|
| 271 |
|
| 272 |
bvid = None
|
|
@@ -283,38 +271,6 @@ class BilibiliVideoUploader20200810(BilibiliClient):
|
|
| 283 |
raise KeyError(f"publish_video failed; KeyError: {error}, publish_video_response: {publish_video_response}")
|
| 284 |
return bvid
|
| 285 |
|
| 286 |
-
@retry(
|
| 287 |
-
wait=wait_fixed(10),
|
| 288 |
-
stop=stop_after_attempt(3),
|
| 289 |
-
before_sleep=before_sleep_log(logger, logging.ERROR),
|
| 290 |
-
)
|
| 291 |
-
def predict_tid(self, title: str, upload_id: str, bilibili_filename: str):
|
| 292 |
-
csrf = self.cookies["bili_jct"]
|
| 293 |
-
url = f"https://member.bilibili.com/x/vupre/web/archive/types/predict"
|
| 294 |
-
params = {
|
| 295 |
-
"csrf": csrf,
|
| 296 |
-
}
|
| 297 |
-
data = {
|
| 298 |
-
"title": title,
|
| 299 |
-
"upload_id": upload_id,
|
| 300 |
-
"filename": bilibili_filename,
|
| 301 |
-
}
|
| 302 |
-
response = requests.request(
|
| 303 |
-
method="POST",
|
| 304 |
-
url=url,
|
| 305 |
-
headers={
|
| 306 |
-
"TE": "Trailers",
|
| 307 |
-
**self.headers,
|
| 308 |
-
},
|
| 309 |
-
params=params,
|
| 310 |
-
json=data,
|
| 311 |
-
cookies=self.cookies,
|
| 312 |
-
)
|
| 313 |
-
if response.status_code != 200:
|
| 314 |
-
raise AssertionError(f"request failed; status_code: {response.status_code}, text: {response.text}")
|
| 315 |
-
js = response.json()
|
| 316 |
-
return js
|
| 317 |
-
|
| 318 |
|
| 319 |
class BilibiliVideoUploader20221109(BilibiliVideoUploader20200810):
|
| 320 |
def __init__(self):
|
|
@@ -339,11 +295,6 @@ class BilibiliVideoUploader20221109(BilibiliVideoUploader20200810):
|
|
| 339 |
"build": "2140000",
|
| 340 |
"size": filesize,
|
| 341 |
}
|
| 342 |
-
# response = self.session.get(
|
| 343 |
-
# url,
|
| 344 |
-
# params=params,
|
| 345 |
-
# headers={"TE": "Trailers"}
|
| 346 |
-
# )
|
| 347 |
response = requests.request(
|
| 348 |
# method="GET",
|
| 349 |
method="POST",
|
|
@@ -368,7 +319,8 @@ class BilibiliVideoUploader20221109(BilibiliVideoUploader20200810):
|
|
| 368 |
stop=stop_after_attempt(3),
|
| 369 |
before_sleep=before_sleep_log(logger, logging.ERROR),
|
| 370 |
)
|
| 371 |
-
def get_upload_video_id(self,
|
|
|
|
| 372 |
filesize, chunk_size, biz_id,
|
| 373 |
**kwargs
|
| 374 |
):
|
|
@@ -377,7 +329,6 @@ class BilibiliVideoUploader20221109(BilibiliVideoUploader20200810):
|
|
| 377 |
"profile": "ugcfx/bup",
|
| 378 |
"filesize": filesize,
|
| 379 |
"partsize": chunk_size,
|
| 380 |
-
# "biz_id": biz_id,
|
| 381 |
}
|
| 382 |
response = requests.request(
|
| 383 |
method="POST",
|
|
@@ -397,43 +348,6 @@ class BilibiliVideoUploader20221109(BilibiliVideoUploader20200810):
|
|
| 397 |
raise AssertionError(f"request failed;")
|
| 398 |
return js
|
| 399 |
|
| 400 |
-
def upload_video_in_chunks(self, endpoint, upos_uri, auth, upload_id, fileio, filesize, chunk_size, chunks):
|
| 401 |
-
url = f"https:{endpoint}/{upos_uri}"
|
| 402 |
-
|
| 403 |
-
params = {
|
| 404 |
-
"partNumber": None, # start from 1
|
| 405 |
-
"uploadId": upload_id,
|
| 406 |
-
"chunk": None, # start from 0
|
| 407 |
-
"chunks": chunks,
|
| 408 |
-
"size": None, # current batch size
|
| 409 |
-
"start": None,
|
| 410 |
-
"end": None,
|
| 411 |
-
"total": filesize,
|
| 412 |
-
}
|
| 413 |
-
process_bar = tqdm(desc="bilibili_upload_video", total=chunks)
|
| 414 |
-
for chunknum in range(chunks):
|
| 415 |
-
start = fileio.tell()
|
| 416 |
-
batchbytes = fileio.read(chunk_size)
|
| 417 |
-
params["partNumber"] = chunknum + 1
|
| 418 |
-
params["chunk"] = chunknum
|
| 419 |
-
params["size"] = len(batchbytes)
|
| 420 |
-
params["start"] = start
|
| 421 |
-
params["end"] = fileio.tell()
|
| 422 |
-
response = requests.request(
|
| 423 |
-
method="OPTIONS",
|
| 424 |
-
url=url,
|
| 425 |
-
headers={
|
| 426 |
-
"X-Upos-Auth": auth,
|
| 427 |
-
**self.headers,
|
| 428 |
-
},
|
| 429 |
-
params=params,
|
| 430 |
-
data=batchbytes,
|
| 431 |
-
cookies=self.cookies,
|
| 432 |
-
)
|
| 433 |
-
if response.status_code != 200:
|
| 434 |
-
raise AssertionError(f"request failed; status_code: {response.status_code}, text: {response.text}")
|
| 435 |
-
process_bar.update(1)
|
| 436 |
-
|
| 437 |
@retry(
|
| 438 |
wait=wait_fixed(10),
|
| 439 |
stop=stop_after_attempt(3),
|
|
@@ -449,14 +363,12 @@ class BilibiliVideoUploader20221109(BilibiliVideoUploader20200810):
|
|
| 449 |
"uploadId": upload_id,
|
| 450 |
"biz_id": biz_id
|
| 451 |
}
|
| 452 |
-
print(params)
|
| 453 |
data = {
|
| 454 |
"parts": [
|
| 455 |
{"partNumber": i+1, "eTag": "etag"}
|
| 456 |
for i in range(chunks)
|
| 457 |
]
|
| 458 |
}
|
| 459 |
-
print(data)
|
| 460 |
response = requests.request(
|
| 461 |
method="POST",
|
| 462 |
url=url,
|
|
@@ -481,14 +393,6 @@ class BilibiliVideoUploader20221109(BilibiliVideoUploader20200810):
|
|
| 481 |
before_sleep=before_sleep_log(logger, logging.ERROR),
|
| 482 |
)
|
| 483 |
def publish_video(self, bilibili_filename, metadata: dict):
|
| 484 |
-
"""
|
| 485 |
-
publish the uploaded video
|
| 486 |
-
|
| 487 |
-
https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/creativecenter/upload.md
|
| 488 |
-
:param bilibili_filename:
|
| 489 |
-
:param metadata:
|
| 490 |
-
:return:
|
| 491 |
-
"""
|
| 492 |
url = f'https://member.bilibili.com/x/vu/web/add?csrf={self.cookies["bili_jct"]}'
|
| 493 |
|
| 494 |
data = {
|
|
@@ -569,7 +473,6 @@ class BilibiliVideoUploader20221109(BilibiliVideoUploader20200810):
|
|
| 569 |
)
|
| 570 |
fileio.close()
|
| 571 |
|
| 572 |
-
# notify the all chunks have been uploaded
|
| 573 |
self.finish_upload(
|
| 574 |
endpoint=endpoint,
|
| 575 |
upos_uri=upos_uri, auth=auth, filename=filename.name,
|
|
@@ -578,30 +481,9 @@ class BilibiliVideoUploader20221109(BilibiliVideoUploader20200810):
|
|
| 578 |
|
| 579 |
return biz_id, upload_id, bilibili_filename
|
| 580 |
|
| 581 |
-
def upload_video_and_publish(self, filename: str, metadata: dict):
|
| 582 |
-
_, upload_id, bilibili_filename = self.upload_video_file(filename)
|
| 583 |
-
logger.info(f"finish uploading, upload_id: {upload_id}, bilibili_filename: {bilibili_filename}, filename: {filename}")
|
| 584 |
-
tid = self.predict_tid(
|
| 585 |
-
title=metadata["title"],
|
| 586 |
-
upload_id=upload_id,
|
| 587 |
-
bilibili_filename=bilibili_filename,
|
| 588 |
-
)
|
| 589 |
-
metadata["tid"] = tid
|
| 590 |
-
logger.info(f"predict tid, tid: {tid}, filename: {filename}")
|
| 591 |
-
publish_video_response = self.publish_video(bilibili_filename=bilibili_filename, metadata=metadata)
|
| 592 |
-
|
| 593 |
-
bvid = None
|
| 594 |
-
status_code = publish_video_response["code"]
|
| 595 |
-
if status_code == 137022:
|
| 596 |
-
message = publish_video_response["message"]
|
| 597 |
-
logger.info(f"publish_video failed; code: {status_code}, message: {message}")
|
| 598 |
-
else:
|
| 599 |
-
bvid = publish_video_response["data"]["bvid"]
|
| 600 |
-
return bvid
|
| 601 |
-
|
| 602 |
|
| 603 |
-
BilibiliVideoUploader = BilibiliVideoUploader20200810
|
| 604 |
-
|
| 605 |
|
| 606 |
|
| 607 |
def get_args():
|
|
@@ -613,7 +495,7 @@ def get_args():
|
|
| 613 |
)
|
| 614 |
parser.add_argument(
|
| 615 |
"--filename",
|
| 616 |
-
default=(project_path / "data/tasks/chenjieshen_douyin_video_to_bilibili/video/douyin/陈杰森/
|
| 617 |
type=str
|
| 618 |
)
|
| 619 |
args = parser.parse_args()
|
|
|
|
| 67 |
stop=stop_after_attempt(3),
|
| 68 |
before_sleep=before_sleep_log(logger, logging.ERROR),
|
| 69 |
)
|
| 70 |
+
def get_upload_video_id(self, endpoint, upos_uri, auth, **kwargs):
|
| 71 |
+
url = f"https:{endpoint}/{upos_uri}?uploads&output=json"
|
| 72 |
response = requests.request(
|
| 73 |
method="POST",
|
| 74 |
url=url,
|
|
|
|
| 87 |
return js
|
| 88 |
|
| 89 |
def upload_video_in_chunks(self, endpoint, upos_uri, auth, upload_id, fileio, filesize, chunk_size, chunks):
|
| 90 |
+
url = f"https:{endpoint}/{upos_uri}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 91 |
params = {
|
| 92 |
"partNumber": None, # start from 1
|
| 93 |
"uploadId": upload_id,
|
|
|
|
| 99 |
"total": filesize,
|
| 100 |
}
|
| 101 |
|
| 102 |
+
process_bar = tqdm(desc=f"bilibili_upload_video({endpoint})", total=chunks)
|
| 103 |
for chunknum in range(chunks):
|
| 104 |
start = fileio.tell()
|
| 105 |
batchbytes = fileio.read(chunk_size)
|
|
|
|
| 128 |
stop=stop_after_attempt(3),
|
| 129 |
before_sleep=before_sleep_log(logger, logging.ERROR),
|
| 130 |
)
|
| 131 |
+
def finish_upload(self, endpoint, upos_uri, auth, filename, upload_id, biz_id, chunks):
|
| 132 |
+
url = f"https:{endpoint}/{upos_uri}"
|
| 133 |
params = {
|
| 134 |
"output": "json",
|
| 135 |
"name": filename,
|
|
|
|
| 167 |
before_sleep=before_sleep_log(logger, logging.ERROR),
|
| 168 |
)
|
| 169 |
def publish_video(self, bilibili_filename, metadata: dict):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 170 |
url = f'https://member.bilibili.com/x/vu/web/add?csrf={self.cookies["bili_jct"]}'
|
| 171 |
|
| 172 |
data = {
|
|
|
|
| 215 |
filesize = filename.stat().st_size
|
| 216 |
|
| 217 |
js = self.pre_upload(filename=filename, filesize=filesize)
|
| 218 |
+
endpoint = js["endpoint"]
|
| 219 |
upos_uri = js["upos_uri"].split("//")[-1]
|
| 220 |
auth = js["auth"]
|
| 221 |
biz_id = js["biz_id"]
|
| 222 |
chunk_size = js["chunk_size"]
|
| 223 |
chunks = math.ceil(filesize / chunk_size)
|
| 224 |
|
| 225 |
+
upload_video_id_response = self.get_upload_video_id(
|
| 226 |
+
endpoint=endpoint,
|
| 227 |
+
upos_uri=upos_uri,
|
| 228 |
+
auth=auth,
|
| 229 |
+
)
|
| 230 |
upload_id = upload_video_id_response["upload_id"]
|
| 231 |
key = upload_video_id_response["key"]
|
| 232 |
|
| 233 |
bilibili_filename = re.search(r"/(.*)\.", key).group(1)
|
| 234 |
fileio = filename.open(mode="rb")
|
| 235 |
self.upload_video_in_chunks(
|
| 236 |
+
endpoint=endpoint,
|
| 237 |
upos_uri=upos_uri,
|
| 238 |
auth=auth,
|
| 239 |
upload_id=upload_id,
|
|
|
|
| 246 |
|
| 247 |
# notify the all chunks have been uploaded
|
| 248 |
self.finish_upload(
|
| 249 |
+
endpoint=endpoint,
|
| 250 |
upos_uri=upos_uri, auth=auth, filename=filename,
|
| 251 |
upload_id=upload_id, biz_id=biz_id, chunks=chunks
|
| 252 |
)
|
| 253 |
+
return biz_id, upload_id, bilibili_filename
|
|
|
|
| 254 |
|
| 255 |
def upload_video_and_publish(self, filename: str, metadata: dict):
|
| 256 |
+
_, upload_id, bilibili_filename = self.upload_video_file(filename)
|
| 257 |
+
logger.info(f"finish uploading, upload_id: {upload_id}, bilibili_filename: {bilibili_filename}, filename: {filename}")
|
| 258 |
publish_video_response = self.publish_video(bilibili_filename=bilibili_filename, metadata=metadata)
|
| 259 |
|
| 260 |
bvid = None
|
|
|
|
| 271 |
raise KeyError(f"publish_video failed; KeyError: {error}, publish_video_response: {publish_video_response}")
|
| 272 |
return bvid
|
| 273 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 274 |
|
| 275 |
class BilibiliVideoUploader20221109(BilibiliVideoUploader20200810):
|
| 276 |
def __init__(self):
|
|
|
|
| 295 |
"build": "2140000",
|
| 296 |
"size": filesize,
|
| 297 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 298 |
response = requests.request(
|
| 299 |
# method="GET",
|
| 300 |
method="POST",
|
|
|
|
| 319 |
stop=stop_after_attempt(3),
|
| 320 |
before_sleep=before_sleep_log(logger, logging.ERROR),
|
| 321 |
)
|
| 322 |
+
def get_upload_video_id(self,
|
| 323 |
+
endpoint, upos_uri, auth,
|
| 324 |
filesize, chunk_size, biz_id,
|
| 325 |
**kwargs
|
| 326 |
):
|
|
|
|
| 329 |
"profile": "ugcfx/bup",
|
| 330 |
"filesize": filesize,
|
| 331 |
"partsize": chunk_size,
|
|
|
|
| 332 |
}
|
| 333 |
response = requests.request(
|
| 334 |
method="POST",
|
|
|
|
| 348 |
raise AssertionError(f"request failed;")
|
| 349 |
return js
|
| 350 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 351 |
@retry(
|
| 352 |
wait=wait_fixed(10),
|
| 353 |
stop=stop_after_attempt(3),
|
|
|
|
| 363 |
"uploadId": upload_id,
|
| 364 |
"biz_id": biz_id
|
| 365 |
}
|
|
|
|
| 366 |
data = {
|
| 367 |
"parts": [
|
| 368 |
{"partNumber": i+1, "eTag": "etag"}
|
| 369 |
for i in range(chunks)
|
| 370 |
]
|
| 371 |
}
|
|
|
|
| 372 |
response = requests.request(
|
| 373 |
method="POST",
|
| 374 |
url=url,
|
|
|
|
| 393 |
before_sleep=before_sleep_log(logger, logging.ERROR),
|
| 394 |
)
|
| 395 |
def publish_video(self, bilibili_filename, metadata: dict):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 396 |
url = f'https://member.bilibili.com/x/vu/web/add?csrf={self.cookies["bili_jct"]}'
|
| 397 |
|
| 398 |
data = {
|
|
|
|
| 473 |
)
|
| 474 |
fileio.close()
|
| 475 |
|
|
|
|
| 476 |
self.finish_upload(
|
| 477 |
endpoint=endpoint,
|
| 478 |
upos_uri=upos_uri, auth=auth, filename=filename.name,
|
|
|
|
| 481 |
|
| 482 |
return biz_id, upload_id, bilibili_filename
|
| 483 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 484 |
|
| 485 |
+
# BilibiliVideoUploader = BilibiliVideoUploader20200810
|
| 486 |
+
BilibiliVideoUploader = BilibiliVideoUploader20221109
|
| 487 |
|
| 488 |
|
| 489 |
def get_args():
|
|
|
|
| 495 |
)
|
| 496 |
parser.add_argument(
|
| 497 |
"--filename",
|
| 498 |
+
default=(project_path / "data/tasks/chenjieshen_douyin_video_to_bilibili/video/douyin/陈杰森/754766069892763162520250908_101827首富黄光裕王者归来携国美杀入AI社交赛道 资本新秀陈杰森对话商业传奇二资本市场背后首富眼中的.mp4").as_posix(),
|
| 499 |
type=str
|
| 500 |
)
|
| 501 |
args = parser.parse_args()
|