Vom video player zu Animated Gif mit Automator

Was bedeutet denn größeres Video ? Wie groß ungefähr? Das Skript macht eigentlich fast nichts (und erst recht nichts aufwändiges) mit VLC. Befindet sich das Video auf einem externen Medium?
 
kann es wirklich sein das er über 6 Minuten braucht um aus einem (720p) mp4 video ein zwei sec gif mit 6 frames/s zu machen ?
und es ist nicht so das er pro bild 30 sec braucht, es passiert ewig nichts dann sind die bilder auf einmal da und er macht das gif.
 
Zuletzt bearbeitet:
Bau doch Nachrichten ein um zu schauen wo er ist.
 
Zuletzt bearbeitet:
wie kann ich das Verzeichnis mit den Bildern nachdem das gif gemacht wurde löschen ?

delete "${thePath%.*}"
oder
rm –Rf "${thePath%.*}"

gibt nur ne Fehlermeldung
 
Code:
#!/bin/bash
#set -vx

[[ "$1" = "-h" ]] && echo "Syntax: ${0##*/} [-t]" && exit 1

theLength=10; #in seconds
theResolution=640; #x in pixels (y=auto aspect ratio)
theFrameRate=8; #frames per second

thePath=$(osascript -e 'tell app "VLC" to get path of current item');
thePos=$(osascript -e 'tell app "VLC" to get current time');

[[ "$thePath" ]] && echo -e "$thePath:$thePos\n" && tmpdir=$(mktemp -d -t "${0##*/}") &&  \
/usr/local/bin/ffmpeg -i "$thePath" -ss "$thePos" -t "$theLength" -r "$theFrameRate" -vf scale="$theResolution":-1 -f image2 "$tmpdir"/%03d.png && \
/usr/local/bin/convert -delay 1x"$theFrameRate" "$tmpdir"/*.png -coalesce -layers OptimizeTransparency "${thePath%.*}.gif" || \
{ echo "VLC: No file open." && exit 2; }

[[ "$1" = "-t" ]] && exit 0 || rm -rf "$tmpdir"

In dieser Version werden die pngs in $tmpdir (meistens rootplatte: /var/folders/...) erzeugt
und anschliessend gelöscht (ausser mit switch -t).
 
Zuletzt bearbeitet:
da bei mir ein gif 5 Minuten dauert und ich nicht immer warten will bis eins fertig ist habe ich es angepasst. er macht jetzt für jedes gif ein Verzeichnis mit dem Namen und der position wo er startet "${thePath%.*}${thePos%.*}"

wenn ich jetzt am schluss rm –rf "${thePath%.*}${thePos%.*}" um das Verzeichnis zu löschen bekomme ich eine Fehlermeldung.
 
Achso mit $tmpdir macht er für jedes gif vom selben video ein eigenes Verzeichnis für die bilder?


ein problem habe ich noch, wenn ich jetzt mehrere gifs erstellen will habe ich für jedes gif das er macht den "Prozess ffmpeg" laufen. das bringt meinen mac zum einfrieren bis alle fertig sind.
gibts ne Möglichkeit das er nur einen Prozess ffmpeg laufen lässt und den nächsten hinten anstellt ? Warteschleife?
 
Was hast du denn konkret für eine Maschine und welchen ffmpeg.
Evtl. sollte man da ansetzen.

Meine alte Möhre hier, an der ich sowas probiere (MacBook 1,1 10.6.8/32bit), braucht 1 Minute für ein 640xy*10sec.gif,
wobei convert am längsten dauert.
 
Mac book pro 2,4 GHz Intel Core i5

weiss nicht wo ich nachschauen kann welche version von ich installiert ffmpeg habe. aber es liegt anscheinend schon an der Auflösung der videos. wenn ich es bei einem mit weniger Auflösung mach gehts schneller.
 
ffmpeg -version

Ich weiß nicht ob ffmpeg das inzwischen automatisch macht (ich encode durch meinen Player und der macht es), aber ggf. hilft dir ein '-threads 4' (bzw. 8).
Früher musste man das immer selbst angeben, da es keine auto detection gab.
 
scheind aktuell zu sein, was meinst du mit -threads 4 ? wo soll ich das angeben ?

ffmpeg version 2.3.1 Copyright (c) 2000-2014 the FFmpeg developers

built on Aug 13 2014 23:02:14 with Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
configuration: --prefix=/usr/local/Cellar/ffmpeg/2.3.1 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid
libavutil 52. 92.100 / 52. 92.100
libavcodec 55. 69.100 / 55. 69.100
libavformat 55. 48.100 / 55. 48.100
libavdevice 55. 13.102 / 55. 13.102
libavfilter 4. 11.100 / 4. 11.100
libavresample 1. 3. 0 / 1. 3. 0
libswscale 2. 6.100 / 2. 6.100
libswresample 0. 19.100 / 0. 19.100
libpostproc 52. 3.100 / 52. 3.100
 
Nicht ganz aktuell, aber aktuell genug, also daran liegts nicht. Angeben sollst du es bei den anderen ffmpeg Parametern.
 
Ist das die aktuelle brew? Mir fehlt bei dir --enable-runtime-cpudetect, evtl. ist das schon das Problem.

Hol' dir doch bitte mal die aktuelle 2.3.2 und teste.
 
hab es aktuallisiert aber hat sich nichts geändert. . .

ffmpeg version 2.3.2 Copyright (c) 2000-2014 the FFmpeg developers

built on Aug 18 2014 13:02:56 with Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
configuration: --prefix=/usr/local/Cellar/ffmpeg/2.3.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid
libavutil 52. 92.100 / 52. 92.100
libavcodec 55. 69.100 / 55. 69.100
libavformat 55. 48.100 / 55. 48.100
libavdevice 55. 13.102 / 55. 13.102
libavfilter 4. 11.100 / 4. 11.100
libavresample 1. 3. 0 / 1. 3. 0
libswscale 2. 6.100 / 2. 6.100
libswresample 0. 19.100 / 0. 19.100
libpostproc 52. 3.100 / 52. 3.100
 
Hänge einfach den threads Parameter in das Skript und die Sache hat sich...
Anbei, vlt. ist für deine Zwecke auf ein webm Video besser als ein gif, mal nachgeschaut/drüber nachgedacht?
 
du meinst so ?

/usr/local/bin/ffmpeg -threads 1 -i "$thePath

ich habe alles durch von 1 - 8 es dauert immer gleich lang und wenn ich mehrere gifs nacheinander machen will friert mein mac ein.
 
Also 1 bringt mal nicht so viel, wenn dann 4, 8 oder gar nicht. Wenn das nicht hilft, dann liegt deine erlebte Wartezeit nicht an einem "nur sequentiellen" ffmpeg.
Ich hab schon früher gesagt du sollst mal Textausgaben in das Skript einbauen um zu sehen, wo er so lange braucht. Das würde ich jetzt dann mal machen.

Am besten wäre es, du fügst folgendes als Textausgabe ein:
echo $SECONDS
Am besten vor dem ersten osascript Aufruf, nach dem letzten osascript Aufruf, vor und nach dem convert Aufruf.
 
Zurück
Oben Unten