News:

--

Main Menu

Scripting help

Started by bobdeyoung, March 26, 2024, 08:05:07 PM

Previous topic - Next topic

bobdeyoung

Version 2.8.1 under Windows 11

Can someone assist me with how you go about creating and executing a script?  I see the Tools > Scripting Shell option but not sure what it does. Specifically, I would like to be able to add a 1 second "Fade-In" and a 3 second "Fade-Out to black" to a video being cut from a longer video.

Thanks!

EDIT:  Now I see that there is a Video > Filters menu option but it is grayed out.  That may be just what I need from reading other posts about fades.  How do I enable it and/or add filters?

sark

You must encode to apply a filter.
Select an encoder from the drop down list (commonly Mpeg4 AVC (x264) and the Filter button will become active.
There is an option to do exactly as you require.

eumagga0x2a

The following script will add 1s fade-in and 3s fade-out for a selection of at least 4 seconds duration:

adm = Avidemux()
ed = Editor()
gui = Gui()

if not adm.isFileOpen():
    gui.displayError("1s fade-in + 3s fade-out", "No video loaded")
    return

# require at least 4 seconds to be selected
if (adm.markerA < 0):
    adm.markerA = 0
if (adm.markerB < 0):
    adm.markerB = 0
if (adm.markerB > ed.getVideoDuration()):
    adm.markerB = ed.getVideoDuration()
if (adm.markerB - adm.markerA < 4 * 1000 * 1000):
    gui.displayError("1s fade-in + 3s fade-out", "Selection too short, must be at least 4 seconds")
    return

fadeInDuration = 1000 # in ms
fadeOutDuration = 3 * 1000 # in ms

fadeInStart = int(adm.markerA / 1000)
fadeOutStart = int((adm.markerB - 3 * 1000 * 1000) / 1000)

adm.addVideoFilter("fadeToBlack", "startFade=" + str(fadeInStart), "endFade=" + str(fadeInStart + fadeInDuration), "inOut=True", "toBlack=True")
adm.addVideoFilter("fadeToBlack", "startFade=" + str(fadeOutStart), "endFade=" + str(fadeOutStart + fadeOutDuration), "inOut=False", "toBlack=True")
gui.displayInfo("Done", "Fade-in and fade-out added. Select video codec other than \"Copy\" to re-encode video")

Save it as a text file with ".py" as extension. Place it e.g. into %appdata%\avidemux\custom directory to be listed in the "Custom" menu upon restart of Avidemux. You should update to the latest 2.8.2 nightly, I don't think that isFileOpen() method had been added to pyAvidemux class already in 2.8.1. In any case, you must switch from copy mode to an encoder to use filters.

bobdeyoung

Quote from: sark on March 26, 2024, 08:42:56 PMYou must encode to apply a filter.
Select an encoder from the drop down list (commonly Mpeg4 AVC (x264) and the Filter button will become active.
There is an option to do exactly as you require.

OK, thank you!  I was trying to avoid re-encoding, but it makes sense that you would need to do that.  Unless there is some advantage to using Avidemux to encode, I will just use my primary encoding software (TMPGEnc Video Mastering Works 7) to do that.  What I am trying to accomplish in the end is to cut a few short video clips out of my 90 minute source video and have start/end fades on those shorter clips. 

bobdeyoung

Quote from: eumagga0x2a on March 26, 2024, 08:55:20 PMThe following script will add 1s fade-in and 3s fade-out for a selection of at least 4 seconds duration:

adm = Avidemux()
ed = Editor()
gui = Gui()

if not adm.isFileOpen():
    gui.displayError("1s fade-in + 3s fade-out", "No video loaded")
    return

# require at least 4 seconds to be selected
if (adm.markerA < 0):
    adm.markerA = 0
if (adm.markerB < 0):
    adm.markerB = 0
if (adm.markerB > ed.getVideoDuration()):
    adm.markerB = ed.getVideoDuration()
if (adm.markerB - adm.markerA < 4 * 1000 * 1000):
    gui.displayError("1s fade-in + 3s fade-out", "Selection too short, must be at least 4 seconds")
    return

fadeInDuration = 1000 # in ms
fadeOutDuration = 3 * 1000 # in ms

fadeInStart = int(adm.markerA / 1000)
fadeOutStart = int((adm.markerB - 3 * 1000 * 1000) / 1000)

adm.addVideoFilter("fadeToBlack", "startFade=" + str(fadeInStart), "endFade=" + str(fadeInStart + fadeInDuration), "inOut=True", "toBlack=True")
adm.addVideoFilter("fadeToBlack", "startFade=" + str(fadeOutStart), "endFade=" + str(fadeOutStart + fadeOutDuration), "inOut=False", "toBlack=True")
gui.displayInfo("Done", "Fade-in and fade-out added. Select video codec other than \"Copy\" to re-encode video")

Save it as a text file with ".py" as extension. Place it e.g. into %appdata%\avidemux\custom directory to be listed in the "Custom" menu upon restart of Avidemux. You should update to the latest 2.8.2 nightly, I don't think that isFileOpen() method had been added to pyAvidemux class already in 2.8.1. In any case, you must switch from copy mode to an encoder to use filters.

Thanks.  See my reply above...I was trying to avoid having to re-encode.