(gelöst) TinyPy Script - Exception Error - Was ist falsch?

Started by Digisven, October 27, 2019, 05:04:33 PM

Previous topic - Next topic

Digisven

Hallo zusammen.

Das Script hier soll einfach eine Ordner-Auswahl am Anfang anbieten und den Inhalt des Ordners dann eben konvertieren.

Klappt aber nicht so recht, es kommt dann ein Hinweis-Fenster:


TinyPy:Exception

Exception :error: tokenize
14: adm.VideoCodec("264",
"useAdvancedConfiguration=True",
"general.params=AQ=20", "general.threads=99",
"general.preset=", "general.tuning=",
"general.profile=", "general.fast_decode=False", \
^

BackTrack:
File:py2bc.py, line 51
File:py2bc.py, line 9
File:tokenize.py, line 42
File:tokenize.py, line 13


Mein Script wäre dann das hier:


#PY  <- Needed to identify #
#
ui = Gui()
adm = Avidemux()
# ---------- Datei-Endung ------------
ext = "mkv"
#
def convert(filein):   
    if(0 == adm.loadVideo(filein)):
        ui.displayError("oops","cannot load "+filein)
        raise
# ---------- Projekt Start------------
#
adm.videoCodec("x264", "useAdvancedConfiguration=True", "general.params=AQ=20", "general.threads=99", "general.preset=", "general.tuning=", "general.profile=", "general.fast_decode=False", \
"general.zero_latency=False", "general.fast_first_pass=True", "general.blueray_compatibility=False", "general.fake_interlaced=False", "level=-1", "vui.sar_height=1", "vui.sar_width=1", \
"MaxRefFrames=3", "MinIdr=25", "MaxIdr=250", "i_scenecut_threshold=40", "intra_refresh=False", "MaxBFrame=3", "i_bframe_adaptive=1", "i_bframe_bias=0", "i_bframe_pyramid=2", \
"b_deblocking_filter=True", "i_deblocking_filter_alphac0=0", "i_deblocking_filter_beta=0", "cabac=True", "interlaced=False", "constrained_intra=False", "tff=True", "fake_interlaced=False", \
"analyze.b_8x8=True", "analyze.b_i4x4=True", "analyze.b_i8x8=True", "analyze.b_p8x8=True", "analyze.b_p16x16=False", "analyze.b_b16x16=False", "analyze.weighted_pred=2", \
"analyze.weighted_bipred=True", "analyze.direct_mv_pred=1", "analyze.chroma_offset=0", "analyze.me_method=1", "analyze.me_range=16", "analyze.mv_range=-1", "analyze.mv_range_thread=-1", \
"analyze.subpel_refine=7", "analyze.chroma_me=True", "analyze.mixed_references=True", "analyze.trellis=1", "analyze.psy_rd=1.000000", "analyze.psy_trellis=0.000000", \
"analyze.fast_pskip=True", "analyze.dct_decimate=True", "analyze.noise_reduction=0", "analyze.psy=True", "analyze.intra_luma=11", "analyze.inter_luma=21", "ratecontrol.rc_method=0", \
"ratecontrol.qp_constant=0", "ratecontrol.qp_min=10", "ratecontrol.qp_max=51", "ratecontrol.qp_step=4", "ratecontrol.bitrate=0", "ratecontrol.rate_tolerance=1.000000", \
"ratecontrol.vbv_max_bitrate=0", "ratecontrol.vbv_buffer_size=0", "ratecontrol.vbv_buffer_init=1", "ratecontrol.ip_factor=1.400000", "ratecontrol.pb_factor=1.300000", "ratecontrol.aq_mode=1", \
"ratecontrol.aq_strength=1.000000", "ratecontrol.mb_tree=True", "ratecontrol.lookahead=40")
adm.audioClearTracks()
adm.setSourceTrackLanguage(0,"ger")
adm.setSourceTrackLanguage(1,"eng")
adm.audioAddTrack(0)
adm.audioCodec(0, "Aften");
adm.audioSetDrc(0, 0)
adm.audioSetShift(0, 0,0)
adm.audioAddTrack(1)
adm.audioCodec(1, "Aften");
adm.audioSetDrc(1, 0)
adm.audioSetShift(1, 0,0)
adm.setContainer("MKV", "forceDisplayWidth=False", "displayWidth=1280", "displayAspectRatio=0")
# ---------- Projekt Ende ------------
adm.save("C " + filein + ext)
    print("Done")
#
# Main
#
# ---------- Ordner-Auswahl ------------
inputFolder = gui.dirSelect("Select the source folder")
#
list = get_folder_content(inputFolder,ext)
if(list is None):
    raise
for i in list:
        convert(i)
print("Done")

eumagga0x2a

Die einfachste Abhilfe wäre die mit Backslashes escape'ten Zeilenumbrüche zu entfernen.

Digisven

Da steht aber extra, dass die rein sollten :D

https://www.avidemux.org/admWiki/doku.php?id=tinypy:tinypybatch2 ganz unten:

Dont forget that a line cannot exceed 200 chars, split it and add "\" at the end of each split line.

Allerdings sieht es ohne die Slashies nicht besser aus :/

eumagga0x2a

#3
Ah, okay, "general.preset=", "general.tuning=", "general.profile=" ist wohl ungültig, ersetze das mit

"general.preset=veryfast", "general.tuning=none", "general.profile=high"

(eine unterstützte Avidemux-Version vorausgesetzt, für Windows ist das 2.7.5 oder der letzte Nighty).

Digisven

Ok, habe ich ersetzt. Ist ja blöd, dass das so halt von Avidemux selbst rauskam. :D Naja, egal.

Aber leider klappt´s damit auch nicht. Jetzt sind in der Fehlermeldung halt nur die Wörter "veryfast", "none" und "high" mit drin.

Version 2.7.5 (64bit) und Win10 (64bit) habe ich.

eumagga0x2a

Quote from: Digisven on October 27, 2019, 10:45:05 PM
Ok, habe ich ersetzt. Ist ja blöd, dass das so halt von Avidemux selbst rauskam.

Nicht von einer aktuellen Version. Dies wurde vor langer Zeit schon geändert.

Das Problem ist indes ein anderes: tinyPy ist sehr pingelig bei Einrückungen, ein Tabulator ersetzt keine vier Leerzeichen. Außerdem wurde später im Hauptteil statt "ui" "gui" eingesetzt. Bereinigt sieht der Code so aus:

#PY  <- Needed to identify #
#
ui = Gui()
adm = Avidemux()
# ---------- Datei-Endung ------------
ext = "mkv"
#
def convert(filein):
    if(0 == adm.loadVideo(filein)):
        ui.displayError("oops","cannot load "+filein)
        raise
# ---------- Projekt Start------------
#
    adm.videoCodec("x264", "useAdvancedConfiguration=True", "general.params=AQ=20", "general.threads=99", "general.preset=", "general.tuning=", "general.profile=", "general.fast_decode=False", \
    "general.zero_latency=False", "general.fast_first_pass=True", "general.blueray_compatibility=False", "general.fake_interlaced=False", "level=-1", "vui.sar_height=1", "vui.sar_width=1", \
    "MaxRefFrames=3", "MinIdr=25", "MaxIdr=250", "i_scenecut_threshold=40", "intra_refresh=False", "MaxBFrame=3", "i_bframe_adaptive=1", "i_bframe_bias=0", "i_bframe_pyramid=2", \
    "b_deblocking_filter=True", "i_deblocking_filter_alphac0=0", "i_deblocking_filter_beta=0", "cabac=True", "interlaced=False", "constrained_intra=False", "tff=True", "fake_interlaced=False", \
    "analyze.b_8x8=True", "analyze.b_i4x4=True", "analyze.b_i8x8=True", "analyze.b_p8x8=True", "analyze.b_p16x16=False", "analyze.b_b16x16=False", "analyze.weighted_pred=2", \
    "analyze.weighted_bipred=True", "analyze.direct_mv_pred=1", "analyze.chroma_offset=0", "analyze.me_method=1", "analyze.me_range=16", "analyze.mv_range=-1", "analyze.mv_range_thread=-1", \
    "analyze.subpel_refine=7", "analyze.chroma_me=True", "analyze.mixed_references=True", "analyze.trellis=1", "analyze.psy_rd=1.000000", "analyze.psy_trellis=0.000000", \
    "analyze.fast_pskip=True", "analyze.dct_decimate=True", "analyze.noise_reduction=0", "analyze.psy=True", "analyze.intra_luma=11", "analyze.inter_luma=21", "ratecontrol.rc_method=0", \
    "ratecontrol.qp_constant=0", "ratecontrol.qp_min=10", "ratecontrol.qp_max=51", "ratecontrol.qp_step=4", "ratecontrol.bitrate=0", "ratecontrol.rate_tolerance=1.000000", \
    "ratecontrol.vbv_max_bitrate=0", "ratecontrol.vbv_buffer_size=0", "ratecontrol.vbv_buffer_init=1", "ratecontrol.ip_factor=1.400000", "ratecontrol.pb_factor=1.300000", "ratecontrol.aq_mode=1", \
    "ratecontrol.aq_strength=1.000000", "ratecontrol.mb_tree=True", "ratecontrol.lookahead=40")
    adm.audioClearTracks()
    adm.setSourceTrackLanguage(0,"ger")
    adm.setSourceTrackLanguage(1,"eng")
    adm.audioAddTrack(0)
    adm.audioCodec(0, "Aften");
    adm.audioSetDrc(0, 0)
    adm.audioSetShift(0, 0,0)
    adm.audioAddTrack(1)
    adm.audioCodec(1, "Aften");
    adm.audioSetDrc(1, 0)
    adm.audioSetShift(1, 0,0)
    adm.setContainer("MKV", "forceDisplayWidth=False", "displayWidth=1280", "displayAspectRatio=0")
# ---------- Projekt Ende ------------
    adm.save("C " + filein + ext)
    print("Done")
#
# Main
#
# ---------- Ordner-Auswahl ------------
inputFolder = ui.dirSelect("Select the source folder")
#
list = get_folder_content(inputFolder,ext)
if(list is None):
    raise
for i in list:
    convert(i)
print("Done")


Musste dafür echt an den Rechner ran  ;D

Digisven

Hi. :)

Das tut mir Leid. ;D danke dir!

Ok, er öffnet nun scheinbar schon mal die Datei die er in dem ausgewählten Ordner dann findet, aber dann kommt nach dem öffnen:

Hinweis-Fenster mit:

Muxer

Keine Daten zum Muxen oder keine Ausgabedatei

Wenn ich einen festen Pfad vorgebe, also "C:\\Test\\lala\\Irgendetwas steht hier\\Datei.mkv" dann wirft er die Datei aus.

Ich hätte es aber eben gerne so, dass er den Pfad nimmt, wo er die Datei gefunden hat und dem Original-Dateinamen nimmt mit einem "C-" davor. :D

Und dann hätte ich irgendwie noch gerne, dass bei ihm nicht alle Dateien in EINEM Ordner liegen, sondern er auch mal in Unterordner schauen kann. Das wär´s dann glaube ich soweit. :o

Weißt du da evtl. noch mehr? :)

eumagga0x2a

#7
Quote from: Digisven on October 28, 2019, 08:14:26 PM
Ok, er öffnet nun scheinbar schon mal die Datei die er in dem ausgewählten Ordner dann findet, aber dann kommt nach dem öffnen:

Hinweis-Fenster mit:

Muxer

Keine Daten zum Muxen oder keine Ausgabedatei

Allerdings. So weit hatte ich gar nicht geprüft, denn

adm.save("C " + filein + ext)

kann natürlich nicht funktionieren (filein ist der volle absolute Pfad zur Datei einschließlich Dateinamen).

QuoteIch hätte es aber eben gerne so, dass er den Pfad nimmt, wo er die Datei gefunden hat und dem Original-Dateinamen nimmt mit einem "C-" davor. :D

filename = basename(filein)
folderpath = dirname(filein)
separator = "\\"
adm.save(folderpath + separator + "C-" + filename + "." + ext)


Kommt immer noch mit einer doppelten Endung raus (video.avi.mkv), aber immerhin mit einem Punkt dazwischen statt ".avimkv" wie vorhin.

Für eine rekursive Liste müssten buildDirectoryContent(), und get_folder_content() aufgebohrt werden.

(edit: den Verzeichnistrenner nach folderpath vergessen)

Digisven

#8
Vielen Dank, das funktioniert. :)

Das Doppelte-Endungs-Problem habe ich einfach damit gelöst, dass ich >>  + "." + ext) << den Teil rausgenommen habe. In meinem Fall bleibt die Endung erhalten, da ist das so ok. :)

Danke für deine Hilfe. :)

Das Ergebnis-Script:


#PY  <- Needed to identify #
#
ui = Gui()
adm = Avidemux()
# ---------- Datei-Endung ------------
ext = "mkv"
#
def convert(filein):
    if(0 == adm.loadVideo(filein)):
        ui.displayError("oops","cannot load "+filein)
        raise
# ---------- Projekt Start------------
#
    adm.videoCodec("x264", "useAdvancedConfiguration=True", "general.params=AQ=20", "general.threads=99", "general.preset=", "general.tuning=", "general.profile=", "general.fast_decode=False",
    "general.zero_latency=False", "general.fast_first_pass=True", "general.blueray_compatibility=False", "general.fake_interlaced=False", "level=-1", "vui.sar_height=1", "vui.sar_width=1",
    "MaxRefFrames=3", "MinIdr=25", "MaxIdr=250", "i_scenecut_threshold=40", "intra_refresh=False", "MaxBFrame=3", "i_bframe_adaptive=1", "i_bframe_bias=0", "i_bframe_pyramid=2",
    "b_deblocking_filter=True", "i_deblocking_filter_alphac0=0", "i_deblocking_filter_beta=0", "cabac=True", "interlaced=False", "constrained_intra=False", "tff=True", "fake_interlaced=False",
    "analyze.b_8x8=True", "analyze.b_i4x4=True", "analyze.b_i8x8=True", "analyze.b_p8x8=True", "analyze.b_p16x16=False", "analyze.b_b16x16=False", "analyze.weighted_pred=2",
    "analyze.weighted_bipred=True", "analyze.direct_mv_pred=1", "analyze.chroma_offset=0", "analyze.me_method=1", "analyze.me_range=16", "analyze.mv_range=-1", "analyze.mv_range_thread=-1",
    "analyze.subpel_refine=7", "analyze.chroma_me=True", "analyze.mixed_references=True", "analyze.trellis=1", "analyze.psy_rd=1.000000", "analyze.psy_trellis=0.000000",
    "analyze.fast_pskip=True", "analyze.dct_decimate=True", "analyze.noise_reduction=0", "analyze.psy=True", "analyze.intra_luma=11", "analyze.inter_luma=21", "ratecontrol.rc_method=0",
    "ratecontrol.qp_constant=0", "ratecontrol.qp_min=10", "ratecontrol.qp_max=51", "ratecontrol.qp_step=4", "ratecontrol.bitrate=0", "ratecontrol.rate_tolerance=1.000000",
    "ratecontrol.vbv_max_bitrate=0", "ratecontrol.vbv_buffer_size=0", "ratecontrol.vbv_buffer_init=1", "ratecontrol.ip_factor=1.400000", "ratecontrol.pb_factor=1.300000", "ratecontrol.aq_mode=1",
    "ratecontrol.aq_strength=1.000000", "ratecontrol.mb_tree=True", "ratecontrol.lookahead=40")
    adm.audioClearTracks()
    adm.setSourceTrackLanguage(0,"ger")
    adm.setSourceTrackLanguage(1,"eng")
    adm.audioAddTrack(0)
    adm.audioCodec(0, "Aften");
    adm.audioSetDrc(0, 0)
    adm.audioSetShift(0, 0,0)
    adm.audioAddTrack(1)
    adm.audioCodec(1, "Aften");
    adm.audioSetDrc(1, 0)
    adm.audioSetShift(1, 0,0)
    adm.setContainer("MKV", "forceDisplayWidth=False", "displayWidth=1280", "displayAspectRatio=0")
# ---------- Projekt Ende ------------
    filename = basename(filein)
    folderpath = dirname(filein)
    separator = "\\"
    adm.save(folderpath + separator + "C-" + filename)
    print("Done")
#
# Main
#
# ---------- Ordner-Auswahl ------------
inputFolder = ui.dirSelect("Select the source folder")
#
list = get_folder_content(inputFolder,ext)
if(list is None):
    raise
for i in list:
    convert(i)
print("Done")