Shell Skripte

      Shell Skripte

      Hi Leute, also folgende kurze frage
      ab und an möchte ich meine mp4 doch für meinen Stick im Lkw Umwandeln in mp.3
      soweit alles klar, habe das bis jetzt da es meist nicht viel ist mit ffmpeg über die Konsole Händisch bewerkstelligt.

      Jetzt dachte daran das zu Automatisieren und eben einen Ordner zu erstellen wo ich das Skript und meine Umzuwandelnden Daten in einem rutsch eben machen lasse.
      Dazu noch ein Dokument erstelle über die vorhandenen mp4 dateien.

      Shell-Script

      1. #!/bin/bash
      2. ls -1 *.mp4 > verzeichniss.txt
      3. ls *.mp4 | while read file
      4. do
      5. ffmpeg -i "$file" -vn -acodec mp3 -ab 128k $file.mp3
      6. done


      soweit funktioniert das auch, ausser das er mit dem Umwandeln nach der ersten datei aufhört und ich hätte nun gern gewußt warum ?

      also in die txt datei führt er alles ordenltich auf der Reihe nach aber die Verarbeitung bricht eben nach der ersten datei ab. bzw wird beendet

      Danke für eure Tipps, Gruß Sky
      Phenom X6 - Nvidia GTX 960 - openSUSE Leap 42.3
      ___________________________________________________________________________________________________

      "Der Anfang einer jeden Katastrophe ist ne beschissene Vermutung"

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „glako“ ()

      Warum so kompliziert?

      Verwende

      Quellcode

      1. for i in AUSDRUCK ;
      2. do WAS_AUCH_IMMER "$i" ;
      3. done


      und spare Dir temporäre Dateien und die ganze "while read"-Konstruktion.

      Greetz,

      RM

      P.S. Nur so nebenbei, zunächst erzeugst Du mit

      Quellcode

      1. ls -1 *.mp4 > verzeichniss.txt

      eine Datei, und dann

      Quellcode

      1. ls *.mp4 | while read file

      liest Du sie gar nicht aus (und verwendest auch nicht "-1", was Dir wahrscheinlich zu guter Letzt noch das Auslesen mit read verhagelt), macht also doppelt (oder gar dreifach) keinen Sinn.

      Aber davon abgesehen, "for" ist Dein Freund und lass den ganzen anderen Konstrukt einfach weg.
      "Programming today is a race between software engineers striving to build better & bigger idiot-proof programs and the Universe trying to produce bigger & better idiots. So far, the Universe is winning." (Rick Cook)

      Dies ist ein _öffentliches_ Supportforum, keinerlei Support per PN, EMail oder Instant Messenger.

      openSUSE Leap 42.3 - Kernel 4.18.x - fluxbox 1.3.7

      Bitmessage: BM-2D8h8QZmvHfgbixWeiG1NDZHG1iXAhBz8K
      danke für die fixe Antwort, aber jetzt mal langsam, hätte evtl dazuschreiben sollen das ich da absoluter Anfänger im Skripten bin und das war ein Beispiel das ich hier eingegeben habe also direkt so wie es hier vor mir steht und ich mir eingebildet habe es verstanden zu haben.

      also

      Quellcode

      1. ls -1 *.mp4 > xxxx.txt
      erzeugt eine Liste mit allen mp4 Dateien die in dem verzeichniss stehen wo das Skript ausgeführt wird. Soweit denke ich bin ich richtig.
      Du hast recht in dem Punkt das ich diese Liste dann nicht auslese, diese diente auch nur zum Zweck zu wissen was ursprünglich in dem Verzeichniss stand und hatte auch nicht funktioniert bzw führte zum gleichen Ergebniss.

      ls -1 ändert doch nur die Form der Liste oder irre ich mich?, denn es existiert kein Unterschied ob ich hier

      Quellcode

      1. ls *.mp4
      benutze oder

      Quellcode

      1. ls -1 *.mp4
      das hatte ich schon so stehen wie gesagt macht aber keinen Unterschied im Ablauf, es wird immer die erste datei gewandelt ansonsten keine. Ich kann mir auch das mal for dann am Wochenende vornehmen aber richtig bleibt doch

      Quellcode

      1. ls -1 *.mp4 | while read file
      würde bedeuten

      erzeuge eine Temporäre Liste, wandle die Datei die du ausliest um solange bis das Ende der Liste erreicht ist und dann beende das Skript

      So hätte ich als Anfänger das Beispiel hier jetzt verstanden was aber auch nicht funktioniert, werde mich aber mal an deine Ausführungen wagen. Danke

      So und noch ein kurzes Update von mir:

      Shell-Script

      1. #!/bin/bash
      2. for i in *.mp4
      3. do
      4. ffmpeg -i "$i" -ab 128k "${i%mp4}mp3"
      5. done


      ist klar funktioniert danke nochmal RM, aber ich werde mit dieser read Geschichte aus dem Buch hier nochmal rumexperimentieren weil ich nicht verstehe was ich hier falsch mache :D aber ich fang ja auch grad an mit skripten und ist hier auch nicht schön beschrieben in dem Beispiel: read zum Zeilenweisen auslesen einer datei oder eines verzeichnis.

      Habe mich nochmal damit hingesetzt und natürlich bin ich immernoch damit auf dem Holzweg ;(
      aber vielleicht kann Rain_Maker mir auch kurz mal erklären warum hier überhaupt der andere Weg besser ist und oder wo bei mir auch der Wurm liegen könnte denn machen könnte man es über read ja anscheinend auch sonst hätten dies ja auch nicht hinbekommen ?(

      Quellcode

      1. !/bin/bash
      2. ls -1 *.mp4 > Liste
      = leite die ls ausgabe statt in die Konsole in die Datei Liste

      Quellcode

      1. while read Liste
      = während du die datei Liste liest

      Quellcode

      1. do
      = tue folgendes

      Quellcode

      1. ffmpeg -i $Liste -ab 128k ${Liste%mp4}mp3
      wandle sämtliche einträge aus dieser liste von mp4 in mp3

      Quellcode

      1. done < Liste
      = ist die Liste abgearbeitet dann beende das Skript
      Phenom X6 - Nvidia GTX 960 - openSUSE Leap 42.3
      ___________________________________________________________________________________________________

      "Der Anfang einer jeden Katastrophe ist ne beschissene Vermutung"

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „glako“ ()