Πως μπορείτε να προσθέσετε Watermark, Υδατογράφημα στα ελληνικά από μία εικόνα στα Βίντεο σας για την MkDocs σελίδα σας και πως μπορείτε να κατεβάσετε και να ενσωματώσετε εύκολα νέο script στο FFmpeg Mega Μενού Script από το GameLink.gr.


Στο Προηγούμενο άρθρο για το FFmpeg μάθατε πως να εγκαταστήσετε το FFmpeg χειροκίνητα στον Υπολογιστή σας για Windows αλλά και να κατεβάσατε και να εργαστείτε με αυτό με την βοήθεια του FFmpeg Mega Μενού Script από το GameLink.gr. Σε αυτό το άρθρο θα μάθετε γιατί κράτησα τις εντολές όσο μπορούσα πιο απλές δινοντάς σας τώρα ένα πιο εξελιγμένο script για το FFmpeg που όμως καλύπτει τις βασικές ανάγκες οποιουδήποτε θέλει να κατοχυρώσει την εργασία του ως δημιουργός περιεχομένου ή ακόμα και ως ιδιοκτήτης ενός έργου mkdocs!


Στην αρχική σελίδα του Ελληνικού αλλά και του αντίστοιχού του στα αγγλικά GameLink.gr θα διαπιστώσετε οτι δεν χρησιμοποιώ Watermark στο promo video για την σελίδα μου γιατί αφενός το Rebelstreamers που χρησιμοποιώ στα παιχνίδια ως ονομασία είναι σε 2 σημεία στο βίντεο και αφετέρου το Rebelstreamers.com είναι στην κατοχή μου. Be my guest όποιος θέλει να τα χρησιμοποιήσει για να με κάνει διάσημο ως Δημιουργό Περιεχομένου Βίντεο κιόλας, κάτι που δεν ήταν ποτέ στα σχέδιά μου.

Το Βίντεο της 1ης σελίδας του el.gamelink.gr για διαστάσεις HD με διάφανο κινούμενο (bounching) Watermark


Και Ναι, στο ανωτέρω βίντεο υπάρχει Watermark και κινούμενο κιόλας. Πατήστε το κουμπί για να πάει σε πλήρη οθόνη το βίντεο ή κατεβάστε το και δέστε στις μαύρες περιοχές τον BB-8 να περνάει. Η κίνηση που ακολουθεί ο ΒΒ-8 είναι από αριστερά πάνω, κάτω στο κέντρο του Χ διανύσματος, δεξιά πάνω και προς τα πίσω. Θα τον δείτε στα 14-18, 33-35, 59-60, 74-75, 99-102, 118-120 δευτερόλεπτα, αχνά μεν αλλά εκεί είναι. Αν δυσκολευτείτε να το εντοπίσετε στο 99-102 δευτερόλεπτο είναι το ποιο καθαρό σημείο του βίντεο και θα δείτε το ρομποτακι πως κινείται από δεξιά και πάνω προς τα κάτω στο κέντρο.


Δημιουργός Περιεχομένου Βίντεο? Ποιος είναι και γιατί χρειάζονται Watermark τα Βίντεο του?


Με το προηγούμενο παράδειγμα από την δικιά μου σελίδα γίνεται σαφές ότι ο σκοπός και ρόλος ενός Watermark στα βίντεο είναι να εξασφαλίσει στους δημιουργούς βίντεο περιεχομένου την πιστοποίηση αυθεντικότητας μεν αλλά και την αποκλειστική ιδιοκτησία ώστε να κατοχυρώσουν τα πνευματικά δικαιώματα του έργου τους. Μπορεί παραδειγματός χάριν να μοιράστηκα μαζί σας το FFmpeg Mega Μενού Script αλλά αν είδατε αναφέρεται σε συγκεκριμένη άδεια χρήσης και δεν μπορείτε να το κάνετε ότι θέλετε γιατί προσδιόρισα επακριβώς ποια είναι η άδεια χρήσης του και κατά συνέπεια ποιος είναι ο πραγματικός παραγωγός του μενού. Ακριβώς το ίδιο ισχύει και στους δημιουργούς Βίντεο Περιεχομένου όπου το περιεχόμενο το μοιράζονται με τους όρους τους αλλά και αυτούς που προκύπτουν απο την πιστοποίηση του ιδιοκτησιακού καθεστώτος (δηλαδή ότι τους ανήκει) και καθορίζονται από την πλατφόρμα που το ανεβάζουν. Χωρίς να θέλω να επεκταθώ επί του παρόντος στο ζήτημα αυτό θα πρέπει να επιστήσω την προσοχή ότι κάθε πλατφόρμα έχει την δικιά της πολιτική στο πως ανεβάζετε ή μοιράζετε το περιεχόμενο σας στις διάφορες πλατφόρμες αλλά και ανάμεσα τους!


Έτσι σαν ορισμό θα έλεγα ότι, Δημιουργός Βίντεο Περιεχομένου είναι ο καθένας και η καθεμία από εμάς που ανεβάζει ένα βίντεο σε μια πλατφόρμα αναπαραγωγής Βίντεο που όμως μπορεί να αποδείξει ότι είναι ο αποκλειστικός ιδιοκτήτης αυτού. Ξέρω ακούγεται νομικός όρος επειδή ουσιαστικά είναι και θα λυθεί με νομικό τρόπο οποιαδήποτε διένεξη προκύψει ανάμεσα στον ή στους δημιουργούς και τις πλατφόρμες αναπαραγωγής Βίντεο αν δεν υπαναχωρήσει μια εκ των πλευρών!

Καθίσταται απαραίτητο λοιπόν μέσα στο Βίντεο να υπάρχει κάποιο αναγνωριστικό του δημιουργού και κατόχου του που μπορεί να μην είναι οπτικό αναγνωριστικό αλλά ηχητικό (με ηχητικό τρόπο εντοπίζονται τα τραγούδια με πνευματικά δικαιώματα στις πλατφόρμες). Έχει σημασία όμως αυτό το αναγνωριστικό να είναι μοναδικό αν θέλει αυτός που το ανεβάζει να κατοχυρώσει την εργασία του ως δημιουργός περιεχομένου. Το οπτικό αναγνωριστικό στα Βίντεο του Δημιουργού Περιεχομένου Βίντεο ονομάζεται Watermark!


Οι πλατφόρμες αναπαραγωγής Βίντεο Δημιουργούς Περιεχομένου αποκαλούν και τους gaming streamers που εκπέμπουν ζωντανά (live) τα παιχνίδια τους όταν παίζουν όπως ή όταν τα ανεβάζουν αργότερα στις διάφορες πλατφόρμες αναπαραγωγής τους ( twitch, trove, kick, dlive etc ), όπως και φυσικά οποιονδήποτε ανεβάζει βίντεο και με οποιοδήποτε περιεχόμενο.


Έτσι καλό για να μην πω ότι επιβάλλεται, αν θέλετε να καταχωρήσετε την εργασία σας ως Δημιουργός Περιεχομένου πριν βάλετε Watermark στα Βίντεο σας να βρείτε μια μοναδική ονομασία για το κανάλι σας που φυσικά μπορεί να είναι μια ονομασία ευρέως χρησιμοποιούμενη αλλά αν έχει π.χ. έναν αριθμό γίνεται μοναδική! Έτσι ένας απο τους αγαπημένους μου RebelStreamers ο slash δεν είναι απλά slash αλλά ο slash932 στο twitch και με το αναγνωριστικό αριθμό 932 θα τον βρείτε και στις υπόλοιπες πλατφόρμες που εκπέμπει ή ανεβάζει Βίντεο.


Πως μπορούμε να κάνουμε οποιαδήποτε εικόνα ή γραπτό κείμενο διαφανή και έτοιμα για Watermark με το GIMP.


Αφού έγραψα γιατί οι Δημιουργοί Περιεχομένου χρησιμοποιούν κατά κόρον Watermark στα βίντεο τους, νοιώθω την ανάγκη τώρα να εξηγήσω γιατί δεν ενσωμάτωσα τις εντολές διαφάνειας στo batch script για Watermark που ακολουθεί και είναι έτοιμο να χρησιμοποιηθεί όπως είναι αφού το αντιγράψετε ή κατεβάσετε το zip και το ενσωματώσετε στο FFmpeg Mega Μενού Script από το GameLink.gr.


Η πολυπλοκότητα των εντολών FFmpeg στο νέο script, οι πολλές ερωτήσεις στον χρήστη αλλά και το μεγαλύτερο ρίσκο να δημιουργηθούν αρνήσεις εκτέλεσης ή bugs ήταν οι 3 λόγοι που με έκαναν να εξαιρέσω οποιαδήποτε εντολή εκτέλεσης διαφάνειας στις εντολές FFmpeg. Φυσικά εσείς αν θέλετε μπορείτε να τροποποιήσετε τις εντολές και δεν έχω κανένα πρόβλημα με αυτό αλλά γιαυτούς που δεν θέλουν να μπουν σε αυτήν την περιπέτεια θα εξηγήσω πως να φτιάξετε διάφανες τις εικόνες αλλά και εικόνες που έχουν κάποιο γραπτό κείμενο που μπορείτε να χρησιμοποιήσετε ως Watermark.


Αν βάλετε μια διάφανη εικόνα ως εικόνα Watermark με το FFmpeg, η διαφάνεια θα διατηρηθεί κατά την ενσωμάτωση και το ίδιο ισχύει για την ενσωμάτωση γραπτού κειμένου ως διαφανής εικόνα.


Στην εικόνα 1 που ακολουθεί βλέπετε πως έκανα διάφανο με το GIMP τον ΒΒ-8 χαρακτήρα ρομπότ από το Star Wars

  1. πατάμε U για Fuzzion Selection tool (ή με αριστερό κλικ)
  2. αριστερό κλικ στο άσπρο του περιγράμματος της εικόνας (στην εικόνα που είναι το (2) έχει ήδη αφαιρεθεί)
  3. πατάμε delete κουμπί στο πληκτρολόγιο (αν δεν εξαφανιστεί το background σημαίνει ότι θέλει να του βάλετε alpha channel, το οποίο γίνεται ως εξης)
    • Layer
      • Transparency
        • Add Alpha Channel
  4. opacity μπάρα στα δεξιά και το πάμε εκεί που θέλουμε
  5. Έτοιμο, export as και επιλέξτε png ή webp και τελειώσατε!


και αν θέλουμε να βάλουμε κείμενο, απλά φτιάχνουμε εικόνα με το κείμενο που θέλουμε ως εξής...

  1. πατάμε T για Text
  2. γράφουμε αυτό που θέλουμε (σε layer με transparency αν δεν θέλετε background χρωμα)
  3. Έτοιμο, export as και επιλέξτε png ή webp και τελειώσατε!


Local image

Εικ.1. Ετσι δείχνει το BB-8 robot από το Star Wars ως διάφανη εικόνα που την μετέτρεψα με το GIMP και χρησιμοποίησα στις δοκιμές του Watermark script


Φυσικά για να μετατρέψετε τις εικόνες σας σε διαφανείς εικόνες png και webp, τους 2 τύπους εικόνων που δοκίμασα οτι είναι 100% συμβατές με το Watermark script πρέπει να εγκαταστήσετε αρχικά το GIMP. Το GIMP για Windows αν δεν το έχετε θα το βρείτε για Windows στην κεντρική σελίδα του GIMP οπου έχει όλες τις διαθέσιμες πηγές να το κατεβάσετε αλλά αν θέλετε μια παλιότερη εκδοση του GIMP αυτό είναι το link για το ftp του.


Πως θα ενσωματώσετε τα 2 Windows Batch αρχεία του Watermark script στο FFmpeg Mega Μενού Script από το GameLink.gr.


Στο προηγούμενο άρθρο έγραψα ότι μπορείτε να γράψετε τα δικά σας FFmpeg script και να τα ενσωματώσετε εύκολα στο FFmpeg Mega Μενού Script από το GameLink.gr και σε αυτό το άρθρο ήρθε η στιγμή να το κάνω εγώ αρχικά ώστε να μην αφήσω καμιά αμφιβολία ότι είναι εφικτό.


Αν θυμάστε το FFmpeg Mega Μενού Script από το GameLink.gr zip αρχείο έχει 2 φακέλους μέσα. Ο ένας ονομάζεται FFmpegSrcipts και εκεί είναι όλα τα batch αρχεία του μενού και ο άλλος ειναι ο finalFFmpegScripts που καλείται απο το αρχικό batch και αυτό ουσιαστικά εκτελεί τις εντολες FFmpeg. Έτσι στην επόμενη ενότητα θα βρείτε τον κώδικα απο 2 batch αρχεία για Windows με τις ονομασίες τους αν θέλετε να τα βάλετε σε διαφορετικό σημείο απο μένα που εχω επιλέξει οτι η θέση τους είναι στο Χ μενού και φακέλου του FFmpeg Mega Μενού Script.


Το zip αρχείο με τα 2 Watermark scriptς είναι έτοιμα προς ενσωμάτωση στην X κατηγορία.


Στο μενού έχω μια κατηγορία με την ονομασία X για να βάζουμε εκεί όσα FFmpeg batch αρχεία δεν ανήκουν στις γενικές κατηγορίες επεξεργασίας Βίντεο. Έτσι μέσα στο zip αρχείο που ακολουθεί τα αρχεία είναι έτοιμα να τα αντιγράψετε στην Χ κατηγορία και στους 2 φακέλους που ανέφερα στην προηγούμενη παράγραφο και να δουλέψουν άμεσα! Το Watermark-FFmpeg-scripts.zip είναι για όλα τα Βίντεο του φακέλου που το τρέξατε και αν κάνετε το λάθος να το τρέξετε σε φάκελο με πολλά βίντεο, μην ανησυχείτε και πατήστε το Χ του παραθύρου για να τερματιστεί κατευθείαν το script!


Watermark-FFmpeg-scripts.zip


Σε αυτό το zip αρχείο δεν πρόκειται να δημοσιεύσω HASH αριθμούς γιατί είναι μόνο 2 αρχεία και ακολουθεί ο κώδικας που μπορείτε να ελέγξετε εύκολα αν είναι ο ίδιος αλλά και να τον αντιγράψετε και τροποποιήσετε όπως θέλετε και αφού είναι συμπληρωματικά scripts στο FFmpeg Mega Μενού Script από το GameLink.gr ισχύουν τα ίδια όσο αφορά την Άδεια τους.


Ο Κώδικας των Watermark FFmpeg scripts.


Αυτό το αρχείο μπαίνει μέσα στο finalFFmpegScripts φάκελο.

vids2IMGWatermark.bat
@echo off
chcp 65001>NUL
rem setlocal && cd /D "%~dp0"
setlocal enabledelayedexpansion
REM AYTO TO SCRIPT ΠΡΟΣΘΕΤΕΙ WATERMARK ΣΕ ΟΛΑ ΤΑ VIDEO ΣΑΣ. ΤΟ WATERMARK ΕΙΝΑΙ ΕΙΚΟΝΑ ΚΑΙ
REM ΑΥΤΟ ΤΟ SCRIPT ΕΙΝΑΙ ΤΟ ΠΡΩΤΟ ADVANCED SCRIPT ΠΟΥ ΔΗΜΟΣΙΕΥΩ ΩΣ EXTRA SCRIPT.
REM O ΛΟΓΟΣ ΠΟΥ ΔΕΝ ΕΒΑΛΑ ΕΞΑΡΧΗΣ SCRIPT ΜΕ ΤΟΣΕΣ ΕΠΙΛΟΓΕΣ ΣΤΟ ΑΡΧΙΚΟ ZIP ΕΙΝΑΙ ΟΤΙ ΔΕΝ ΗΘΕΛΑ
REM NA ΓΙΝΕΙ ΚΟΥΡΑΣΤΙΚΟ ΑΛΛΑ ΚΑΙ ΝΑ ΤΡΟΜΑΞΕΙ ΤΟΥΣ ΝΕΟΥΣ BATCH ΧΡΗΣΤΕΣ KAI NA ΤΑ ΑΓΑΠΗΣΟΥΝ!
REM ΔΕΝ ΠΡΟΣΘΕΣΑ ΝΑ ΚΑΝΕΙ ΔΙΑΦΑΝΕΙΕΣ ΣΤΙΣ ΕΙΚΟΝΕΣ ΓΙΑΤΙ ΑΦΕΝΟΣ ΕΙΝΑΙ ΜΙΑ ΠΡΟΣΘΕΤΗ ΠΑΡΑΜΕΤΡΟΣ
REM ΣΤΟ FFMPEG ΜΕ ΟΤΙ ΣΗΜΑΙΝΕΙ ΑΥΤΌ ΑΛΛΑ ΚΑΙ ΕΠΕΙΔΗ ΜΕ ΤΟ GIMP ΠΟΥ ΕΙΝΑΙ ΚΑΙ ΑΥΤΟ OPEN SOURCE
REM KAI ΜΠΟΡΕΊΤΕ ΝΑ ΤΟ ΕΓΚΑΤΑΣΤΗΣΕΤΕ ΣΤΑ WINDOWS ΧΩΡΙΣ ΚΟΣΤΟΣ Η ΜΕΤΑΤΡΟΠΗ ΜΙΑΣ PNG / WEBP ΕΙΚΟΝΑΣ
REM ΣΕ ΔΙΑΦΑΝΗΣ ΕΙΚΟΝΑ ΕΙΝΑΙ ΑΚΡΙΒΩΣ ΜΙΑ ΜΟΝΟ ΠΡΑΞΗ !!! ΒΟΗΘΕΙΑ ΓΙΑ ΤΙΣ ΕΝΤΟΛΕΣ ΤΗΣ filter_complex 
REM ΤΟΥ FFMPEG ΠΟΥ ΧΡΗΣΙΜΟΠΟΙΗΘΗΚΑΝ ΕΙΝΑΙ ΕΔΩ: https://ffmpeg.org/ffmpeg-filters.html#overlay-1
REM ΤΟ SCRIPT AYTO ΕΙΝΑΙ ΣΥΜΠΛΗΡΩΜΑΤΙΚΟ ΤΟΥ gamelink.gr-ffmpeg-scripts.zip ΑΠΟ ΤΟ EL.GAMELINK.GR
REM Ακολουθεί το Url για να μάθετε περισσότερα ή να το κατεβάσετε. Καλά video editing!
REM 
REM https://el.gamelink.gr/blog/Pws-Mporeite-Na-Mikrynete-ta-Video-gia-tis-MkDocs-Selides-sas-me-to-ffmpeg/ 
REM 

:EPILOGHEIKONAS
echo.
set "StartEIKONA="
set /p StartEIKONA=Γράψε το πρώτο γράμμα το ονόματος της εικόνας και πάτα tab για να συμπληρώσει το πλήρες όνομα:
echo.
if not exist "!StartEIKONA!" (
    echo.
    echo Δεν υπάρχει αυτό το όνομα αρχείου ...
    echo.
    goto EPILOGHEIKONAS
) 


for /F tokens^=* %%a in ('dir /b *.png *.webp') do (    
    set "eikvar=0"
    set "neweik=%%a"
    set "oldeik=!StartEIKONA:"=!"
    if !neweik! == !oldeik! ( 
        set /a "eikvar+=1" 
    )
    if [!eikvar!] equ [1]  ( 
        rem echo το compare strings οταν εχει "" που μπαινουν με το tab ειναι
        rem θεμα ... προσοχή στις ονομασίες με κενα και ειδικούς χαρακτήρες!
        goto OLAKALA 
    )
)

color 4F
echo Η εικόνα δεν είναι png ή webp που έχουν transparency και έχω δοκιμάσει ...
echo.
set /p StartWHATEVER=Αν θέλεις να βγεις τώρα πάτα enter αλλιώς γράψε οτιδήποτε και enter για να συνεχίσει:
if "%StartWHATEVER%" == "" (
    color 1F
    goto End
) else (
    color 1F
    goto OLAKALA
)       


:OLAKALA
REM  για να μην σκάει όταν δεν δίνονται τιμές
set "StartPADDING=0"
set "StartPADDINGY=0"
echo.
color 1E
echo Στις επόμενες επιλογές απο 1 εως 4 η τιμή που θα δώσετε αναφέρεται στην Χ και Υ θέση του Watermark.
echo Για την 5 που είναι το Κέντρο δεν θα σας ζητηθεί επιπλέον παράμετρος, για την 6 θα δώσετε για το Υ 
echo και για την 7 που είναι για τα Κινούμενα Watermark θα ανοίξει νέο Μενού 3 επιλογών...
echo.
pause
color 1F

echo.
set "StartPADDING=20"
set /p StartPADDING=Γράψε πόση απόσταση θέλεις να έχει η εικόνα απο τα άκρα στην ΟΡΙΖΟΝΤΙΟ, αλλιώς Enter για 20 pixels:
echo.
call :checkPositiveNumber "%StartPADDING%"
if %errorlevel% neq 0 (
    echo λάθος παράμετρος ... βάζω την προκαθορισμένη που είναι 20 
    set "StartPADDING=20"
)


:EPILOGH
echo.
echo  --- ΕΠΕΛΕΞΕ ΠΟΥ ΘΕΣ ΝΑ ΤΟΠΟΘΕΤΗΘΕΙ ΤΟ WATERMARK ---
echo. 
echo  1) Watermark στην Πάνω-Αριστερά Γωνία (Χ και Υ είναι ίδια):
echo  2) Watermark στην Πάνω-Δεξιά Γωνία (Χ και Υ είναι ίδια):
echo  3) Watermark στην Κάτω-Αριστερά Γωνία (Χ και Υ είναι ίδια):
echo  4) Watermark στην Κάτω-Δεξιά Γωνία (Χ και Υ είναι ίδια):
echo  5) Watermark στο Κέντρο:
echo  6) Watermark ως Ελεύθερο όρισμα (Θα καθόρισεις και το Υ):
echo  7) Κινούμενο Watermark (Ανοίγει νέο Μενού):
echo.
CHOICE /C 1234567 /M "Επέλεξε που θες να τοποθετηθεί το Watermark:"

REM Note - τα ERRORLEVELS πάντα προς τα κάτω
if ERRORLEVEL 7 goto Animated
if ERRORLEVEL 6 goto FreeWill
if ERRORLEVEL 5 goto Center
if ERRORLEVEL 4 goto Bottom-right
if ERRORLEVEL 3 goto Bottom-left
if ERRORLEVEL 2 goto Top-right
if ERRORLEVEL 1 goto Top-left
echo Τα ERRORLEVEL και η CHOICE δεν σε αφήνουν να κάνεις λάθος. αυτό το echo δεν θα το δεις ποτέ!
goto EPILOGH REM ΛΕΜΕ ΤΩΡΑ `:]

:Top-left
set "StartPADDINGY=!StartPADDING!"
set "StartWATERMARK=overlay=!StartPADDING!:!StartPADDINGY!"
echo.
echo            To Watermark ενσωματώνεται: Πάνω-Αριστερά
echo.
goto DisplayXY

:Top-right
set "StartPADDINGY=!StartPADDING!"
set "StartWATERMARK=overlay=main_w-overlay_w-!StartPADDING!:!StartPADDINGY!"
echo.
echo            To Watermark ενσωματώνεται: Πάνω-Δεξιά
echo.
goto DisplayXY

:Bottom-left
set "StartPADDINGY=!StartPADDING!"
set "StartWATERMARK=overlay=!StartPADDING!:main_h-overlay_h-!StartPADDINGY!"
echo.
echo            To Watermark ενσωματώνεται: Κάτω-Αριστερά
echo.
goto DisplayXY

:Bottom-right
set "StartPADDINGY=!StartPADDING!"
set "StartWATERMARK=overlay=main_w-overlay_w-!StartPADDING!:main_h-overlay_h-!StartPADDINGY!"
echo.
echo            To Watermark ενσωματώνεται: Κάτω-Δεξιά
echo.
goto DisplayXY

:Center
set "StartWATERMARK=overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2"
set "StartPADDINGY=!StartPADDING!"
echo.
echo            Η απόσταση του Χ και Υ είναι ακριβώς στο: Κέντρο!
echo.
goto FF

:FreeWill
echo.
set "StartPADDINGY=20"
set /p StartPADDINGY=Γράψε πόση απόσταση [Y padding] θέλεις να έχει η εικόνα στην κάθετο, αλλιώς Enter για 20 pixels:
call :checkPositiveNumber "%StartPADDINGY%"
if %errorlevel% neq 0 (
    echo λάθος παράμετρος ... βάζω την προκαθορισμένη που είναι 20 
    set "StartPADDINGY=20"
)
echo.
set "StartWATERMARK=overlay=!StartPADDING!:!StartPADDINGY!"
echo.
echo            To Watermark ενσωματώνεται: Ασύμμετρα
echo.
goto DisplayXY


:DisplayXY
echo.
echo        Η απόσταση στο Χ είναι: !StartPADDING!, και στο Υ είναι: !StartPADDINGY!
echo.
goto FF

:Animated
echo.
echo     -- ΕΠΕΛΕΞΕ ΠΩΣ ΘΕΣ ΝΑ ΚΙΝΗΘΕΙ ΤΟ WATERMARK --
echo. 
echo  1) Ορισμός Κίνησης από Α στο Β με σταθερά ορίσματα:
echo  2) Κίνηση με αναλογικά ορίσματα ως προς την Κάθετο Υ:
echo  3) Bouncing Κίνηση με Δυναμικά ορίσματα Χ, Υ και Χρόνο:
echo.

set /p choice=Επέλεξε το είδος της κίνησης του Watermark:

REM Note - τα ERRORLEVELS με την choice τελειώνουν στο 9! παμε αλλιως τωρα ...
if "%choice%"=="1" goto Stathera
if "%choice%"=="2"  goto Analogika
if "%choice%"=="3"  goto BounceDynamika
echo.
echo Λάθος επιλογή! Διαλέγεις 1,2 ή 3 τίποτα άλλο.
echo.
goto Animated rem αν επιλέξεις λάθος ...


:Stathera
echo.
echo.
echo - Παράμετροι για τον χρόνο που ξεκινάει και τελειώνει η κίνηση -
echo.
echo.

set "StartTIME1=1"
set /p StartTIME1=Γράψε τον χρόνο που θες να ξεκινάει η Κίνηση, αλλιώς Enter για την αρχή που είναι 1 sec:
echo.
call :checkPositiveNumber "%StartTIME1%"
if %errorlevel% neq 0 (
    echo λάθος παράμετρος ... βάζω την προκαθορισμένη που είναι 1 
    set "StartTIME1=1"
)
echo.
set "StartTIME2=3"
set /p StartTIME2=Γράψε τον χρόνο που θες να τελειώσει η Κίνηση, αλλιώς Enter για default που είναι 3 sec:
echo.

call :checkPositiveNumber "%StartTIME2%"
if %errorlevel% neq 0 (
    echo λάθος παράμετρος ... βάζω την προκαθορισμένη που είναι 3 
    set "StartTIME2=3"
)

echo.
echo.
echo - Παράμετροι για το X Διάνυσμα που ξεκινάει η κίνηση -
echo.
echo.

set "StartORIZ1=1"
set /p StartORIZ1=Γράψε την αρχή που θες να ξεκινάει η Κίνηση ως προς το Χ Διάνυσμα, αλλιώς Enter για default που είναι 1 pixel:
echo.
call :checkPositiveNumber "%StartORIZ1%"
if %errorlevel% neq 0 (
    echo λάθος παράμετρος ... βάζω την προκαθορισμένη που είναι 1 
    set "StartORIZ1=1"
)
echo.
set "StartTIMESPEED1=20"
set /p StartTIMESPEED1=Γράψε την ταχύτητα της Κίνησης στο Χ Διάνυσμα [pixels per second], αλλιώς Enter για default που είναι 20:
echo.
call :checkPositiveNumber "%StartTIMESPEED1%"
if %errorlevel% neq 0 (
    echo λάθος παράμετρος ... βάζω την προκαθορισμένη που είναι 20 
    set "StartTIMESPEED1=20"
)

echo.
echo.
echo - Παράμετροι για το Y Διάνυσμα -
echo.
echo.

set "StartKATH1=1"
set /p StartKATH1=Γράψε την αρχή που θες να ξεκινάει η Κίνηση ως προς το Y Διάνυσμα, αλλιώς Enter για default που είναι 1 pixel:
echo.
call :checkPositiveNumber "%StartKATH1%"
if %errorlevel% neq 0 (
    echo λάθος παράμετρος ... βάζω την προκαθορισμένη που είναι 1 
    set "StartKATH1=1"
)

echo.
set "StartTIMESPEED2=20"
set /p StartTIMESPEED2=Γράψε την ταχύτητα της Κίνησης στο Y Διάνυσμα [pixels per second], αλλιώς Enter για default που είναι 20:
echo.
call :checkPositiveNumber "%StartTIMESPEED2%"
if %errorlevel% neq 0 (
    echo λάθος παράμετρος ... βάζω την προκαθορισμένη που είναι 20 
    set "StartTIMESPEED2=20"
)

echo.
echo.
echo            Ξεκινάει η κίνηση στο !StartTIME1! δευτερόλεπτο και τελειώνει στα !StartTIME2! δευτερόλεπτα
echo            Με αρχή τα !StartORIZ1! pixels στο Χ διάνυσμα και τέλος τα !StartKATH1! pixels στο Υ διάνυσμα
echo            Και με ταχύτητα !StartTIMESPEED1!pps στο Χ και !StartTIMESPEED2!pps στο Υ διάνυσμα αντίστοιχα...
echo.
echo.

set "StartWATERMARK=overlay=enable='between=(t,!StartTIME1!,!StartTIME2!)':x=!StartORIZ1!+t*!StartTIMESPEED1!:y=!StartKATH1!+t*!StartTIMESPEED2!" 
goto FF


:BounceDynamika
echo.
echo -*- Παράμετροι για το Χ Διάνυσμα -*-
echo.

set StartPPS1="300"
set /p StartPPS1=Γράψε την ταχύτητα του Χ Διανύσματος [pixels per seconds], αλλιώς Enter για default 300:
echo.
call :checkPositiveNumber "%StartPPS1%"
if %errorlevel% neq 0 (
    echo λάθος παράμετρος ... βάζω την προκαθορισμένη που είναι 300 
    set "StartPPS1=300"
)

echo.
echo -*- Παράμετροι για το Y Διάνυσμα -*-
echo.
set StartPPS2="100"
set /p StartPPS2=Γράψε την ταχύτητα του Υ Διανύσματος [pixels per seconds], αλλιώς Enter για default 100:
echo.
call :checkPositiveNumber "%StartPPS2%"
if %errorlevel% neq 0 (
    echo λάθος παράμετρος ... βάζω την προκαθορισμένη που είναι 100 
    set "StartPPS2=100"
)

echo.
echo.
echo            Ξεκινάει η κίνηση Βοuncing με Μόνο 2 παράμετρους 
echo       Με ταχύτητα !StartPPS1!pps στο Χ διάνυσμα και !StartPPS2!pps στο Υ διάνυσμα...
echo.
echo.
rem Δουλεύει μια χαρά το μακρινάρι bouncing tou track tou ffmpeg! Αυτό είναι οι 10 εντολές σε μια!
rem Όσο ποιο γρήγορη είναι η ταχύτητα στο Χ τόσο ποιο οριζόντια κινείται η εικόνα και φυσικά το ίδιο
rem ισχύει για το Υ αναλογικά με την την ταχύτητα που δώσατε στο Χ. 
rem https://trac.ffmpeg.org/wiki/BouncingOverlay
set "StartWATERMARK=overlay='if(eq(mod(floor(st(8,t*!StartPPS1!)/(W-w)),2),0),mod(ld(8),W-w),W-w-mod(ld(8),W-w)):if(eq(mod(floor(st(9,t*!StartPPS2!)/(H-h)),2),0),mod(ld(9),H-h),H-h-mod(ld(9),H-h)):eval=frame:repeatlast=1'"
goto FF



:Analogika
echo.
echo -*- Παράμετροι για το Χ Διάνυσμα -*-
echo.

set "StartTIME1=1"
set /p StartTIME1=Γράψε τον χρόνο που θες να ξεκινάει η Κίνηση, αλλιώς Enter για την αρχή που είναι 1 sec:
echo.
call :checkPositiveNumber "%StartTIME1%"
if %errorlevel% neq 0 (
    echo λάθος παράμετρος ... βάζω την προκαθορισμένη που είναι 1 
    set "StartTIME1=1"
)

set StartPPS1="20"
set /p StartPPS1=Γράψε την ταχύτητα του Χ Διανύσματος [pixels per seconds], αλλιώς Enter για default 20:
echo.
call :checkPositiveNumber "%StartPPS1%"
if %errorlevel% neq 0 (
    echo λάθος παράμετρος ... βάζω την προκαθορισμένη που είναι 20 
    set "StartPPS1=20"
)

set StartANALOG="2"
set /p StartANALOG=Γράψε την θέση του Υ Διανύσματος αναλογικά, αλλιώς Enter για default 2 για μέση:
echo.
call :checkPositiveNumber0 "%StartANALOG%"
if %errorlevel% neq 0 (
    echo λάθος παράμετρος ... βάζω την προκαθορισμένη που είναι 2, δηλαδή μέση του Βίντεο 
    set "StartANALOG=2"
)
echo.
echo.
echo            Ξεκινάει η κίνηση στο !StartTIME1! δευτερόλεπτο 
echo            Με !StartANALOG! Διαιρέτη στο Υ διάνυσμα
echo            Και με ταχύτητα !StartPPS1!pps στο Χ διάνυσμα
echo.
echo.
REM overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0
REM Αν είναι μεγάλη εικόνα όσο μεγάλο και να βαλετε τον διαιρέτη δεν έχει επίδραση
REM Το μέσον είναι το 2, το κατω μέρος ειναι 1. 
REM Ανάμεσα στο κάτω μέρος με 1 και το Μέσον 2 οι δεκαδικές τιμες δουλεύουν και μετατοπιζουν το Watermark 
REM σιγα σιγα προς το μεσον. Δεκαδικούς βάζουμε με . όχι , π.χ. το μεσον ανάμεσα στο κάτω μέρος & το μέσον ειναι 1.5
REM πάνω απο τον μέσον με 2 η κινηση αλλάζει με άκεραιους λόγω του διαιρέτη που δεν μπορεί να είναι 0! 
set "StartWATERMARK=overlay='if(gte(t,!StartTIME1!), -w+(t-1)*!StartPPS1!, NAN)':(main_h-overlay_h)/!StartANALOG!"
goto FF



:FF
for /F tokens^=* %%i in ('dir /b *.mp4 *.mov *.mkv *.flv *.avi') do (
    echo.
    echo Μετατρέπω το "%%i" ..
    echo.
    call ffmpeg -v quiet -stats -loglevel error -i "%%i" -i "!StartEIKONA:"=!" -filter_complex "!StartWATERMARK!" "%%~pi%%~ni-Watermarked.%%~xi" 
    rem  κρατείστε το "!StartEIKONA:"=!" ως σύνταξη γιατί είναι πιο καλός τρόπος να αντιμετωπίσετε
    rem  τα "" που προσθέτει το tab όταν υπάρχει κενό στην μεταβλητή που έχει χρησιμοποιηθεί με την
    rem  enabledelayedexpansion γιατι σε όσα δεν έβαλε δεν έχει να αφαιρέσει κάτι ':]
    call vidChckCode.bat "%%i"
)
goto End

rem endlocal 


rem Κρατήστε αυτούς τους αλγόριθμους αν δουλεύετε με windows batching ...

rem ελέγχει αν είναι θετικός αριθμός
:checkPositiveNumber 
set "validNumber=0" 
if 1%~1 neq +1%~1 ( set /a "validNumber+=1" ) 
exit /b %validNumber%

rem ελέγχει αν είναι αριθμός ...
:checkNumber
set "validNumber=0" 
set  /a "result=%~1*%~1"
if !result! leq 0  ( set /a "validNumber+=1" ) 
exit /b %validNumber%

rem ελέγχει αν είναι θετικός αριθμός και όχι 0!
:checkPositiveNumber0 
set "validNumber=0" 
if 1%~1 neq +1%~1 ( set /a "validNumber+=1" )
if %~1 equ 0 ( set /a "validNumber-=1" ) 
exit /b %validNumber%

rem ελέγχει αν είναι αριθμός και όχι 0!
:checkNumber0
set "validNumber=0" 
set  /a "result=%~1*%~1"
if !result! leq 0  ( set /a "validNumber+=1" )
if %~1 equ 0 ( set /a "validNumber-=1" ) 
exit /b %validNumber%


:End 
call vid0ends.bat
exit /b 0


Και αυτό το αρχείο μπαίνει μέσα στο FFmpegScripts φάκελο.


W-Watermark σε Όλα-Προσθέστε μία εικόνα ως Watermark σε όλα τα Βίντεο σας.bat
@echo off
chcp 65001>NUL
rem setlocal && cd /D "%~dp0"
REM AYTO TO SCRIPT ΠΡΟΣΘΕΤΕΙ WATERMARK ΣΕ ΟΛΑ ΤΑ VIDEO ΣΑΣ. ΤΟ WATERMARK ΕΙΝΑΙ ΕΙΚΟΝΑ ΚΑΙ
REM ΑΥΤΟ ΤΟ SCRIPT ΕΙΝΑΙ ΤΟ ΠΡΩΤΟ ADVANCED SCRIPT ΠΟΥ ΔΗΜΟΣΙΕΥΩ ΩΣ EXTRA SCRIPT.
REM O ΛΟΓΟΣ ΠΟΥ ΔΕΝ ΕΒΑΛΑ ΕΞΑΡΧΗΣ SCRIPT ΜΕ ΤΟΣΕΣ ΕΠΙΛΟΓΕΣ ΣΤΟ ΑΡΧΙΚΟ ZIP ΕΙΝΑΙ ΟΤΙ ΔΕΝ ΗΘΕΛΑ
REM NA ΓΙΝΕΙ ΚΟΥΡΑΣΤΙΚΟ ΑΛΛΑ ΚΑΙ ΝΑ ΤΡΟΜΑΞΕΙ ΤΟΥΣ ΝΕΟΥΣ BATCH ΧΡΗΣΤΕΣ KAI NA ΤΑ ΑΓΑΠΗΣΟΥΝ!
REM ΤΟ SCRIPT AYTO ΕΙΝΑΙ ΣΥΜΠΛΗΡΩΜΑΤΙΚΟ ΤΟΥ gamelink.gr-ffmpeg-scripts.zip ΑΠΟ ΤΟ EL.GAMELINK.GR
REM Ακολουθεί το Url για να μάθετε περισσότερα ή να το κατεβάσετε. Καλά video editing!
REM 
REM https://el.gamelink.gr/blog/Pws-Mporeite-Na-Mikrynete-ta-Video-gia-tis-MkDocs-Selides-sas-me-to-ffmpeg/ 
REM 
pushd "%cd%"
cd /D ..\../finalFFmpegScripts/X/
set "appp=%cd%"
setlocal && cd /D "%arxiki%"
:Restart
echo.
echo Προσθέτει μια Εικόνα ως Watermark σε όλα τα αρχεία Βίντεο.
echo.
echo       Ο Μακρύς Δρόμος των επιλογών ξεκινάει...
echo.
call "%appp%\vids2IMGWatermark.bat"
endlocal
popd


Επεξηγήσεις των Scripts και αιτιολογία των επιλογών μου


Όταν εκτελέσετε το Watermark script ενδέχεται να απορήσετε γιατί το ποιο advanced Watermark (overlay στην ορολογία του FFmpeg) έχει μόνο 2 παραμέτρους ενώ τα υπόλοιπα περισσότερες.


Η εξήγηση είναι απλή. Πιστεύω ότι η 3η επιλογή με το Bounching του Watermark θα είναι η επιλογή που θα θελήσουν οι περισσότεροι που θα κατεβάσουν το Watermark-script να χρησιμοποιήσουν στα Βίντεο τους και φυσικά ο ίδιος ο FFmpeg dev που την μοίρασε σε αυτές τις 2 παραμέτρους αναφέρθηκε και ειλικρινά σας λέω δεν έχω καμία μα καμία διάθεση και απορία να μάθω τι κάνουν όλες οι υπόλοιπες παράμετροι!

Αν πάλι δουλέψετε με τις στατικές θέσεις Watermark 1-6 του αρχικού μενού δεν βάζετε και πολλές επιπλέον παραμέτρους αλλά αν επιλέξετε την 7η του 1ου μενού και μετά την 1η επιλογή του 2ου μενού θα καταλάβετε γιατί απέφυγα εντολές FFmpeg με τόσες πολλές επιλογές. Ο χρήστης στην 1η επιλογή του 2ου μενού κουράζεται γρήγορα και προσωπικά ήταν η μόνη επιλογή που με κούρασε όταν έκανα τις δοκιμές του Watermark-FFmpeg-scripts.zip και χάρηκα που δεν έκανα το λάθος να συμπεριλάβω σύνθετα batch όπως αυτό εξαρχής.


Ελπίζω να βοήθησα όσους και όσες θέλουν να ξεκινήσουν τώρα είτε ως χόμπυ, είτε ως κύριο - συμπληρωματικό επάγγελμα στον μακρύ δρόμο του Δημιουργού Περιεχομένου Βίντεο, του πραγματικού περιεχομένου Βίντεο και Όχι του Ψεύτικου που φέρνει η ΑΙ!


Υ.Γ. Μην με παρεξηγήσετε που άφησα τους 4ους αλγόριθμους στο τέλος ενώ χρησιμοποίησα μόνο τους 2. Ο λόγος είναι ότι δεν βρήκα τον αλγόριθμο που εξετάζει αν μια μεταβλητή/παράμετρος είναι αριθμός ή string στο internet και μιας και τον βρήκα είπα να τον αφήσω μέσα στον κώδικα αρχικά για να τον μοιράσω μαζί σας αλλά και να έχω κάπου αναρτημένο αν δεν είμαι στον Η/Υ μου και τον χρειαστώ στο μέλλον.