Ondersteuning > Programmeren

videobestanden verkleinen in batch

(1/2) > >>

h2o:
Ik heb voor mijn werk regelmatig een opdracht waarbij ik foto's en filmpjes moet verkleinen. Daarna gaat dat allemaal in het archief.
Voor foto's gaat dat via dit script:

--- Code: ---#!/bin/sh
find -name "*.jpg" -exec mogrify -resize 1600 -quality 75 {} \;
find -name "*.JPG" -exec mogrify -resize 1600 -quality 75 {} \;
echo klaar
exit
--- Einde van code ---

Hiermee worden alle .jpg en .JPG bestanden in één run verkleind, ook de onderliggende subdirectories.

Voor MPG bestanden heb ik iets dergelijks nodig.
Nu heb ik dit scriptje:
--- Code: ---ffmpeg -i input.mpg -acodec mp2 outputfile.mp4
--- Einde van code ---
Dan moet ik eerst de bestanden qua naamzetting aanpassen en daarna één voor één verkleinen. Dat gaat overigens goed. Een filmpje van 4 GB gaat al gauw terug naar 900 MB en dan is het nog goed te bekijken.
Eigenlijk wil ik dus voor video bestanden een scriptje hebben al alle mpg en MPG bestanden (inclusief de onderliggende subdirectories) in één keer pakt. Liefst ook verbose zodat ik de voortgang in de gaten kan houden.

Wie kan mij helpen?

kuifje09:
This sort of scripts I am using regularly.


Watch carfully for the extentions, use always a dry-run first



--- Code: ---
#!/bin/bash

## Change mp4 to mpg or MPG or which you have....
## in all INPUT below.

ls -1 *mp4 | while read line
do
## cut extention to get filename- Whatch out for strange characters
echo ${line%%\.mp4}
In=${line%%\.mp4}
echo ${In}

## change output filename in a simple way. add -C as example.
## and the extention you want from ffmpeg

Out=${In}-C
echo ${Out}

## If names look OKAY... then, only then, start with conversion
## change conversion to which you want too have it.
## Look for the extentions....

##  ffmpeg -i "${In}.mp4" -target pal-svcd "${Out}.vob"
## to show what would run...
echo  ffmpeg -i "${In}.mp4" -target pal-svcd "${Out}.vob"

done


--- Einde van code ---

EDIT: Little touchup.

vanadium:
Een éénvoudige manier om een commando op meerdere bestanden te herhalen is:

--- Code: ---for f in *.mp4 ;  do ffmpeg -i "$f" ... "$f".small.mp4 ;  done

--- Einde van code ---
Dit herhaalt het commando op alle aanwezige mp4 bestanden en schrijft het resultaat uit naar bestanden met dezelfde naam, maar .small.mp4 op het einde. Je kan ook vooraf een folder "small" maken en dan het resultaat daar terecht laten komen door "small/$f" aan te geven.

h2o:

--- Citaat van: vanadium op 2021/03/19, 11:23:25 ---Een éénvoudige manier om een commando op meerdere bestanden te herhalen is:

--- Code: ---for f in *.mp4 ;  do ffmpeg -i "$f" ... "$f".small.mp4 ;  done

--- Einde van code ---
Dit herhaalt het commando op alle aanwezige mp4 bestanden en schrijft het resultaat uit naar bestanden met dezelfde naam, maar .small.mp4 op het einde. Je kan ook vooraf een folder "small" maken en dan het resultaat daar terecht laten komen door "small/$f" aan te geven.

--- Einde van citaat ---
Ziet er mooi uit en meteen uitgeprobeerd. Alleen krijg ik de melding:

--- Citaat ---[NULL @ 0x55bab9d06040] Unable to find a suitable output format for '...'
...: Invalid argument

--- Einde van citaat ---

er zit toch nog ergens een foutje.

vanadium:
Tja, ik onderstelde wel dat je je eigen correcte ffmeg commando zou invullen. Die drie puntjes staan er dan ook maar als plaatsvuller voor de opties die je zal nodig hebben om te doen wat je wil  =D

Eérst een commando bouwen dat werkt op één bestand. Dan kan je het op die wijze laten uitvoeren over alle bestanden.

Navigatie

[0] Berichtenindex

[#] Volgende pagina

Naar de volledige versie