Frage

Ich habe 16.000 JPGs von einem Webcan Screeb Grabber, den ich ein Jahr lang in das Hinterjahr rennen ließ. Ich möchte einen Weg finden, jedes vierte Bild zu greifen, damit ich sie dann in ein anderes Verzeichnis einfügen kann, damit ich sie später in einen Film verwandeln kann. Gibt es unter Linux ein einfaches Bash -Skript oder einen anderen Weg, das ich tun kann?

Sie werden so genannt ......

Frame-44558.jpg

Frame-44559.jpg

Frame-44560.jpg

Frame-44561.jpg

Vielen Dank von einem Neuling, der Hilfe benötigt.


Scheint gearbeitet zu haben. Ein paar Fehler in meinem Originalbeitrag. Es gab tatsächlich 280.000 Bilder und die Benennung war. /home/baldy/desktop/webcamimages/webcam_2007-05-29_163405.jpg /home/baldy/desktop/webcamimages/webcam_2007-05-29_16505.jpg /home/baldy/baldy/baldy/bal./BALDY/BABCAM/BABCAM/BABCAM/BABCAM/BALY/BALDY/BABCAM/BALY/ALBAM/BALDESKTOP/WEBCTOP/Webctop/webctop/webcamage/home/bal./BALSKAM/BALDESKTOP/BAMMAMAGE/BALBAMS/ALBAM/BALBAMSKAMIGOPSKTOPSKTOP

Ich rannte. cp $ (ls | awk '{nr ++; if (nr % 10 == 0) drucken $ 0}') ../newdirectory/

Das scheint die Bilder kopiert zu haben. 70-900 pro Tag vom Aussehen.

Jetzt leite ich Mencoder mf: //*.jpg -mf w = 640: h = 480: fps = 30: type = jpg -ovc -lavc -lavcopts vcodec = msmpeg4v2 -nosound -o ../output -msmpeg4v2.avi

Ich werde Sie wissen lassen, wie der Film funktioniert.

UPDATE: Der Film hat nicht funktioniert. Nur Bilder aus dem Jahr 2007, obwohl auch das Verzeichnis 2008 hat. webcam_2008-02-17_101403.jpg webcam_2008-03-27_192205.jpg webcam_2008-02-17_102403.jpg webcam_2008-03-27_193205.jpg webcam_2008-02-17_103403.jpg webcam_2008-03-27_194205.jpg webcam_2008-02-17_104403.jpg webcam_2008 -03-27_195205.jpg

Wie kann ich meine Mencoder -Linie so ändern, dass sie alle Bilder verwendet?

War es hilfreich?

Lösung

Ein einfacher Weg ist:

$ touch a b c d e f g h i j k l m n o p q r s t u v w x y z
$ mv $(ls | awk '{nr++; if (nr % 4 == 0) print $0}') destdir

Andere Tipps

Erstellen Sie ein Skript move.sh, das dies enthält:

#!/bin/sh
mv $4 ../newdirectory/

Machen Sie es ausführbar und tun Sie dies dann im Ordner:

ls *.jpg | xargs -n 4 ./move.sh

Dadurch wird die Liste der Dateinamen aufgebaut, vier gleichzeitig übergeht.

Dies funktioniert auch dann, wenn die Zahlen nicht genau nacheinander sind (z. B. wenn einige Frame -Nummern fehlen, und die Verwendung von Mod 4 -Arithmetik nicht funktioniert).

Wie vorgeschlagen, sollten Sie verwenden

seq -f 'frame-%g.jpg' 1 4 number-of-frames

So generieren Sie die Liste der Dateinamen, da 'LS' in 280K -Dateien fehlschlägt. Die endgültige Lösung wäre also so etwas wie:

for f in `seq -f 'frame-%g.jpg' 1 4 number-of-frames` ; do
  mv $f destdir/
done
seq -f 'frame-%g.jpg' 1 4 number-of-frames

… Drucken Sie die Namen der Dateien, die Sie benötigen.

Ein einfacher Weg in Perl (wahrscheinlich leicht an die Bash anpassungsfähig) besteht darin, die Dateinamen in einem Array zu kleiden, dann die Sequenznummer zu erhalten und diejenigen zu entfernen, die nicht durch 4 teilbar sind

So etwas druckt die benötigten Dateien:

ls -1 /path/to/files/ | perl -e 'while (<STDIN>) {($seq)=/(\d*)\.jpg$/; print $_ if $seq && $seq % 4 ==0}'

Sie können den Druck durch eine Bewegung ersetzen ...

Dies funktioniert, wenn die Dateien nacheinander nummeriert sind, auch wenn die Anzahl der Ziffern nicht konstant ist wie file_9.jpg gefolgt von file_10.jpg )

Angesichts Mastos Vorbehalte über Sortieren:

ls | sed -n '1~4 p' | xargs -i mv {} ../destdir/

Das, was ich an dieser Lösung mag, ist, dass alles tut, was es geschafft hat, und es fühlt sich für mich ein.

Iterieren Sie einfach eine Liste von Dateien:

files=( frame-*.jpg )
i=0
while [[ $i -lt ${#files} ]] ; do
  cur_file=${files[$i]}
  mungle_frame $cur_file
  i=$( expr $i + 4 )
done

Das ist ziemlich kitschig, aber es sollte die Arbeit erledigen. Angenommen, Sie sind derzeit in das Verzeichnis, das alle Ihre Dateien enthält:

mkdir ../outdir
ls | sort -n | while read fname; do mv "$fname" ../outdir/; read; read; read; done

Das sort -n Gibt es angenommen, dass Ihre Dateinamen nicht alle die gleiche Anzahl von Ziffern haben? Andernfalls ls wird in lexikalischer Reihenfolge wo sortieren, wo frame-123.jpg kommt davor frame-4.jpg Und ich glaube nicht, dass du das willst.

Bitte seien Sie vorsichtig, sichern Sie Ihre Dateien, bevor Sie meine Lösung ausprobieren usw. Ich möchte nicht dafür verantwortlich sein, dass Sie Daten im Wert von einem Jahr verlieren.

Beachten Sie, dass diese Lösung im Gegensatz zu den meisten anderen Dateien mit Leerzeichen im Namen behandelt. Ich weiß, dass das nicht Teil der Beispielfilensamen war, aber es ist einfach, Shell -Befehle zu schreiben, die Räume nicht sicher behandeln, also wollte ich das in diesem Beispiel tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top