2016-04-04 7 views
2

Ich schreibe ein Zsh-Skript, das einige Video-Codierung automatisiert. Die Datei konvertiert wird der erste Parameter an das Skript sein, die diese Zeile enthält:

ffmpeg -i $1 -ac 0 -vcodec libx264 -b:v 500k -crf 20 ${1:r}.mp4 

I ${1:r}.mp4 erwartet eine Datei mit dem gleichen Namen wie meine .mov-Eingang, aber mit der .mp4 Dateierweiterung zu erstellen Ersetzen von .mov. Stattdessen erhalte ich input.mov.mp4. Warum entfernt der Modifizierer: r nicht die Dateierweiterung?

+0

Okay, dumme Frage zuerst: es ist wirklich ein zsh Skript, können Sie es mit 'zsh' laufen und es gibt keine' #/bin/bash' oder ähnliches, richtig! ? Jetzt, mit dem aus dem Weg: Es ist ein bisschen schwer zu erraten, was schief läuft. Ist das das ganze Drehbuch? Haben Sie irgendwelche Einstellungen in '~/.zshenv' oder'/etc/zshenv' (oder vielleicht '/ etc/zsh/zshenv')? Wenn Sie 'setopt' in das Skript setzen, produziert es irgendeinen Output, wenn ja, was? – Adaephon

Antwort

1

Ich habe etwas Ähnliches erlebt und es scheint, als ob zsh nicht akzeptiert: r über die Positionsargumente. Stattdessen könnten Sie so etwas tun:

file=${1} 
ffmpeg -i $1 -ac 0 -vcodec libx264 -b:v 500k -crf 20 ${file:r}.mp4