ffmpeg batch neu codieren mit Unterordnern
Ich versuche, neu codieren ein paar hundert videos auf X265 aber es gibt viele Verzeichnisse, die Leerzeichen in den Dateinamen als tun einige der Dateien. Ich habe eine Reihe von Skripten und bin kämpfen, um zu finden, das funktioniert mit den Räumen und den verschiedenen Verzeichnisebenen.
Dieses funktioniert, solange es keine Unterverzeichnisse:
#!/bin/bash
for i in *.avi;
do
ffmpeg -i "$i" -c:v libx265 -c:a copy X265_"$i"
done
Ich habe versucht, die Arbeit mit diesem bash-Skript, aber es funktioniert nicht mit den Leerzeichen bin ich raten.
#!/bin/bash
inputdir=$PWD
outputdir=$PWD
while IFS= read -r file ; do
video=`basename "$file"`
dir=`dirname "$file"`
ffmpeg -fflags +genpts -i "$file" -c:v libx265 -c:a copy "$dir"/X265_"$video"
done < <(find "$inputdir" -name "*.avi" | head -100)
In diesem thread sieht es aus wie eine gute Lösung für windows-Benutzer, aber nicht linux.
FFMPEG – Batch-Konvertierung von Unterordnern
FOR /r %%i in (*.mp4) DO ffmpeg32 -i "%%~fi" -map 0:0 -map 0:1 -map 0:1 -c:v copy -c:a:0 aac -b:a 128k -ac 2 -strict -2 -cutoff 15000 -c:a:1 copy "%%~dpni(2)%%~xi"
Wenn Euch kann mir zu der richtigen Lösung, die geeignet ist für die bash, ich würde es zu schätzen wissen.
Dies ist ein typisches Szenario für
finden
undxargs
wo
-print0
und-0
sicherstellen der korrekten Handhabung von Namen mit Leerzeichen.Und in convert.sh Sie haben Ihre for-Schleife, fast das gleiche wie in Ihrer ersten Skript
for i
ohne dass etwas dasselbe bedeutet wie „für alle Argumente“, mit denen man Dateien übergeben, die von xargs.Vorangestellt wird, der mit dem Namen mit einem string, müssen Sie die split-Namen in das Verzeichnis und Basis-Teil, und dann setzen Sie es wieder zusammen.
X265_./Sub Directory/File with Spaces.avi: No such file or directory
Mit
xargs
+sh -c
ist es auch möglich, mit bourne-Shell-Skript-Ersatz durch die übergabe der-I
variable-in diesem FallFILE
–zush -c
als positionelle parameter werden verwendet als$1
ausbau:Hier, muss ich nur abhacken die .flac-Erweiterung mit
${1%.flac}
hinzufügen und m4a.