videoconverter-worker 1.0.6__py3-none-any.whl → 1.0.8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: videoconverter-worker
3
- Version: 1.0.6
3
+ Version: 1.0.8
4
4
  Summary: VideoConverter Python Worker:从 queue 目录读取任务并执行切分/去字幕/合成
5
5
  License: MIT
6
6
  Keywords: videoconverter,ffmpeg,worker,video
@@ -0,0 +1,10 @@
1
+ ffmpeg_runner.py,sha256=2sYugXkKp-NKj3ahxbwbhAo4G49FDu-0oze-cdJvcY0,12218
2
+ metadata.py,sha256=32zQn7jJ6XTHhunwTn5Xv0qmpjHnap_pkPxY0XI8MBs,3116
3
+ schema.py,sha256=3ILdGl5qSQOSvKfiKWcnaxdyHwV4rDvGnRZIparVp3o,4361
4
+ task_queue.py,sha256=sYQelPRuTbP9g_sPs69xOR3n5SIxGBFxY4EI5ueQrQs,11822
5
+ worker.py,sha256=oDd4NG0OM5GsoYnRNf8XtcwIyoe8Zd7SkXABrC8WqzM,22417
6
+ videoconverter_worker-1.0.8.dist-info/METADATA,sha256=rPAbe8ov972I4JqYOylfTTlFlJuQkavM51e0oYpbCoo,5139
7
+ videoconverter_worker-1.0.8.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
8
+ videoconverter_worker-1.0.8.dist-info/entry_points.txt,sha256=qedJjjix02n9Hz8adBioDIpGHghm8S3fQZdFwM5LV1A,83
9
+ videoconverter_worker-1.0.8.dist-info/top_level.txt,sha256=iamWyiqUZ4X0_2UZx6GEk9gsPmiI9qhse_15HqtzUj8,48
10
+ videoconverter_worker-1.0.8.dist-info/RECORD,,
worker.py CHANGED
@@ -31,14 +31,26 @@ logging.basicConfig(
31
31
  logger = logging.getLogger("worker")
32
32
 
33
33
 
34
+ def _cpu_ram_str() -> str:
35
+ """若已安装 psutil 则返回 ' CPU 12% RAM 34%',否则返回空字符串。不增加强制依赖。"""
36
+ try:
37
+ import psutil
38
+ cpu = psutil.cpu_percent(interval=None)
39
+ mem = psutil.virtual_memory().percent
40
+ return f" CPU {cpu:.0f}% RAM {mem:.0f}%"
41
+ except Exception:
42
+ return ""
43
+
44
+
34
45
  def _desub_spinner(stop_event: threading.Event) -> None:
35
- """去字幕阶段同一行跑马灯,避免用户以为死机。"""
46
+ """去字幕阶段同一行跑马灯,避免用户以为死机。仅 TTY 且 1 秒刷新一次;若已装 psutil 会显示 CPU/RAM 占用。"""
36
47
  i = 0
37
- while not stop_event.wait(0.25):
48
+ while not stop_event.wait(1.0):
38
49
  dots = "." * ((i % 3) + 1)
39
50
  try:
40
51
  ts = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
41
- sys.stderr.write(f"\r{ts} [INFO] worker: 去字幕中 {dots} ")
52
+ extra = _cpu_ram_str()
53
+ sys.stderr.write(f"\r{ts} [INFO] worker: 去字幕中{extra} {dots} ")
42
54
  sys.stderr.flush()
43
55
  except (OSError, UnicodeEncodeError):
44
56
  break
@@ -353,11 +365,23 @@ def run_simple_compose(
353
365
  chunk_list = [c for c in (metadata.get("chunks") or []) if c.get("originalPath")]
354
366
  logger.info("切分完成: %d 块,开始去字幕", len(chunk_list))
355
367
 
368
+ use_spinner = getattr(sys.stderr, "isatty", lambda: False)() # 仅真正终端跑跑马灯,避免 Colab/后台时满屏刷日志
356
369
  stop_spinner = threading.Event()
357
370
  spinner = threading.Thread(target=_desub_spinner, args=(stop_spinner,), daemon=True)
358
- spinner.start()
371
+
372
+ def _stop_spinner_newline():
373
+ stop_spinner.set()
374
+ spinner.join(timeout=1.5)
375
+ try:
376
+ sys.stderr.write("\n")
377
+ sys.stderr.flush()
378
+ except (OSError, UnicodeEncodeError):
379
+ pass
380
+
381
+ if use_spinner:
382
+ spinner.start()
359
383
  try:
360
- for ch in chunk_list:
384
+ for i, ch in enumerate(chunk_list):
361
385
  rel = ch.get("originalPath", "")
362
386
  if not rel:
363
387
  continue
@@ -375,17 +399,18 @@ def run_simple_compose(
375
399
  cfg["endTime"] = 0
376
400
  cfg["forceKeyframeAtStart"] = True
377
401
  run_desubtitle(cfg, str(chunk_path), str(output_file))
402
+ if use_spinner:
403
+ _stop_spinner_newline()
378
404
  meta_path = Path(output_dir) / video_id / "metadata.json"
379
405
  if meta_path.exists():
380
406
  update_chunk_processed(str(meta_path), chunk_id, str(output_file))
407
+ if use_spinner and i + 1 < len(chunk_list):
408
+ stop_spinner = threading.Event()
409
+ spinner = threading.Thread(target=_desub_spinner, args=(stop_spinner,), daemon=True)
410
+ spinner.start()
381
411
  finally:
382
- stop_spinner.set()
383
- spinner.join(timeout=1.0)
384
- try:
385
- sys.stderr.write("\n")
386
- sys.stderr.flush()
387
- except (OSError, UnicodeEncodeError):
388
- pass
412
+ if use_spinner:
413
+ _stop_spinner_newline()
389
414
 
390
415
  data = load_metadata(str(Path(output_dir) / video_id / "metadata.json"))
391
416
  processed = get_processed_chunks(data)
@@ -445,7 +470,7 @@ def main() -> int:
445
470
  parser.add_argument(
446
471
  "--dir",
447
472
  default=".",
448
- help="简易模式:工作目录,默认当前目录",
473
+ help="简易模式:工作目录(支持相对路径),不存在则自动创建,默认当前目录",
449
474
  )
450
475
  parser.add_argument(
451
476
  "--start",
@@ -506,9 +531,12 @@ def main() -> int:
506
531
 
507
532
  if args.simple:
508
533
  base = Path(args.dir).resolve()
509
- if not base.is_dir():
510
- logger.error("目录不存在: %s", base)
534
+ if base.exists() and not base.is_dir():
535
+ logger.error("路径已存在但不是目录: %s", base)
511
536
  return 1
537
+ if not base.exists():
538
+ base.mkdir(parents=True, exist_ok=True)
539
+ logger.info("已创建工作目录: %s", base)
512
540
  out_dir = Path(args.output).resolve() if args.output else (base / "videoconverter_out")
513
541
  out_dir.mkdir(parents=True, exist_ok=True)
514
542
  if args.file:
@@ -1,10 +0,0 @@
1
- ffmpeg_runner.py,sha256=2sYugXkKp-NKj3ahxbwbhAo4G49FDu-0oze-cdJvcY0,12218
2
- metadata.py,sha256=32zQn7jJ6XTHhunwTn5Xv0qmpjHnap_pkPxY0XI8MBs,3116
3
- schema.py,sha256=3ILdGl5qSQOSvKfiKWcnaxdyHwV4rDvGnRZIparVp3o,4361
4
- task_queue.py,sha256=sYQelPRuTbP9g_sPs69xOR3n5SIxGBFxY4EI5ueQrQs,11822
5
- worker.py,sha256=JEuCMeqFzNIepJP6fDEWeokA2zZ3eJ6MnxkewmFGXGE,21143
6
- videoconverter_worker-1.0.6.dist-info/METADATA,sha256=YsRlsAkXt7kn4M4hbHz87OQ6FcPfsnOPtU1np3fneh4,5139
7
- videoconverter_worker-1.0.6.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
8
- videoconverter_worker-1.0.6.dist-info/entry_points.txt,sha256=qedJjjix02n9Hz8adBioDIpGHghm8S3fQZdFwM5LV1A,83
9
- videoconverter_worker-1.0.6.dist-info/top_level.txt,sha256=iamWyiqUZ4X0_2UZx6GEk9gsPmiI9qhse_15HqtzUj8,48
10
- videoconverter_worker-1.0.6.dist-info/RECORD,,