mirror of
https://github.com/RekuNote/Hatenatools3.git
synced 2026-10-30 08:19:12 +00:00
Made many aspects of the program into functions so that they can be reused more efficiently in other commands
This commit is contained in:
1 parent
53d094b39e
commit
4c0c19f1d7
1 file changed
+59
-18
@@ -15,6 +15,7 @@
|
|||||||
import sys, wave, audioop, re, os #needs os and time aswell in CMD mode (UPDATE 2018/07/04: os used to get devnull for discarding subprocess output)
|
import sys, wave, audioop, re, os #needs os and time aswell in CMD mode (UPDATE 2018/07/04: os used to get devnull for discarding subprocess output)
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import subprocess # used for ffmpeg
|
import subprocess # used for ffmpeg
|
||||||
|
import tempfile, shutil # temporary directory whilst exporting, shutil to clean up after
|
||||||
try:
|
try:
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
hasPIL = True
|
hasPIL = True
|
||||||
@@ -625,6 +626,26 @@ def get_metadata(flipnote):
|
|||||||
|
|
||||||
return meta
|
return meta
|
||||||
|
|
||||||
|
def DumpFrames(flipnote,directory):
|
||||||
|
for i in xrange(flipnote.FrameCount):
|
||||||
|
print "Dumping frame #%i..." % (i+1),
|
||||||
|
WriteImage(flipnote.GetFrame(i), os.path.join(directory, "frame %s.png" % str(i+1).zfill(3)))
|
||||||
|
|
||||||
|
def DumpSoundFiles(flipnote,directory,raw=False):
|
||||||
|
for i, data in enumerate(flipnote.SoundData):
|
||||||
|
if not data: continue
|
||||||
|
path = os.path.join(directory, ("BGM.wav", "SFX1.wav", "SFX2.wav", "SFX3.wav")[i])
|
||||||
|
flipnote.GetSound(i, path)
|
||||||
|
|
||||||
|
if raw:
|
||||||
|
f = open(path[:-3]+"bin", "wb")
|
||||||
|
f.write(data)
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
def DumpSFXUsage(flipnote,directory):
|
||||||
|
with open(os.path.join(directory, "SFX usage.txt"), "w") as f:
|
||||||
|
for i, (s1, s2, s3) in enumerate(flipnote.SFXUsage):
|
||||||
|
f.write("Frame %i:%s%s%s\n" % (i, " SFX1"*s1, " SFX2"*s2, " SFX3"*s3))
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print " == PPM.py =="
|
print " == PPM.py =="
|
||||||
@@ -641,6 +662,7 @@ if __name__ == '__main__':
|
|||||||
print " -f: Extracts the frame(s) to <Output>"
|
print " -f: Extracts the frame(s) to <Output>"
|
||||||
print " -s: Dumps the sound files to the folder <Output>"
|
print " -s: Dumps the sound files to the folder <Output>"
|
||||||
print " -S: Same as mode -s, but will also dump the raw sound data files"
|
print " -S: Same as mode -s, but will also dump the raw sound data files"
|
||||||
|
print " -e: Exports the flipnote to an MKV"
|
||||||
print " -m: Prints out the metadata. Can also write it to <output> which also"
|
print " -m: Prints out the metadata. Can also write it to <output> which also"
|
||||||
print " supports unicode charactes."
|
print " supports unicode charactes."
|
||||||
print " -oa: Seach a directory for an original author that matches the RegEx"
|
print " -oa: Seach a directory for an original author that matches the RegEx"
|
||||||
@@ -692,10 +714,9 @@ if __name__ == '__main__':
|
|||||||
print "Error!\nThe specified directory doesn't exist!"
|
print "Error!\nThe specified directory doesn't exist!"
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
for i in xrange(flipnote.FrameCount):
|
DumpFrames(flipnote,sys.argv[3])
|
||||||
print "Dumping frame #%i..." % (i+1),
|
|
||||||
WriteImage(flipnote.GetFrame(i), os.path.join(sys.argv[3], "frame %s.png" % str(i+1).zfill(3)))
|
print "Done!"
|
||||||
print "Done!"
|
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
int(sys.argv[4])
|
int(sys.argv[4])
|
||||||
@@ -731,22 +752,11 @@ if __name__ == '__main__':
|
|||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
print "Converting the sound files...",
|
print "Converting the sound files...",
|
||||||
for i, data in enumerate(flipnote.SoundData):
|
DumpSoundFiles(flipnote,sys.argv[3],raw=(sys.argv[1]=="-S"))
|
||||||
if not data: continue
|
|
||||||
path = os.path.join(sys.argv[3], ("BGM.wav", "SFX1.wav", "SFX2.wav", "SFX3.wav")[i])
|
|
||||||
flipnote.GetSound(i, path)
|
|
||||||
|
|
||||||
if sys.argv[1] == "-S":
|
|
||||||
f = open(path[:-3]+"bin", "wb")
|
|
||||||
f.write(data)
|
|
||||||
f.close()
|
|
||||||
print "Done!"
|
print "Done!"
|
||||||
|
|
||||||
print "Dumping the sound effect usage...",
|
print "Dumping the sound effect usage...",
|
||||||
f = open(os.path.join(sys.argv[3], "SFX usage.txt"), "w")
|
DumpSFXUsage(flipnote,sys.argv[3])
|
||||||
for i, (s1, s2, s3) in enumerate(flipnote.SFXUsage):
|
|
||||||
f.write("Frame %i:%s%s%s\n" % (i, " SFX1"*s1, " SFX2"*s2, " SFX3"*s3))
|
|
||||||
f.close()
|
|
||||||
print "Done!"
|
print "Done!"
|
||||||
elif sys.argv[1] == "-m":
|
elif sys.argv[1] == "-m":
|
||||||
epoch = time.mktime(time.struct_time([2000, 1, 1, 0, 0, 0, 5, 1, -1]))
|
epoch = time.mktime(time.struct_time([2000, 1, 1, 0, 0, 0, 5, 1, -1]))
|
||||||
@@ -785,7 +795,7 @@ if __name__ == '__main__':
|
|||||||
print "Error!\nSpecified file doesn't exist!"
|
print "Error!\nSpecified file doesn't exist!"
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
filetype = "ppm" if filename[-3:] == "ppm" else "tmb"
|
filetype = "ppm" if filename[-3:].lower() == "ppm" else "tmb"
|
||||||
flipnote = TMB().ReadFile(filename) if filetype == "tmb" else PPM().ReadFile(filename, ReadFrames=False)
|
flipnote = TMB().ReadFile(filename) if filetype == "tmb" else PPM().ReadFile(filename, ReadFrames=False)
|
||||||
if not flipnote:
|
if not flipnote:
|
||||||
continue
|
continue
|
||||||
@@ -794,5 +804,36 @@ if __name__ == '__main__':
|
|||||||
if regex.match(meta["Original author"]):
|
if regex.match(meta["Original author"]):
|
||||||
print filename
|
print filename
|
||||||
|
|
||||||
|
elif sys.argv[1] == "-e":
|
||||||
|
in_file = sys.argv[2]
|
||||||
|
out_file = sys.argv[3]
|
||||||
|
if out_file.lower()[-4:] != ".mkv":
|
||||||
|
out_file += ".mkv"
|
||||||
|
if not os.path.isfile(in_file):
|
||||||
|
print "Error!\nSpecified file doesn't exist!"
|
||||||
|
sys.exit()
|
||||||
|
if os.path.isfile(out_file):
|
||||||
|
print "Overwrite existing file?"
|
||||||
|
overwrite = ""
|
||||||
|
while overwrite != "y" and overwrite != "n":
|
||||||
|
overwrite = raw_input("(Y/N) ").lower()
|
||||||
|
if overwrite == "n":
|
||||||
|
print "Not overwriting; exiting."
|
||||||
|
sys.exit()
|
||||||
|
filetype = "ppm" if in_file[-3:].lower() == "ppm" else "tmb"
|
||||||
|
flipnote = TMB().ReadFile(in_file) if filetype == "tmb" else PPM().ReadFile(in_file, ReadFrames=True, ReadSound=True)
|
||||||
|
|
||||||
|
# Make temp dir and dump the frames and sound here
|
||||||
|
tempdir = tempfile.mkdtemp()
|
||||||
|
print "Dumping the frames..."
|
||||||
|
DumpFrames(flipnote,tempdir)
|
||||||
|
print "Done!"
|
||||||
|
print "Dumping the sounds..."
|
||||||
|
DumpSoundFiles(flipnote,tempdir)
|
||||||
|
print "Done!"
|
||||||
|
print "Dumping SFX usage..."
|
||||||
|
DumpSFXUsage(flipnote,tempdir)
|
||||||
|
print "Done!"
|
||||||
|
|
||||||
else:
|
else:
|
||||||
print "Error!\nThere's no such mode."
|
print "Error!\nThere's no such mode."
|
||||||
Reference in new issue
Block a user
