
Ich habe ein Windows-Batch-Skript, das ich unter Linux ausführen möchte, habe aber Probleme, es in ein Shell-Skript zu konvertieren
Ich frage mich, ob jemand helfen kann.
:start
for /r %%F in (*.mkv) do (
C:\Python27\Scripts\ffmpeg\bin\ffmpeg.exe -y -i "%%F" -c:v libx264 -preset ultrafast -minrate 4.5M -maxrate 4.5M -bufsize 9M -c:a ac3 "%%~dpnF.mp4"
if not errorlevel 1 if exist "%%~dpnF.mp4" del /q "%%F"
)
TIMEOUT /T 60
goto start
Ich habe versucht, es in ein Shell-Skript umzuwandeln, aber ich habe Probleme. Ich bin nicht besonders gut darin.
for f in {*.mkv,*/*.mkv,*/*/*.mkv,*/*/*/*.mkv}; do
ffmpeg -i "$f" -c:v libx264 -preset ultrafast -minrate 4.5M -maxrate 4.5M -bufsize 9M -c:a ac3 "${f%mkv}mp4";
rm "$f";
Ich bin nicht sicher, wie ich es in einer Schleife laufen lassen kann, daher wird es ständig geprüft.
Antwort1
Eher so (Bash vorausgesetzt):
shopt -s globstar
for f in **/*.mkv
do
ffmpeg -i "$f" -c:v libx264 -preset ultrafast -minrate 4.5M -maxrate 4.5M -bufsize 9M -c:a ac3 "${f%mkv}mp4";
[[ $? -eq 0 ]] && rm "$f";
done
In der Praxis:
- Ihnen fehlte eine
done
Anweisung, die die Schleife angibt - Auch wenn Ihr
{*.mkv,*/*.mkv,*/*/*.mkv,*/*/*/*.mkv}
Muster nicht falsch ist, gibt ffmpeg für jedes nicht übereinstimmende Muster eine Fehlermeldung aus.globstar
Zusammen mit**
sorgt es dafür, dass ein einzelnes Muster über alle Verzeichnisebenen hinweg funktioniert. - Ich habe am Ende einen Test hinzugefügt, um die MKV-Datei nur zu löschen, wenn beim Transkodieren in MP4 kein Fehler aufgetreten ist.