Ich habe ein Skript wie folgt:
ffmpeg -i input.mp4 -stabilization-pass-1-stuff && \
ffmpeg -i input.mp4 -b:v xxxxk -stabilization-pass-2-h264-pass-1-stuff && \
ffmpeg -i input.mp4 -b:v xxxxk -h264-pass-2-output-stuff output.mp4
Wie kann ich das Skript umschreiben, sodass ich zu Beginn des Skripts einmalig „input.mp4“ und die Bitrate xxxxk angeben muss?
Antwort1
Mit Shell-Variablen. „Sich nicht zu wiederholen“ ist einer der Hauptanwendungsfälle für Shell-Variablen:
#!/bin/sh
file='input.mp4'
bitrate='xxxxk'
ffmpeg -i "$file" -stabilization-pass-1-stuff &&
ffmpeg -i "$file" -b:v "$bitrate" -stabilization-pass-2-h264-pass-1-stuff &&
ffmpeg -i "$file" -b:v "$bitrate" -h264-pass-2-output-stuff output.mp4
Anmerkungen:
Ihr Skript enthält keinesiebang. In diesem Fallder Interpreter hängt von der Shell ab, von der aus Sie das Skript aufrufen. Generell ist es keine gute Idee, Shebang wegzulassen. Ich habe es
#!/bin/sh
aus zwei Gründen hinzugefügt:- um zu zeigen, wie ein Shebang aussieht;
- um darauf hinzuweisen, dass Shell-Variablen ein ziemlich einfaches Konzept sind, das in funktioniert
sh
. Sie können daher davon ausgehen, dass der gleiche Code in jeder Shell funktioniert, die POSIX-kompatibel sein soll.
Danach
&&
müssen Sie nicht mehr\
in der nächsten Zeile fortfahren.- Zitieren ist wichtig.