Avidemux Forum

Non-English => Avidemux-German => Topic started by: Digisven on October 27, 2019, 05:04:33 PM

Title: (gelöst) TinyPy Script - Exception Error - Was ist falsch?
Post by: Digisven on October 27, 2019, 05:04:33 PM
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")
Title: Re: TinyPy Script - Exception Error - Was ist falsch?
Post by: eumagga0x2a on October 27, 2019, 06:52:07 PM
Die einfachste Abhilfe wäre die mit Backslashes escape'ten Zeilenumbrüche zu entfernen.
Title: Re: TinyPy Script - Exception Error - Was ist falsch?
Post by: Digisven on October 27, 2019, 08:25:50 PM
Da steht aber extra, dass die rein sollten :D

https://www.avidemux.org/admWiki/doku.php?id=tinypy:tinypybatch2 (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 :/
Title: Re: TinyPy Script - Exception Error - Was ist falsch?
Post by: eumagga0x2a on October 27, 2019, 09:45:52 PM
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).
Title: Re: TinyPy Script - Exception Error - Was ist falsch?
Post by: 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. :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.
Title: Re: TinyPy Script - Exception Error - Was ist falsch?
Post by: eumagga0x2a on October 27, 2019, 11:56:09 PM
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
Title: Re: TinyPy Script - Exception Error - Was ist falsch?
Post by: Digisven on October 28, 2019, 08:14:26 PM
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? :)
Title: Re: TinyPy Script - Exception Error - Was ist falsch?
Post by: eumagga0x2a on October 28, 2019, 10:24:07 PM
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() (https://github.com/mean00/avidemux2/blob/master/avidemux_core/ADM_core/src/ADM_folder_vs.cpp#L235), und get_folder_content() (https://github.com/mean00/avidemux2/blob/master/avidemux_plugins/ADM_scriptEngines/tinyPy/src/PythonEngine.cpp#L296) aufgebohrt werden.

(edit: den Verzeichnistrenner nach folderpath vergessen)
Title: Re: TinyPy Script - Exception Error - Was ist falsch?
Post by: Digisven on October 31, 2019, 11:20:43 PM
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")