Archiv der Kategorie: Batch Allerlei

Hier werden verschiedene Batch Scripte veröffentlicht. Das ganze dient mehr als Nachschlagewerk. Große Beschreibungen wird es eher nicht geben.

media-autobuild_suite

Unter Linux gibt es ein tolles Script mit welchem sich das Kompilieren von ffmpeg und andere Tools für Windows automatisieren lässt.

https://github.com/rdp/ffmpeg-windows-build-helpers )

Etwas ähnliches habe ich jetzt auch für Windows geschrieben. Das Script läuft auch weitestgehend automatisch ab. Es muss lediglich ausgewählt werden ob man für Windows 32 bit, 64 bit, oder Beides kompiliert werden soll. Ob „non free“ Encoder, wie fdk aac, eingebunden werden soll und wie viele CPU Cores verwendet werden soll.

Für das Ausführen und verwenden ist es wichtig, dass das Script in einem Ordner kopiert und ausgeführt wird, welcher keine Leerzeichen im Pfad hat. Z.B.: C:\mingw

Da keine Registry Keys, oder Systemvariablen gesetzt werden, kann der Ordner, wenn er nicht mehr benötigt wird, problemlos gelöscht werden. Es bleiben keine Rückstände übrig.

Momentan werden kompiliert:

  • a52dec
  • bzip2
  • exiv2
  • fdkaac (standalone and lib for ffmpeg)
  • ffmpeg
  • faac (standalone and lib for ffmpeg)
  • fftw
  • flac (standalone)
  • fltk
  • fontconfig
  • freetype
  • frei0r
  • gettext
  • gsm
  • gnutls (standalone and lib for ffmpeg)
  • lame (standalone and lib for ffmpeg)
  • ImageMagick (standalone (32 bit))
  • jpeg
  • jpeg2000
  • jpegturbo
  • libass
  • libbluray
  • libcaca
  • libdvdcss
  • libdvdnav
  • libdvdread
  • libilbc
  • libmad
  • libmodplug
  • libmpeg2
  • libpng
  • libsoxr
  • libtiff
  • libtwolame
  • libutvideo
  • libxml2
  • libzvbi
  • lua
  • mediainfo cli (only 32 bit)
  • mp3lame (standalone and lib for ffmpeg)
  • mp4box (standalone)
  • mplayer (standalone)
  • orc
  • opencore-amr
  • openEXR (standalone and lib for ImageMagick)
  • openjpeg
  • ogg
  • opus
  • opus-tools (standalone)
  • qt4
  • rtmp (standalone and lib for ffmpeg)
  • schroedinger
  • sdl (for ffplay)
  • sdl_image
  • sox
  • speex (standalone and lib for ffmpeg)
  • theora
  • vlc player
  • vidstab
  • vpx (standalone and lib for ffmpeg)
  • vo-aacenc
  • vo-amrwbenc
  • vorbis
  • x264 (standalone and lib for ffmpeg)
  • x264 10 bit (standalone)
  • x265 (standalone and lib)
  • x265 16 bit (standalone)
  • xavs (standalone and lib for ffmpeg)
  • xvid
  • zlib

Finden tut ihr die neuste Version immer unter:

https://github.com/jb-alvarado/media-autobuild_suite

Viel Spaß damit!

 

( Da das Tool open source ist, ist die Nutzung natürlich auf eigene Gefahr… 🙂 )

Durch Ordner und Unterordner „schleifen“ und nach Dateiendungen suchen

Manchmal kann es vorkommen, dass man in vielen Unterordnern nach Dateien suchen muss um sie zu löschen, bearbeiten, oder sonstiges mit anzustellen. In meinem Beispiel lasse ich einen Ordner durchsuchen, in dem VLC compiliert wurde. Es sollen alle Dateien mit der Endung „.a“ und „.la“ gelöscht werden und mit dem Tool ubx lasse ich anschließend alle „.exe“ und „.dll“ files packen, damit sie weniger Platz auf der Festplatte einnehmen (vor dem packen nahm vlc ~230 mb in Anspruch, nach dem Packen nur noch 32,3 mb).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@echo off
 
FOR /R "vlc-2.2.0-git" %%A IN (*.a) DO del %%A
FOR /R "vlc-2.2.0-git" %%B IN (*.la) DO del %%B
 
FOR /R "vlc-2.2.0-git" %%C IN (*.exe) DO (
	D:\Dateien\DEV\mingw\bin\strip.exe %%C 
	D:\Dateien\DEV\mingw\bin\upx.exe --best --strip-relocs=0 %%C
	echo.%%C done...
	)
FOR /R "vlc-2.2.0-git" %%D IN (*.dll) DO (
	D:\Dateien\DEV\mingw\bin\strip.exe %%D 
	D:\Dateien\DEV\mingw\bin\upx.exe --best --strip-relocs=0 %%D
	echo.%%D done...
	)
 
pause

Falls benötigt, das Tool ubx lässt sich hier herunterladen:
http://upx.sourceforge.net/#downloadupx

Batch Update Timer

Hier mal eine Idee für einen Batch updater. Gedacht ist, dass das Batchprogramm alle 4 Monate Updates installiert. Das ganze ist sehr einfach gehalten, wie man sieht werde Schaltjahre und Monatslängen nicht berücksichtigt. Im Grunde wird einfach überprüft ob zum letzten mal Ausführen schon 120 Tage vergangen sind, wenn ja kann man wählen ob das Batch vorsetzen soll.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
@echo off
Setlocal EnableDelayedExpansion 

:: path to update ini
set "ini=D:\Dateien\DEV\BatchScripts\update.ini"
 
set year=%date:~-4%
set month=%date:~-7,2%
set day=%date:~-10,2%
 
set splitMonth=%month:~0,1%
set splitDay=%day:~0,1%
 
if %splitMonth%==0 (
	set month=%month:~-1%
	)
if %splitDay%==0 (
	set day=%day:~-1%
	)	
 
if not exist %ini% (
	echo.year=%year%>>%ini%
	echo.month=!month!>>%ini%
	echo.day=!day!>>%ini%
	)
 
for /F "tokens=2 delims==" %%a in ('findstr /i year %ini%') do (
	set oldYear=%%a
	)
for /F "tokens=2 delims==" %%b in ('findstr /i month %ini%') do (
	set oldMonth=%%b
	)
for /F "tokens=2 delims==" %%c in ('findstr /i day %ini%') do (
	set oldDay=%%c
	)	
 
set /a calcDays = %year% * 365 + %month% * 30 + %day%
set /a calcOldDays = %oldYear% * 365 + %oldMonth% * 30 + %oldDay%
set /a diffDays = %calcDays% - %calcOldDays%

:: update cycle 120 days = 4 month
if %diffDays% LSS 120 GOTO run
echo.
echo....................................................................
echo.
echo.....Update Progress................................................
echo.
echo....................................................................
echo.
echo.
echo.Do you want to update media_compressor? Type: yes or no
echo.
set /P keyInput="Update Process:"
echo.
if %keyInput% == no exit
 
if %keyInput% == yes (
	del %ini%
	echo.year=%year%>>%ini%
	echo.month=!month!>>%ini%
	echo.day=!day!>>%ini%
	)
 
:run
pause

VLC Player auf mehreren Bildschirmen gleichzeitig abspielen.

Wenn man mehrere Filme auf mehreren Bildschirmen gleichzeitig abspielen möchte kann man das über ein Batchscript sehr schön lösen. Je nach Leistung des Computers funktioniert das nicht zu 100%, aber einige Millisekunden sollten verschmerzbar sein.

In dem folgenden Beispiel werden 5 Bildschirme angesteuert:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
 
set vlcPath="C:\Program Files (x86)\VideoLAN\VLC\vlc.exe"
 
 
 
start "erster VLC" %vlcPath% --loop "Clip1.mp4" --no-qt-fs-controller --qt-start-minimized --qt-fullscreen-screennumber=3 --video-x=-5120 --video-y=100 --no-embedded-video --fullscreen --video-on-top --no-video-title-show
start "zweiter VLC" %vlcPath% --loop "Clip2.mp4" --no-qt-fs-controller --qt-start-minimized --qt-fullscreen-screennumber=5 --video-x=-3090 --video-y=100 --no-embedded-video --fullscreen --video-on-top --no-video-title-show
start "dritter VLC" %vlcPath% --loop "Clip3.mp4" --no-qt-fs-controller --qt-start-minimized --qt-fullscreen-screennumber=1 --video-x=-1030 --video-y=100 --no-embedded-video --fullscreen --video-on-top --no-video-title-show
start "vierte VLC" %vlcPath% --loop "Clip4.mp4" --no-qt-fs-controller --qt-start-minimized --qt-fullscreen-screennumber=2 --video-x=0 --video-y=0 --no-embedded-video --fullscreen --video-on-top --no-video-title-show
start "fuenfte VLC" %vlcPath% --loop "Clip5.mp4" --no-qt-fs-controller --qt-start-minimized --qt-fullscreen-screennumber=4 --video-x=1030 --video-y=100 --no-embedded-video --fullscreen --video-on-top --no-video-title-show
 
 
pause
tskill vlc /A

Um die Position zu ermitteln, am besten über Grafiktreiber die Bildschirm ID anzeigen lassen, und in Script korrigieren, auch was den Versatz angeht.

VLC bietet auch eine Master/Slave Funktion über Netzwerk an. Hier einfach noch mal nach googlen.

Mit ffmpeg Videos für Nokia 206 komprimieren

Das Script liest mit ffprobe zuerst die Auflösung aus und korrigiert gegebenenfalls die Höhe. Für Avisynth wird zusätzlich mvtools2 und ffms2 benötigt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
@echo off
Setlocal EnableDelayedExpansion 
 
for %%f in (%*) do (
 
	for /F %%g in ('ffprobe -v quiet -print_format default^=nk^=0:nw^=1 -show_streams -i %%f') do echo %%g>>"%%~nf.tmp"
	for /F "tokens=2 delims==" %%h in ('findstr width %%~nf.tmp') do set Width=%%h
	for /F "tokens=2 delims==" %%i in ('findstr height %%~nf.tmp') do set Height=%%i
 
	set /a newHeight=176*!Height!/!Width!
	set "infile=%%~sf"
 
	if !newHeight!==99 ( 
		set newHeight=100 
		) 
 
	echo.SetMTMode^(5, 4^) >> "%%~nf.avs"
	echo.LoadPlugin^("C:\Program Files (x86)\AviSynth 2.5\plugins\ffms2.dll"^) >> "%%~nf.avs"
	echo.LoadPlugin^("C:\Program Files (x86)\AviSynth 2.5\plugins\mvtools2.dll"^) >> "%%~nf.avs"
	echo.A = FFAudioSource^("!infile!"^) >> "%%~nf.avs"
	echo.V = FFVideoSource^("!infile!"^) >> "%%~nf.avs"
	echo.audiodub^(V,A^) >> "%%~nf.avs"
	echo.SetMTMode^(2^) >> "%%~nf.avs"
	echo.Lanczos4Resize^(176,!newHeight!^)>> "%%~nf.avs"
	echo.super = MSuper^(pel=2^)>> "%%~nf.avs"
	echo.backward_vec = MAnalyse^(super, isb = true^)>> "%%~nf.avs"
	echo.forward_vec = MAnalyse^(super, isb = false^)>> "%%~nf.avs"
	echo.MFlowFps^(super, backward_vec, forward_vec, num=15, den=1, ml=100^)>> "%%~nf.avs"
 
"ffmpeg.exe" -i %%~nf.avs -pix_fmt yuv420p -c:v libx264 -preset slower -crf 25 -profile:v Baseline -level 1.1 -maxrate 128K -bufsize 128K -acodec libfdk_aac -ar 22050 -ac 1 -ab 64k %%~nf_cell.mp4
 
del "%%~nf.tmp"
del "%%~nf.avs"
del "!infile!.ffindex"
)
 
echo.
echo....................................................................
echo.
echo.....................converting done................................
echo.
echo....................................................................
echo.
 
ping 127.0.0.0 -n 3 >nul
echo.
echo Window close in 15
echo.
ping 127.0.0.0 -n 5 >nul
echo.
echo Window close in 10
echo.
ping 127.0.0.0 -n 5 >nul
echo.
echo Window close in 5
echo.
ping 127.0.0.0 -n 5 >nul
echo.

Mit ImageMagick Bilder ab bestimmter Breite resizen

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
@echo off
Setlocal EnableDelayedExpansion 
 
for %%f in (%*) do (
	FOR /F %%k in ( 'identify.exe -format %%W %%f' ) do set Width=%%k
	if !Width! GTR 1024 (
	echo.
	echo.------------------------------------
	echo.Process: %%~nf
	echo.Format: %%~xf
	echo.Width: !Width!
	echo.------------------------------------
	echo.
	if %%~xf==.jpg (
	convert.exe %%f -gamma .45455 -filter Lanczos -resize 1024 -gamma 2.2 -quality 87 %%~nf%%~xf
	) else (
		convert.exe %%f -gamma .45455 -filter Lanczos -resize 1024 -gamma 2.2 %%~nf%%~xf
		)
	)	
	echo.done...
	ping 127.0.0.0 -n 2 >nul
)
echo.
echo....................................................................
echo.
echo.....................Processing finish................................
echo.
echo....................................................................
echo.
 
ping 127.0.0.0 -n 3 >nul
echo.
echo Window close in 15
echo.
ping 127.0.0.0 -n 5 >nul
echo.
echo Window close in 10
echo.
ping 127.0.0.0 -n 5 >nul
echo.
echo Window close in 5
echo.
ping 127.0.0.0 -n 5 >nul
echo.

Zwei Ordner vergleichen und Dateinamen ab bestimmter Stelle kopieren

Mit diesem Beispiel lassen sich Ordner vergleichen und die Dateinamen kopieren. Bei diesem Code werden die ersten 8 Zeichen verglichen, sind diese gleich werden die restlichen Zeichen in die Dateinamen kopiert.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
@echo off
Setlocal EnableDelayedExpansion 
 
set "source=ornder1"
set "target=ornder2"
 
 
for %%f in (%target%\*.tif) do (
	set "name1=%%~nf"
	set newname1=!name1:~,8!
 
	for %%i in (%source%\*.tif) do (
		set "name2=%%~ni"
		set newname2=!name2:~,8!
		if !newname1!==!newname2! ren !target!\!name1!.tif !name2!.tif
		)
	)
 
 
pause