弹幕字体设置

This commit is contained in:
Jerry Yan 2022-12-05 14:36:00 +08:00
parent 29034f42f3
commit 9395fec802
3 changed files with 18 additions and 15 deletions

View File

@ -8,7 +8,7 @@ DANMAKU_FACTORY_EXEC = "DanmakuFactory"
# speed # speed
DANMAKU_SPEED = 12 DANMAKU_SPEED = 12
# font # font
DEFAULT_FONT_NAME = "Sarasa Term SC" DANMAKU_FONT_NAME = "Sarasa Term SC"
# font_size # font_size
DANMAKU_FONT_SIZE = 40 DANMAKU_FONT_SIZE = 40
# resolution # resolution
@ -22,6 +22,8 @@ FFMPEG_USE_HEVC = False
FFMPEG_USE_NVIDIA_GPU = False FFMPEG_USE_NVIDIA_GPU = False
# intel_gpu # intel_gpu
FFMPEG_USE_INTEL_GPU = False FFMPEG_USE_INTEL_GPU = False
# vaapi
FFMPEG_USE_VAAPI = False
# bitrate # bitrate
VIDEO_BITRATE = "2.5M" VIDEO_BITRATE = "2.5M"
# crf # crf
@ -66,10 +68,10 @@ def load_config():
config.read("config.ini", encoding="utf-8") config.read("config.ini", encoding="utf-8")
if config.has_section("danmaku"): if config.has_section("danmaku"):
section = config['danmaku'] section = config['danmaku']
global DANMAKU_FACTORY_EXEC, DANMAKU_SPEED, DEFAULT_FONT_NAME, VIDEO_RESOLUTION, DANMAKU_FONT_SIZE global DANMAKU_FACTORY_EXEC, DANMAKU_SPEED, DANMAKU_FONT_NAME, VIDEO_RESOLUTION, DANMAKU_FONT_SIZE
DANMAKU_FACTORY_EXEC = section.get('exec', DANMAKU_FACTORY_EXEC) DANMAKU_FACTORY_EXEC = section.get('exec', DANMAKU_FACTORY_EXEC)
DANMAKU_SPEED = section.getfloat('speed', DANMAKU_SPEED) DANMAKU_SPEED = section.getfloat('speed', DANMAKU_SPEED)
DEFAULT_FONT_NAME = section.get('font', DEFAULT_FONT_NAME) DANMAKU_FONT_NAME = section.get('font', DANMAKU_FONT_NAME)
DANMAKU_FONT_SIZE = section.getint('font_size', DANMAKU_FONT_SIZE) DANMAKU_FONT_SIZE = section.getint('font_size', DANMAKU_FONT_SIZE)
VIDEO_RESOLUTION = section.get('resolution', VIDEO_RESOLUTION) VIDEO_RESOLUTION = section.get('resolution', VIDEO_RESOLUTION)
if config.has_section("video"): if config.has_section("video"):
@ -88,11 +90,12 @@ def load_config():
if config.has_section("ffmpeg"): if config.has_section("ffmpeg"):
section = config['ffmpeg'] section = config['ffmpeg']
global FFMPEG_EXEC, FFMPEG_USE_HEVC, FFMPEG_USE_NVIDIA_GPU, FFMPEG_USE_INTEL_GPU, VIDEO_BITRATE, VIDEO_CRF, \ global FFMPEG_EXEC, FFMPEG_USE_HEVC, FFMPEG_USE_NVIDIA_GPU, FFMPEG_USE_INTEL_GPU, VIDEO_BITRATE, VIDEO_CRF, \
VIDEO_GOP VIDEO_GOP, FFMPEG_USE_VAAPI
FFMPEG_EXEC = section.get('exec', FFMPEG_EXEC) FFMPEG_EXEC = section.get('exec', FFMPEG_EXEC)
FFMPEG_USE_HEVC = section.getboolean('hevc', FFMPEG_USE_HEVC) FFMPEG_USE_HEVC = section.getboolean('hevc', FFMPEG_USE_HEVC)
FFMPEG_USE_NVIDIA_GPU = section.getboolean('nvidia_gpu', FFMPEG_USE_NVIDIA_GPU) FFMPEG_USE_NVIDIA_GPU = section.getboolean('nvidia_gpu', FFMPEG_USE_NVIDIA_GPU)
FFMPEG_USE_INTEL_GPU = section.getboolean('intel_gpu', FFMPEG_USE_INTEL_GPU) FFMPEG_USE_INTEL_GPU = section.getboolean('intel_gpu', FFMPEG_USE_INTEL_GPU)
FFMPEG_USE_VAAPI = section.getboolean('vaapi', FFMPEG_USE_VAAPI)
VIDEO_BITRATE = section.get('bitrate', VIDEO_BITRATE) VIDEO_BITRATE = section.get('bitrate', VIDEO_BITRATE)
VIDEO_CRF = section.getfloat('crf', VIDEO_CRF) VIDEO_CRF = section.getfloat('crf', VIDEO_CRF)
VIDEO_GOP = section.getfloat('gop', VIDEO_GOP) VIDEO_GOP = section.getfloat('gop', VIDEO_GOP)
@ -110,7 +113,7 @@ def get_config():
'danmaku': { 'danmaku': {
'exec': DANMAKU_FACTORY_EXEC, 'exec': DANMAKU_FACTORY_EXEC,
'speed': DANMAKU_SPEED, 'speed': DANMAKU_SPEED,
'font': DEFAULT_FONT_NAME, 'font': DANMAKU_FONT_NAME,
'font_size': DANMAKU_FONT_SIZE, 'font_size': DANMAKU_FONT_SIZE,
'resolution': VIDEO_RESOLUTION, 'resolution': VIDEO_RESOLUTION,
}, },
@ -130,6 +133,7 @@ def get_config():
'hevc': FFMPEG_USE_HEVC, 'hevc': FFMPEG_USE_HEVC,
'nvidia_gpu': FFMPEG_USE_NVIDIA_GPU, 'nvidia_gpu': FFMPEG_USE_NVIDIA_GPU,
'intel_gpu': FFMPEG_USE_INTEL_GPU, 'intel_gpu': FFMPEG_USE_INTEL_GPU,
'vaapi': FFMPEG_USE_VAAPI,
'bitrate': VIDEO_BITRATE, 'bitrate': VIDEO_BITRATE,
'crf': VIDEO_CRF, 'crf': VIDEO_CRF,
'gop': VIDEO_GOP, 'gop': VIDEO_GOP,

View File

@ -3,7 +3,6 @@ import os.path
import platform import platform
import subprocess import subprocess
import sys import sys
import threading
import traceback import traceback
from hashlib import md5 from hashlib import md5
from typing import Optional, IO, Union from typing import Optional, IO, Union
@ -15,8 +14,8 @@ from PyQt5.QtWidgets import QWidget, QLabel, QApplication, QFrame, QVBoxLayout,
QSizePolicy, QMessageBox QSizePolicy, QMessageBox
from danmaku_xml_helper import get_file_start, diff_danmaku_files, NoDanmakuException from danmaku_xml_helper import get_file_start, diff_danmaku_files, NoDanmakuException
from config import load_config, FFMPEG_EXEC, DANMAKU_FACTORY_EXEC, FFMPEG_USE_INTEL_GPU, FFMPEG_USE_NVIDIA_GPU, \ from config import load_config, FFMPEG_EXEC, DANMAKU_FACTORY_EXEC, FFMPEG_USE_INTEL_GPU, FFMPEG_USE_NVIDIA_GPU, \
VIDEO_BITRATE, VIDEO_CLIP_EACH_SEC, VIDEO_CLIP_OVERFLOW_SEC, VIDEO_RESOLUTION, DANMAKU_SPEED, DEFAULT_FONT_NAME, \ VIDEO_BITRATE, VIDEO_CLIP_EACH_SEC, VIDEO_CLIP_OVERFLOW_SEC, VIDEO_RESOLUTION, DANMAKU_SPEED, DANMAKU_FONT_NAME, \
VIDEO_OUTPUT_DIR, VIDEO_CRF, VIDEO_GOP, FFMPEG_USE_HEVC VIDEO_OUTPUT_DIR, VIDEO_CRF, VIDEO_GOP, FFMPEG_USE_HEVC, DANMAKU_FONT_SIZE
class Job: class Job:
@ -304,11 +303,10 @@ class WorkerThread(QThread):
# 压制 # 压制
files_need_split = self.encode_video_with_subtitles(job.video, job.subtitles, base_start_ts) files_need_split = self.encode_video_with_subtitles(job.video, job.subtitles, base_start_ts)
for _f in files_need_split: for _f in files_need_split:
self.quick_split_video(_f) need_delete = self.quick_split_video(_f)
for _f in job.subtitles: if need_delete:
if os.path.isfile(_f):
os.remove(_f) os.remove(_f)
for _f in files_need_split: for _f in job.subtitles:
if os.path.isfile(_f): if os.path.isfile(_f):
os.remove(_f) os.remove(_f)
@ -343,7 +341,7 @@ class WorkerThread(QThread):
current_sec = 0 current_sec = 0
if duration < VIDEO_CLIP_EACH_SEC: if duration < VIDEO_CLIP_EACH_SEC:
print("[-]Less than each sec, skip") print("[-]Less than each sec, skip")
return return False
while current_sec < duration: while current_sec < duration:
if (current_sec + VIDEO_CLIP_OVERFLOW_SEC * 2) > duration: if (current_sec + VIDEO_CLIP_OVERFLOW_SEC * 2) > duration:
print("[-]Less than 2 overflow sec, skip") print("[-]Less than 2 overflow sec, skip")
@ -362,6 +360,7 @@ class WorkerThread(QThread):
self.handle_ffmpeg_output(split_process.stdout) self.handle_ffmpeg_output(split_process.stdout)
split_process.wait() split_process.wait()
current_sec += VIDEO_CLIP_EACH_SEC current_sec += VIDEO_CLIP_EACH_SEC
return True
def handle_ffmpeg_output(self, stdout: Optional[IO[bytes]]) -> str: def handle_ffmpeg_output(self, stdout: Optional[IO[bytes]]) -> str:
out_time = "0:0:0.0" out_time = "0:0:0.0"
@ -406,7 +405,7 @@ def danmaku_to_subtitle(file: Union[os.PathLike[str], str], time_shift: float):
process = subprocess.Popen(( process = subprocess.Popen((
DANMAKU_FACTORY_EXEC, "--ignore-warnings", DANMAKU_FACTORY_EXEC, "--ignore-warnings",
"-r", str(VIDEO_RESOLUTION), "-s", str(DANMAKU_SPEED), "-f", "5", "-r", str(VIDEO_RESOLUTION), "-s", str(DANMAKU_SPEED), "-f", "5",
"-S", "40", "-N", str(DEFAULT_FONT_NAME), "--showmsgbox", "FALSE", "-S", str(DANMAKU_FONT_SIZE), "-N", str(DANMAKU_FONT_NAME), "--showmsgbox", "FALSE",
"-O", "255", "-L", "1", "-D", "0", "-O", "255", "-L", "1", "-D", "0",
"-o", "ass", new_subtitle_name, "-i", file, "-t", str(time_shift) "-o", "ass", new_subtitle_name, "-i", file, "-t", str(time_shift)
), **subprocess_args(True)) ), **subprocess_args(True))

View File

@ -5,7 +5,7 @@ from typing import Union
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
from config import DANMAKU_FACTORY_EXEC, VIDEO_RESOLUTION, DANMAKU_SPEED, DEFAULT_FONT_NAME from config import DANMAKU_FACTORY_EXEC, VIDEO_RESOLUTION, DANMAKU_SPEED, DANMAKU_FONT_NAME
class NoDanmakuException(Exception): class NoDanmakuException(Exception):