|
Menu |
|
|
|
|
|
|
|
|
|
Aiutiamo il PAM a combattere la fame nel mondo.
|
|
Con 35 euro all'anno permetti ad un bambino di mangiare e andare a scuola.
Pensaci.
|
|
|
|
|
|
#!/usr/bin/python
#######################################
# pyPSPenc #
# Script di codifica video per PSP #
# Sakya, 2006,2007 #
#######################################
import sys
import os
import _random
from time import localtime
from ConfigParser import ConfigParser
from subprocess import Popen, PIPE
ffmpegCommand = "ffmpeg"
pmp_muxerCommand = "pmp_muxer"
def caricaConfig(pFileName):
#Carico una configurazione:
global input, titolo, encType, fps, dim, volume, aRate, vBitrate, aBitrate, passate, userQual, qual, extra, crop, output, outputExt, ffmpegCommand, pmp_muxerCommand
if pFileName[0:1] == "\"" \
and pFileName[-1:] == "\"":
pFileName = pFileName[1:-1]
config = ConfigParser()
config.read(pFileName)
log.write("Carico configurazione: " + pFileName + "\n")
input = config.get("MAIN", "input")
titolo = config.get("MAIN", "titolo")
encType = config.get("MAIN", "encType")
fps = config.get("MAIN", "fps")
dim = config.get("MAIN", "dim")
volume = config.get("MAIN", "volume")
aRate = config.get("MAIN", "aRate")
vBitrate = config.get("MAIN", "vBitrate")
aBitrate = config.get("MAIN", "aBitrate")
passate = config.get("MAIN", "passate")
userQual = config.get("MAIN", "qual")
if userQual == "Q":
qual = quality
elif userQual == "E":
qual = quality + " " + extraQuality
else:
qual = ""
crop = config.get("MAIN", "crop")
extra = config.get("MAIN", "extra")
output = config.get("MAIN", "output")
outputExt = config.get("MAIN", "outputExt")
ffmpegCommand = config.get("MAIN", "ffmpeg")
pmp_muxerCommand = config.get("MAIN", "pmp_muxer")
#Controllo le globals:
try:
sys.argv.append(config)
if batch:
sys.argv.append("-BATCH")
except NameError:
batch = False
version = "1.0.6"
log = file(os.path.dirname(__file__) + "/pyPSPenc.log", "w")
PMPcmd = [
"ffmpeg -y -i \"#INPUT#\" #EXTRA# -vol #VOL# -acodec mp3 -ac 2 -ar #ARATE# -ab #ABITRATE#kb pmptemp.mp3",
"ffmpeg -y -i \"#INPUT#\" #EXTRA# -vcodec mpeg4 -s #SIZE# -b #VBITRATE#kb -g 250 -an -mbd 2 -r #FPS# #QUALITY# -pass 1 pmptemp.avi",
"ffmpeg -y -i \"#INPUT#\" #EXTRA# -vcodec mpeg4 -s #SIZE# -b #VBITRATE#kb -g 250 -an -mbd 2 -r #FPS# #QUALITY# -pass 2 pmptemp.avi",
"pmp_muxer -v pmptemp.avi -a pmptemp.mp3 -o \"#OUTPUT#\""
]
MP4cmd = [
"ffmpeg -y -i \"#INPUT#\" -title \"#TITLE#\" #EXTRA# -vcodec mpeg4 -s #SIZE# -b #VBITRATE#kb -g 250 -vol #VOL# -acodec aac -ac 2 -ar #ARATE# -ab #ABITRATE#kb -mbd 2 -r #FPS# #QUALITY# -pass 1 -f psp \"#OUTPUT#\"",
"ffmpeg -y -i \"#INPUT#\" -title \"#TITLE#\" #EXTRA# -vcodec mpeg4 -s #SIZE# -b #VBITRATE#kb -g 250 -vol #VOL# -acodec aac -ac 2 -ar #ARATE# -ab #ABITRATE#kb -mbd 2 -r #FPS# #QUALITY# -pass 2 -f psp \"#OUTPUT#\""
]
AVCcmd = [
"ffmpeg -y -i \"#INPUT#\" -title \"#TITLE#\" #EXTRA# -vcodec h264 -s #SIZE# -coder 1 -b #VBITRATE#kb -g 250 -f psp -vol #VOL# -acodec aac -ac 2 -ar #ARATE# -ab #ABITRATE#kb -mbd 2 -r #FPS# #QUALITY# -pass 1 -partitions parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -flags loop \"#OUTPUT#\"",
"ffmpeg -y -i \"#INPUT#\" -title \"#TITLE#\" #EXTRA# -vcodec h264 -s #SIZE# -coder 1 -b #VBITRATE#kb -g 250 -f psp -vol #VOL# -acodec aac -ac 2 -ar #ARATE# -ab #ABITRATE#kb -mbd 2 -r #FPS# #QUALITY# -pass 2 -partitions parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -flags loop \"#OUTPUT#\""
]
quality = "-cmp 2 -subcmp 2 -qcomp 1 -subq 6 -qns 3 -trell 2"
extraQuality = "-inter_matrix 8,14,20,28,38,45,56,65,14,20,26,37,44,56,64,70,20,26,36,43,55,64,70,75,28,37,43,54,63,69,74,78,38,44,55,63,69,73,77,80,45,56,64,69,73,76,79,82,56,64,70,74,77,79,81,85,65,70,75,78,80,82,85,90 -intra_matrix 17,18,20,22,24,26,28,30,18,20,22,24,26,28,30,34,20,22,24,26,29,30,34,40,22,24,26,30,32,36,44,50,24,26,29,32,38,48,55,60,26,28,30,36,48,58,74,80,28,30,34,44,55,74,90,100,30,34,40,50,60,80,100,128"
thmCmd = "ffmpeg -y -i \"#INPUT#\" -f image2 -ss 5 -vframes 1 -s 160x120 -an \"#OUTPUT#\""
lFPS = ["15000/1001", "30000/1001"]
lDim = ["320x240", "320x176", "368x208", "384x160", "400x192", "416x176", "480x160", \
"360x272", "480x272"]
if not batch:
print "+" + "-" * 76 + "+"
print "|" + ("pyPSPenc V." + version).center(76) + "|"
print "+" + "-" * 76 + "+"
print "|" + "script per codificare video per PSP".center(76) + "|"
print "|" + "by Sakya 2006".center(76) + "|"
print "|" + "http://sakya.altervista.org".center(76) + "|"
print "+" + "-" * 76 + "+"
caricato = False
#Carico le impostazioni se devo:
if len(sys.argv) > 1:
caricaConfig(sys.argv[1])
caricato = True
batch = False
if len(sys.argv) > 2 and sys.argv[2].upper() == "-BATCH":
batch = True
else:
#Chiedo se devo caricare le impostazioni:
print " Configurazione da caricare"
print " --------------------------"
risp = None
while not risp:
risp = raw_input(" Nome file da caricare (INVIO per non caricare)? ")
if len(risp) > 0:
if risp[-4:] != ".cfg":
risp += ".cfg"
#Controllo che il file esista:
if os.path.exists(risp):
caricaConfig(risp)
caricato = True
else:
print " Impossibile trovare il file " + risp
print ""
risp = None
else:
break
if not caricato:
#File di input:
print ""
print " Selezione file di input"
print " -----------------------"
input = None
while not input:
input = raw_input(" Nome file di input: ")
#Controllo che esista:
if len(input) > 0 and not os.path.exists(input):
print " Impossibile trovare il file " + input
print ""
input = None
#Titolo:
titolo = None
print ""
print " Selezione titolo del video"
print " --------------------------"
while not titolo:
titolo = raw_input(" Titolo: ")
#Tipo di codifica:
print ""
print " Selezione tipo di codifica"
print " --------------------------"
print " M. MP4 per firmware >= 1.50"
print " A. AVC per firmware >= 2.00"
encType = None
while encType not in ["M", "A"]:
encType = raw_input(" Scegli il tipo di codifica: ")
encType = encType.upper()
#FPS:
fps = None
print ""
print " Selezione FPS"
print " -------------"
print " 1. 14.985"
print " 2. 29.970"
while fps not in ["1", "2"]:
fps = raw_input(" Scegli FPS di output: ")
fps = lFPS[int(fps) - 1]
#Dimensioni:
dim = None
print ""
print " Selezione dimensioni di output"
print " ------------------------------"
print " 1. 320x240 4:3 (firmware >= 1.50)"
print " 2. 320x176 1.85:1 (firmware >= 2.00)"
print " 3. 368x208 16:9 (firmware >= 2.00)"
print " 4. 384x160 2.40:1 (firmware >= 2.00)"
print " 5. 400x192 (firmware >= 2.00)"
print " 6. 416x176 2.35:1 (firmware >= 2.00)"
print " 7. 480x160 (firmware >= 2.00)"
print " 8. 360x272 4:3 (CF >= 3.03OE)"
print " 9. 480x272 16:9 (CF >= 3.03OE)"
while dim not in ["1", "2", "3", "4", "5", "6", "7", "8", "9"]:
dim = raw_input(" Scegli dimensione di output: ")
dim = lDim[int(dim) - 1]
#Bitrate video:
vBitrate = None
print ""
print " Selezione bitrate video"
print " -----------------------"
while not vBitrate:
tBit = raw_input(" Bitrate video: ")
try:
vBitrate = int(tBit)
if vBitrate > 768:
print " Il bitrate video deve essere massimo di 768!"
vBitrate = None
except:
print " Bitrate non valido!"
print ""
#Audio rate:
if encType == "A":
aRate = "48000"
else:
aRate = "24000"
#Bitrate audio:
aBitrate = None
print ""
print " Selezione bitrate audio"
print " -----------------------"
while not aBitrate:
tBit = raw_input(" Bitrate audio: ")
try:
aBitrate = int(tBit)
except:
print " Bitrate non valido!"
print ""
#Volume audio:
volume = None
print ""
print " Selezione volume audio"
print " -----------------------"
while not volume:
tVolume = raw_input(" Volume audio (256=Normale): ")
try:
volume = int(tVolume)
except:
print " Volume non valido!"
print ""
#Nome file di output:
try:
f = file("pyPSPenc.dat", "r")
lastNumber = int(f.readline().replace("\n","")) + 1
f.close()
except IOError:
lastNumber = 1
if encType == "M":
output = "M4V" + str(lastNumber).zfill(5)
elif encType == "A":
output = "MAQ" + str(lastNumber).zfill(5)
outputExt = "MP4"
#1pass/2pass:
qual = None
print ""
print " Selezione il numero di passate"
print " -----------------------"
passate = ""
while not passate in ["1", "2"]:
passate = raw_input(" 1 passata o 2 passate (1/2): ")
#Qualita' o velocita':
qual = None
print ""
print " Selezione tipo codifica"
print " -----------------------"
while not qual in ["V", "Q", "E"]:
qual = raw_input(" Codifica Veloce, di Qualita' o Extra (V/Q/E): ")
qual = qual.upper()
userQual = qual
if qual == "Q":
qual = quality
elif qual == "E":
qual = quality + " " + extraQuality
else:
qual = ""
#Parametri extra per ffmpeg:
extra = ""
crop = ""
print ""
print " Selezione parametri extra"
print " -------------------------"
print " Esempi:"
print " -ss 10 -t 60 : codifica dal secondo 10 per 60 secondi"
print " -croptop 20 -cropbottom 20 : crop sopra e sotto di 20 pixel"
print " -padtop 20 -padbottom 20 : 20 pixel aggiunti sopra e sotto"
extra = raw_input(" Inserire parametri extra per ffmpeg: ")
#Riepilogo:
if not batch:
print ""
print " Riepilogo impostazioni"
print " ----------------------"
print " File di input : " + input
print " Titolo : " + titolo
if encType == "M":
print " Codifica : " + "MP4"
else:
print " Codifica : " + "AVC"
print " FPS : " + fps
print " Dimensioni : " + dim
print " Volume Audio : " + str(volume)
print " Frequenza Audio : " + str(aRate)
print " Bitrate Video : " + str(vBitrate)
print " Audio : " + str(aBitrate)
print " Pass (1/2) : " + passate
if userQual == "E":
print " Tipo di codifica : " + "Extra"
elif userQual == "Q":
print " Tipo di codifica : " + "Alta qualita'"
else:
print " Tipo di codifica : " + "Veloce"
print " Paramteri extra : " + extra
print " File di output : " + output + "." + outputExt
print ""
risp = None
while risp not in ["S", "N"]:
risp = raw_input(" Procedere con la codifica (S/N)? ")
risp = risp.upper()
else:
risp = "S"
if risp == "S":
if not batch:
print "+" + "-" * 76 + "+"
print "|" + "Inizio Codifica".center(76) + "|"
print "+" + "-" * 76 + "+"
inizio = localtime()
#Preparo il comando:
if encType == "A":
cmd = AVCcmd
elif encType == "M":
cmd = MP4cmd
elif encType == "P":
cmd = PMPcmd
#Controllo le passate:
if passate == "1":
cmd = [cmd[0].replace("-pass 1", "").replace("-passlogfile #PASSFILE#", "")]
for i, tCmd in enumerate(cmd):
tCmd = tCmd.replace("ffmpeg", "\"" + ffmpegCommand + "\"")
tCmd = tCmd.replace("pmp_muxer", "\"" + pmp_muxerCommand + "\"")
tCmd = tCmd.replace("#INPUT#", input)
tCmd = tCmd.replace("#TITLE#", titolo)
tCmd = tCmd.replace("#FPS#", fps)
tCmd = tCmd.replace("#SIZE#", dim)
tCmd = tCmd.replace("#VBITRATE#", str(vBitrate))
tCmd = tCmd.replace("#ARATE#", aRate)
tCmd = tCmd.replace("#ABITRATE#", str(aBitrate))
tCmd = tCmd.replace("#VOL#", str(volume))
tCmd = tCmd.replace("#EXTRA#", extra + " " + crop)
tCmd = tCmd.replace("#QUALITY#", qual)
#Se sono su Linux non scrivo la prima passata:
if os.name == "posix" and i == 0:
tCmd = tCmd.replace("#OUTPUT#", "/dev/null")
else:
tCmd = tCmd.replace("#OUTPUT#", output + "." + outputExt)
#Lancio il comando:
log.write(tCmd + "\n")
log.flush()
if batch:
#Aggiungo il -v 5
tCmd = tCmd.replace("-y", "-y -v 5")
batchRet.append(tCmd)
else:
os.system(tCmd)
#Creo lo screenshot:
if encType in ["A", "M"]:
tCmd = thmCmd
tCmd = tCmd.replace("ffmpeg", "\"" + ffmpegCommand + "\"")
tCmd = tCmd.replace("#INPUT#", output + "." + outputExt)
tCmd = tCmd.replace("#OUTPUT#", output + ".THM")
log.write(tCmd + "\n")
log.flush()
if batch:
#Aggiungo il -v 5
tCmd = tCmd.replace("-y", "-y -v 5")
batchRet.append(tCmd)
else:
os.system(tCmd)
#Rimozione file temporanei:
toDel = ["ffmpeg2pass-0.log", "x264_2pass.log", "pmptemp.mp3", "pmptemp.avi", output + "." + outputExt + ".log"]
for f in toDel:
try:
os.remove(f)
except:
pass
fine = localtime()
if not batch:
print "+" + "-" * 76 + "+"
print "|" + "Codifica Terminata".center(76) + "|"
print "+" + "-" * 76 + "+"
print " Codifica iniziata : " + str(inizio[3]) + ":" + str(inizio[4]) + ":" + str(inizio[5])
print " terminata: " + str(fine[3]) + ":" + str(fine[4]) + ":" + str(fine[5])
print
#Salvo l'ultimo numero usato:
if not caricato:
f = file("pyPSPenc.dat", "w")
f.write(str(lastNumber) + "\n")
f.close()
#Salvo le impostazioni:
risp = None
risp = raw_input(" Nome file per salvare configurazione (INVIO per non salvare)? ")
if len(risp) > 0:
if risp[-3:] != ".py":
risp += ".py"
out = file(risp, "w")
out.write("input=" + repr(input) + "\n")
out.write("titolo=" + repr(titolo) + "\n")
out.write("encType=" + repr(encType) + "\n")
out.write("fps=" + repr(fps) + "\n")
out.write("dim=" + repr(dim) + "\n")
out.write("volume=" + repr(volume) + "\n")
out.write("aRate=" + repr(aRate) + "\n")
out.write("vBitrate=" + repr(vBitrate) + "\n")
out.write("aBitrate=" + repr(aBitrate) + "\n")
out.write("passate=" + repr(passate) + "\n")
out.write("qual=" + repr(userQual) + "\n")
out.write("extra=" + repr(extra) + "\n")
out.write("output=" + repr(output) + "\n")
out.write("outputExt=" + repr(outputExt) + "\n")
out.close()
else:
print " Codifica annullata dall'utente!"
log.close() |
|
|
|
|
Data: 26/04/2024 Ora: 04:26
Lu
Ma
Me
Gi
Ve
Sa
Do
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
|
|
|
Persone on-line: 0 admins 0 utenti 0 ospiti
|
|
|
|