Scriptproblem mit Leerstellen

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

toller

Benutzer
Registriert
06. Feb. 2014
Beiträge
188
Reaktionspunkte
14
Punkte
18
Hallo,
habe ein Problem bei folgendem Script. Ich würde gerne den vollständigen Dateinamen - mit Leerstellen - aus der Quelldatei in die Zieldatei übernehmen.

cd /volume2/Downloadstation/s/
for I in *.ts; do ffmpeg -i $I -vcodec copy -acodec copy `echo $I | sed 's/.ts/.mp4/g'`; done​

Das Ganze funktioniert aber nur mit Dateien ohne Leerstellen.

Hat jemand einen Tipp?
 
Schreib mal die beiden $I in doppelte Hochkomma ("$I")
 
Danke dir für den Tipp. Jetzt ist aber meine DS schlagartig und ohne Vorwarnung abgeraucht und habe deshalb anderes zu tun... Versuche das mit dem Script später mal.
 
OK, habs probiert: Hat nix gebracht :(
 
Mmh, ich könnte mir vorstellen, dass da der hintere Teil die Probleme macht. Probier mal statt
Code:
for I in *.ts; do ffmpeg -i $I -vcodec copy -acodec copy `echo $I | sed 's/.ts/.mp4/g'`; done
Code:
for I in *.ts; do
  newname=`echo "$I" | sed 's/.ts/.mp4/g'`
  ffmpeg -i "$I" -vcodec copy -acodec copy "$newname" 
done
oder
Code:
for I in *.ts; do
  oldname="$I"
  newname=`echo "$oldname" | sed 's/.ts/.mp4/g'`
  ffmpeg -i "$oldname" -vcodec copy -acodec copy "$newname" 
done
Ansonsten spiel einfach mal ein wenig rum. Man muss nicht immer gleich alles in einer Zeile machen wollen. Das erleichtert die Fehlersuche. Etwas zusammenfassen kannst du hinterher immer noch.

PS: Nicht getestet - einfach nur so aus dem Kopf hingeschrieben. Ich kenne nicht mal ffmpeg.
 
Zuletzt bearbeitet:
Nachdem ich meine DS wieder komplett neu aufsetzen musste, habe ich jetzt eine Lösung gefunden:

Es sollen bei rund 200 von 2000 Filmen
zuerst die Leerzeichen in "_" umgeschrieben,
dann von .ts ins .mp4 Format transkodiert,
wieder die Leerzeichen zurückgesetzt und
schließlich in einen Ordner verschoben werden.

Damit klappt das jetzt ganz gut:

cd /volume2/Downloadstation/ts/
for file in *' '*.ts; do
mv "$file" "$(echo $file | sed -e 's/ /_/g')";
done ;
for I in *.ts; do
ffmpeg -y -i $I -c:v copy `echo $I | sed 's/.ts/.mp4/g'`;
done ;
mv *.mp4 /volume2/Downloadstation/ts/mp4/ ;
cd /volume2/Downloadstation/ts/mp4/
for file in *'_'*; do
mv "$file" "$(echo $file | sed -e 's/_/ /g')"; done ;


Pro ca. 4gb Film braucht die 716+II ungefähr 10-15 Minuten.

Grüßle


EDIT:
Der Einzug klappt hier micht so wirklich. Im DS Aufgabenplaner habe ich das Script sowieso komplett ohne Einzüge - sieht ja keiner :_)

EDIT 2:
Einen kleinen Fehler gibt es noch: Es werden alle .ts in mp4 umgeschrieben. Das heißt, dass auch beispielsweise das Wort "nichts" zu "nicmp4" wird.
Damit könnte ich aber leben, weil es sich um sehr wenig Dateien handelt.
 
Zuletzt bearbeitet:
Versuche bitte einmal den Extension-Punkt zu escapen - also \.ts statt .ts.
 
Genau das war es - Alles läuft jetzt perfekt. Inzwischen ist alles vollautomatisch und im Hintergrund umgewandelt und wieder abgelegt.

Danke @Benares und @dil88 für eure Hilfe!

CU
 
dil88 nur mal so, wäre es nicht besser er würde es mit $ als Ende setzen?
Theoretisch würde sonst ja nicht direkt die Endung genutzt und er müsste auch nicht global nutzen.
 
Klar, \.ts$ wäre noch besser.
 
Na dann habe ich doch was gelernt in der letzten Zeit :)
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat