Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
Nandaka committed Oct 24, 2020
1 parent 44062b9 commit c3a1a9f
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 38 deletions.
57 changes: 30 additions & 27 deletions PixivDownloadHandler.py
Original file line number Diff line number Diff line change
Expand Up @@ -312,59 +312,62 @@ def get_remote_filesize(url, referer, config, notifier=None):
return file_size


def handle_ugoira(image, filename, config, notifier):
def handle_ugoira(image, zip_filename, config, notifier):
if notifier is None:
notifier = PixivHelper.dummy_notifier

if filename.endswith(".zip"):
ugo_name = filename[:-4] + ".ugoira"
if zip_filename.endswith(".zip"):
ugo_name = zip_filename[:-4] + ".ugoira"
else:
ugo_name = filename
ugo_name = zip_filename

if not os.path.exists(ugo_name):
PixivHelper.print_and_log('info', "Creating ugoira archive => " + ugo_name)
image.CreateUgoira(filename)
PixivHelper.print_and_log('info', f"Creating ugoira archive => {ugo_name}")
image.create_ugoira(zip_filename)
# set last-modified and last-accessed timestamp
if config.setLastModified and ugo_name is not None and os.path.isfile(ugo_name):
ts = time.mktime(image.worksDateDateTime.timetuple())
os.utime(ugo_name, (ts, ts))

if config.deleteZipFile and os.path.exists(filename):
PixivHelper.print_and_log('info', "Deleting zip file => " + filename)
os.remove(filename)

if config.createGif:
gif_filename = ugo_name[:-7] + ".gif"
if not os.path.exists(gif_filename):
PixivHelper.ugoira2gif(ugo_name, gif_filename, config.deleteUgoira, image=image)
PixivHelper.ugoira2gif(ugo_name,
gif_filename,
image=image)

if config.createApng:
gif_filename = ugo_name[:-7] + ".png"
if not os.path.exists(gif_filename):
try:
PixivHelper.ugoira2apng(ugo_name, gif_filename, config.deleteUgoira, image=image)
except Exception:
exc_type, exc_value, exc_traceback = sys.exc_info()
traceback.print_exception(exc_type, exc_value, exc_traceback)
PixivHelper.print_and_log('error', f'Error at handle_ugoira(): {sys.exc_info()} at when converting image id: {image.imageId} to aPNG.')
apng_filename = ugo_name[:-7] + ".png"
if not os.path.exists(apng_filename):
PixivHelper.ugoira2apng(ugo_name,
apng_filename,
image=image)

if config.createWebm:
gif_filename = ugo_name[:-7] + "." + config.ffmpegExt
if not os.path.exists(gif_filename):
webm_filename = ugo_name[:-7] + "." + config.ffmpegExt
if not os.path.exists(webm_filename):
PixivHelper.ugoira2webm(ugo_name,
gif_filename,
config.deleteUgoira,
webm_filename,
config.ffmpeg,
config.ffmpegCodec,
config.ffmpegParam,
config.ffmpegExt,
image)
if config.createWebp:
gif_filename = ugo_name[:-7] + ".webp"
if not os.path.exists(gif_filename):
webp_filename = ugo_name[:-7] + ".webp"
if not os.path.exists(webp_filename):
PixivHelper.ugoira2webm(ugo_name,
gif_filename,
config.deleteUgoira,
webp_filename,
config.ffmpeg,
config.webpCodec,
config.webpParam,
"webp",
image)

if config.deleteZipFile and os.path.exists(zip_filename) and zip_filename.endswith(".zip"):
PixivHelper.print_and_log('info', f"Deleting zip file => {zip_filename}")
os.remove(zip_filename)

if config.deleteUgoira and os.path.exists(ugo_name) and ugo_name.endswith(".ugoira"):
PixivHelper.print_and_log('info', f"Deleting ugoira file => {ugo_name}")
os.remove(ugo_name)
11 changes: 2 additions & 9 deletions PixivHelper.py
Original file line number Diff line number Diff line change
Expand Up @@ -850,25 +850,23 @@ def write_url_in_description(image, blacklistRegex, filenamePattern):
info.close()


def ugoira2gif(ugoira_file, exportname, delete_ugoira, fmt='gif', image=None):
def ugoira2gif(ugoira_file, exportname, fmt='gif', image=None):
print_and_log('info', 'processing ugoira to animated gif...')
# Issue #802 use ffmpeg to convert to gif
ugoira2webm(ugoira_file,
exportname,
delete_ugoira,
ffmpeg=_config.ffmpeg,
codec=None,
param="-filter_complex \"[0:v]split[a][b];[a]palettegen=stats_mode=diff[p];[b][p]paletteuse=dither=bayer:bayer_scale=5:diff_mode=rectangle\"",
extension="gif",
image=image)


def ugoira2apng(ugoira_file, exportname, delete_ugoira, image=None):
def ugoira2apng(ugoira_file, exportname, image=None):
print_and_log('info', 'processing ugoira to apng...')
# fix #796 convert apng using ffmpeg
ugoira2webm(ugoira_file,
exportname,
delete_ugoira,
ffmpeg=_config.ffmpeg,
codec="apng",
param="-vf \"setpts=PTS-STARTPTS,hqdn3d=1.5:1.5:6:6\" -plays 0",
Expand All @@ -878,7 +876,6 @@ def ugoira2apng(ugoira_file, exportname, delete_ugoira, image=None):

def ugoira2webm(ugoira_file,
exportname,
delete_ugoira,
ffmpeg=u"ffmpeg",
codec="libvpx-vp9",
param="-lossless 1 -vsync 2 -r 999 -pix_fmt yuv420p",
Expand Down Expand Up @@ -938,10 +935,6 @@ def ugoira2webm(ugoira_file,
ret = p.wait()
shutil.move(tempname, exportname)

if delete_ugoira:
print_and_log('info', f'- Deleting ugoira {ugoira_file}')
os.remove(ugoira_file)

if ret is not None:
print_and_log(None, f"- Done with status = {ret}")

Expand Down
5 changes: 3 additions & 2 deletions PixivImage.py
Original file line number Diff line number Diff line change
Expand Up @@ -431,7 +431,7 @@ def WriteUgoiraData(self, filename):
info.write(str(self.ugoira_data))
info.close()

def CreateUgoira(self, filename):
def create_ugoira(self, filename) -> bool:
if len(self.ugoira_data) == 0:
PixivHelper.get_logger().exception("Missing ugoira animation info for image: %d", self.imageId)

Expand All @@ -444,6 +444,7 @@ def CreateUgoira(self, filename):
jsStr = self.ugoira_data[:-1] + r',"zipSize":' + str(zipSize) + r'}'
with zipfile.ZipFile(zipTarget, mode="a") as z:
z.writestr("animation.json", jsStr)
return True

def parseJs(self, page):
parsed = BeautifulSoup(page, features="html5lib")
Expand Down Expand Up @@ -511,6 +512,6 @@ def print_info(self):
PixivHelper.safePrint(f'Title : {self.title}')
PixivHelper.safePrint(f'Description : {self.description}')
PixivHelper.safePrint(f'Pages : {self.current_page} of {int(self.total_works/works_per_page)}')
PixivHelper.safePrint(f'Works :')
PixivHelper.safePrint('Works :')
for (work_id, order) in self.pages_with_order:
PixivHelper.safePrint(f' - [{order}] {work_id}')

0 comments on commit c3a1a9f

Please sign in to comment.