ubuntuusers.de

Skript mit Input aus Textdatei

Status: Gelöst | Ubuntu-Version: Ubuntu 13.10 (Saucy Salamander)
Antworten |

Nooster Team-Icon

Avatar von Nooster

Anmeldungsdatum:
17. Juni 2008

Beiträge: 920

Hallo!

Ich habe mehrere Videos auf meiner Festplatte, aus denen ich mit avconv jeweils Teile herausschneiden will (von einem 30-Sekunden-Video möchte ich z.B. nur den Teil zwischen Sekunde 15 und 20 haben). Der Befehl dazu lautet:

avconv -i input.mp4 -ss 15 -acodec copy -vcodec copy -t 5 output.mp4

Ich habe aber viele Videos, daher möchte ich das gerne automatisieren. Dazu habe ich schon eine Textdatei (in.txt) angelegt, mit folgendem Beispielinhalt:

input.mp4 15 5 output.mp4
input1.mp4 32 10 output1.mp4
input2.mp4 10 7 output2.mp4
...

Das Schema ist: Inputdateiname, Startsekunden zum Schneiden, Dauer des Outputvideos, Name des Outputvideos (so wie es im avconv-Befehl erfordert wird).

Wie muss ich jetzt den avconv-Befehl anpassen, damit jede Zeile von in.txt abgerufen wird und jeweils die Felder ausgefüllt werden? Da gibt es doch mit Sicherheit einen Einzeiler, oder?

Vielen Dank! Nooster

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Wohnort: Göttingen

Folgende Zeile sollte das erledigen (hab's aber nichts getestet):

while read line; do avconv -i $(echo $line|cut -d' ' -f1)  -ss $(echo $line|cut -d' ' -f2) -acodec copy -vcodec copy -t $(echo $line|cut -d' ' -f3) $(echo $line|cut -d' ' -f4) ; done < <(cat in.txt)

Nicht gerade elegant, aber tun sollte es...

Nooster Team-Icon

(Themenstarter)
Avatar von Nooster

Anmeldungsdatum:
17. Juni 2008

Beiträge: 920

So gehts auch (und sieht etwas eleganter aus):

1
2
3
while read -r infile ss t outfile; do 
  avconv -i "$infile" -ss "$ss" -acodec copy -vcodec copy -t "$t" "$outfile"
done < in.txt

Quelle: http://askubuntu.com/questions/480841/scripting-with-variables-from-file

Antworten |