Überblick:
Ich versuche, meine hauptsächlich MKV-Bibliothek in MP4 umzuwandeln. Ich habe ein Skript, das die Untertitel aus den Videodateien extrahiert hat.
Ich habe ein weiteres Skript, das alle MKV-Dateien in einem bestimmten Ordner remuxt. Was ich brauche, ist, dass das SkriptnurRemux-Ordner, in denen es erkennt, dass sich .srt-Dateien befinden.
Alle .srt-Dateien enden mit ***.eng.srt
Hier ist mein aktuelles Remux-Skript:
#!/bin/bash
IFS=$'\n'
clear
for filename in *.mkv
do
echo "$filename"
newfilename="${filename%.mkv}.mp4"
echo "${newfilename}"
ffmpeg -fix_sub_duration -i $filename -c:v copy -c:a copy -c:s mov_text $newfilename
done
Danke! Jede Hilfe wird sehr geschätzt.
Antwort1
Ich glaube, Sie suchen das hier:
#!/bin/bash
clear
for filename in *.mkv
do
## Exit if there are no srt files
[ ! -e *.srt ] && echo "No .srt files found, exiting" && exit
echo "$filename"
newfilename="${filename%.mkv}.mp4"
echo "${newfilename}"
ffmpeg -fix_sub_duration -i "$filename" -c:v copy -c:a copy -c:s mov_text "$newfilename"
done
Ich habe es entfernt, IFS='\n'
da es dort nichts Nützliches bewirkt. Ihre for
Schleife ist auch bei Namen mit Leerzeichen ziemlich sicher, solange Sie Ihre Variablen in Anführungszeichen setzen.
Die [ -e foo ]
Tests auf die Existenz von foo
. Umgekehrt [ ! -e foo ]
ist wahr, wenn es kein gibt foo
. In diesem Fall foo
ist ein Glob ( *.srt
), sodass der Test falsch ist, wenn übereinstimmende Dateien gefunden werden. Im obigen Skript &&
bedeutet dies, dass, wenn keine srt
Dateien gefunden werden, die Fehlermeldung ausgegeben und das Skript beendet wird.