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.

AppleScript Time- Segment aus Video extrahieren und verarbeiten

Ein AppleScrit mit dem man ein Segment aus einem Videofile in mp4 und mp3 komprimiert und ein Frame extrahiert. das Script muss im AppleScript Editor als Programm abgespeichert werden. Anschließend können die Videofiles per Drag&Drop drauf gezogen werden. Es muss dann nur noch die Anfangszeit und die Endzeit in Form von 00:00:00.00 angegeben werden.

Hat man kein File, oder mehr als ein File ausgewählt wird eine Warnmeldung ausgegeben.

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
66
67
set filecount to 0
on open infile
	set filecount to count infile
	if (filecount > 1) then
		display dialog "Please select only one file!"
		return
	end if
	set filename to do shell script ¬
		"perl -e \"print quotemeta ('" & POSIX path of infile & "');\""
	set revChar to reverse of (characters of filename) as string
	set x to (offset of "." in revChar) + 1
	set outname to text 1 thru -x of filename
 
	set StartFrame to text returned of (display dialog "Start Time:" with icon note default answer "00:15:00.24" buttons {"Cancel", "OK"} default button {"OK"})
	set EndTime to text returned of (display dialog "End Time:" with icon note default answer "01:00:00.24" buttons {"Cancel", "OK"} default button {"OK"})
	set ExtractFrame to text returned of (display dialog "Enter ExtractFrame:" with icon note default answer "00:00:30.10" buttons {"Cancel", "OK"} default button {"OK"})
 
	set std1 to text 1 thru 2 of StartFrame
	set min1 to text 4 thru 5 of StartFrame
	set sec1 to text 7 thru 8 of StartFrame
	set fps1 to text 10 thru 11 of StartFrame
 
	set stdtoframe to std1 * 60 * 60 * 25
	set mintoframe to min1 * 60 * 25
	set sectoframe to sec1 * 25
 
	set framenum to stdtoframe + mintoframe + sectoframe + fps1
 
	set std2 to text 1 thru 2 of EndTime
	set min2 to text 4 thru 5 of EndTime
	set sec2 to text 7 thru 8 of EndTime
	set fps2 to text 10 thru 11 of EndTime
 
	set stdtoframe2 to std2 * 60 * 60 * 25
	set mintoframe2 to min2 * 60 * 25
	set sectoframe2 to sec2 * 25
 
	set framenum2 to stdtoframe2 + mintoframe2 + sectoframe2 + fps2
 
	set FrameRange to framenum2 - framenum
 
	set AppleScript's text item delimiters to ","
 
	set endstd to FrameRange / 25 / 60 / 60 as string
	set endstd to text item 1 of endstd
 
	set endmin to FrameRange / 25 / 60 - endstd * 60 as string
	set endmin to text item 1 of endmin
 
	set endsec to FrameRange / 25 - endstd * 3600 - endmin * 60 as string
	set endsec to text item 1 of endsec
 
	set endfps to round (FrameRange / 25 - endstd * 3600 - endmin * 60 - endsec) * 25
 
	set timerange to endstd & ":" & endmin & ":" & endsec & "." & endfps
 
	tell application "Terminal"
		activate
		do script "/Applications/ffmpeg -ss " & StartFrame & " -t " & timerange & " -filter:v yadif=0:0:0 -i " & filename & " -pix_fmt yuv420p -vcodec libx264 -crf 23 -preset slower -s 384x216 -sws_flags lanczos -acodec aac -strict experimental -ac 1 -ar 44100 -ab 128k -threads 0 -y " & outname & ".mp4; /Applications/ffmpeg -ss " & StartFrame & " -t " & timerange & " -i " & filename & " -vn -acodec libmp3lame -ac 1 -ar 44100 -ab 64k -y " & outname & ".mp3; /Applications/ffmpeg -ss " & ExtractFrame & " -filter:v yadif=0:0:0 -i " & filename & " -frames 1 -s 500x280 -sws_flags lanczos -pix_fmt yuvj420p -sameq -y " & outname & "_" & ExtractFrame & ".jpg; exit"
	end tell
 
end open
 
if filecount < 1 then
	display dialog "Please Drag and Drop Video File for Video / Audio Compression and Frame- Extraction for Website on it!"
	return
end if

FFmpeg deshake

Mit FFmpeg lassen sich Clips auch deshaken. Ob es immer gut funktioniert und mit den „Großen“ mithalten kann, kann ich momentan nicht beurteilen.
Die ersten vier Stellen des Filter geben das Rechteck an in dem die Bewegung gesucht wird (x, y, w, h), -1 überall bedeutet, dass das ganze Bild analysiert wird.
Die nächsten beiden Ziffern (rx, ry) geben die maximale Ausmaße der Bewegung an. Als nächstes kommt der edge Parameter, welcher angibt wie die entstehenden Ränder befüllt werden sollen, 0 der Rand wird leer gelassen, 1 das Original-Bild wird genommen und gekachelt, 2 die Kanten werden extrudiert und 3 das Bild wir gespiegelt.
Die nächste Zahl gibt die Blockgröße für die Bewegungssuche an, zwischen 0 und 64 ist zulässig. Anschließend kann die Kontrastschwelle für die Blöcke angegeben werden, nur Blöcke mit mehr als der angegebene Kontrast werden berücksichtigt, Bereich 1-255.
die letzte Ziffer gibt die Suchstrategie an = 0: erschöpfende Suche, 1: weniger erschöpfende Suche. Standard – erschöpfende Suche. Es kann auch noch ein Logfile angeben werden, wenn das benötigt wird.

Wenn am Rand genug Platz ist, macht es Sinn das Video zu croppen (Beschneiden), das geschieht mit: -filter:v crop=1600:900.

1
2
3
4
5
@echo off
c:\cmdtools\ffmpeg -i %1 -filter:v deshake=-1:-1:-1:-1:32:32:0:64:125:0 ^
-filter:v crop=1600:900 -s 1024x576 -sws_flags lanczos -vcodec libx264 -crf 23 ^
-preset slow -acodec libvo_aacenc -ab 128k -absf aac_adtstoasc -threads 0 ^
-y %~n1_deshake.mp4

FFmpeg deinterlacing

Hier ein Beispiel wie ffmpeg zum Deinterlacing verwendet werden kann. -vf eldorder=tff gibt an, dass das Inputvideo Top Field first ist.
-filter:v yadif=0:0:0 ist für das Deinterlacing verantwortlich, die erste Ziffer gibt den Mode an von yadif: 0 bedeutet 1 Frame pro Frame, 1 bedeutet 1 Frame per Field, 2 verwirft den „spatial interlacing check“ und 3 ist wie 1 nur wird hier auch der „spatial interlacing check“ übergangen. Die zweite Ziffer gibt parity an: 0 heißt Top Field First, 1 Bottom Field First und -1 automatisch. Die dritte Ziffer regelt auto, hier wird unterschieden zwischen 0 = alle Frames werden deinterlaced und 1 nur die Frames werden deinterlaced welche interlaced makiert wurden.
Mit -preset medium spart man sich den ganzen x264 Codec „Brimborium“ (hier gehen auch die Presets: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo). -s 768×432 -sws_flags lanczos skaliert das Video mit dem Lanczos Filter:

1
2
3
4
@echo off
c:\cmdtools\ffmpeg -vf eldorder=tff -i %1 -filter:v yadif=0:0:0 -vcodec libx264 -crf 24 ^
-preset medium -s 768x432 -sws_flags lanczos -acodec libvo_aacenc -ab 128k ^
-absf aac_adtstoasc -threads 0 -y %~n1.mp4

FFmpeg DVD encoding

DVD encode mit ffmpeg, -flags +ilme+ildct für interlaced Material, -sameq für gleiche Qualität wie das Original:

1
2
@echo off
c:\cmdtools\ffmpeg -i %1 -sameq -target pal-dvd -aspect 16:9 -flags +ilme+ildct %~n1.mpg

FFmpeg Apple ProRes encoding

FFmpeg kann jetzt auch in prores encodieren. Profile 3 steht für HQ, 0 wäre Proxy, -acodec pcm_s24le ist optional/bzw. für eine höhere Bittiefe, -flags +ilme+ildct für interlaced Material und mit -top 1 kann man angeben ob oberes Halbbild zuerst, oder unteres Halbbild (-top 0):

1
2
3
@echo off
c:\cmdtools\ffmpeg -i %1 -vcodec prores -profile:v 3 -flags +ilme+ildct -top 1 ^
-acodec pcm_s24le %~n1.mov

FFmpeg mp3 Compression

FFmpeg eignet sich auch sehr gut zum mp3s erstellen:

1
2
@echo off
c:\cmdtools\ffmpeg -i %1 -vn -acodec libmp3lame -ab 128k "%~n1.mp3"

Das ganze geht natürlich auch im Batch- Verfahren, für mehrere Dateien gleichzeitig:

1
2
3
4
@echo off
for %%f in (%*) do (  
c:\cmdtools\ffmpeg -i %%f -vn -acodec libmp3lame -ab 128k "%%~nf.mp3"
)

Bei Windows XP kann es sein, dass der Output Pfad nicht übernommen wird, dann sollte das Script so ausschauen:

1
2
3
4
@echo off
for %%f in (%*) do (
c:\cmdtools\ffmpeg -i %%f -vn -acodec libmp3lame -ab 128k "%%~df%%~pf%%~nf.mp3"
)