ffmpeg batch skript

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Monroe
Beiträge: 67
Registriert: 26.10.2015 21:00:04

ffmpeg batch skript

Beitrag von Monroe » 04.04.2017 20:34:05

Kann leider keine skripte schreiben, habe daher ein kleines Problem:

Ich möchte mit ffmpeg Videodateien mit h265 enkodieren.

Mit dem folgenden Befehl geht das nur für EINE Datei super:

Code: Alles auswählen

 ffmpeg -i IMAG0021.AVI -c:v libx265 -preset medium -crf 28 -c:a aac -b:a 128k /home/username/Videos/output_name_crf28.mp4
wenn ich das in einen Stapelauftrag geben möchte, dann wird nur Audio encodiert.

Ich habe die folgende Idee genommen aus:
https://forum.ubuntuusers.de/topic/batc ... it-ffmpeg/

Code: Alles auswählen

#!/bin/bash

for movie in *.*
 do 
  ffmpeg -i "$movie" -c:v libx265 -preset medium -crf 28 -c:a aac -b:a 128k "./konvertiert/$movie"
 done

Weiß jemand eine Lösung?

Benutzeravatar
CH777
Beiträge: 1464
Registriert: 27.05.2008 16:37:17

Re: ffmpeg batch skript

Beitrag von CH777 » 04.04.2017 23:21:59

Du hast .avi und möchtest .mp4? (h265+aac im avi-Container ist sicher keine gute Idee)
ffmpeg diviniert das gewünschte Containerformat anhand der Endung der Zieldatei, deshalb vielleicht besser so:

Code: Alles auswählen

#!/bin/bash

for movie in *.*
 do 
  ffmpeg -i "$movie" -c:v libx265 -preset medium -crf 28 -c:a aac -b:a 128k "./konvertiert/$movie.mp4"
 done
Oder, etwas ansehnlicher im Ergebnis:

Code: Alles auswählen

#!/bin/bash

for movie in *.*
 do 
  ffmpeg -i "$movie" -c:v libx265 -preset medium -crf 28 -c:a aac -b:a 128k "./konvertiert/$(basename $movie AVI)mp4"
 done
Letzteres geht allerdings nur, wenn deine Ausgangsdateien tatsächlich alle .AVI als Endung haben.

Monroe
Beiträge: 67
Registriert: 26.10.2015 21:00:04

Re: ffmpeg batch skript

Beitrag von Monroe » 07.04.2017 19:06:34

vielen Dank, das hat super funktioniert. Ich dachte, es macht keinen Unterschied, welchen Container ich nehme?

Warum ging das mit einem Einzelbefehl und warum nur Audio im batch Auftrag.

Wenn jemand Zeit und Lust hat zu antworten oder ein link zur Infolektüre Avi/mp4 Container zu schicken, wäre ich sehr dankbar. Mal ganz abgesehen vom scripting und for loops oder irgendwelchen $ Zeichen, die wohl eine Variable darstellen sollen. Ärgert mich, dass ich da nicht so durchblicke...

Danke nochmals CH777 ! :THX:

Benutzeravatar
CH777
Beiträge: 1464
Registriert: 27.05.2008 16:37:17

Re: ffmpeg batch skript

Beitrag von CH777 » 08.04.2017 00:02:45

Monroe hat geschrieben:Ich dachte, es macht keinen Unterschied, welchen Container ich nehme?
Doch, macht es. Der avi-Container ist uralt und unterstützt die aktuellen Videoformate nicht (deshalb auch nur Audiowiedergabe). Der Einzelbefehl hat funktioniert, weil du da eben .mp4 als Endung angegeben hattest.
Eine sehr informative Seite zum Einlesen ist Brother John's Encodingwissen.

Die Shellkonstruktion

Code: Alles auswählen

$(...)
bedeutet "führe den Befehl in der Klammer aus", in diesem Fall

Code: Alles auswählen

basename $movie AVI
$movie ist die Datei, die in der Schleife gerade bearbeitet witd, basename entfernt Verzeichnisse und Endung vom Dateinamen, siehe auch

Code: Alles auswählen

man basename

Antworten