[gelöst] Diashow mit ffmpeg erstellen

Sound, Digitalkameras, TV+Video und Spiele.
Benutzeravatar
ralli
Beiträge: 2701
Registriert: 02.03.2008 08:03:02

Re: Diashow mit ffmpeg erstellen

Beitrag von ralli » 01.08.2020 11:06:00

MaGe hat geschrieben: ↑ zum Beitrag ↑
01.08.2020 10:44:50
ralli hat geschrieben: Das Ergebnis hat mich dann doch etwas überrascht.

mit dem Sript von @wanne?

wenn ja kein großer unterschied hast alle mit -b:v 1500k konvertiert
du hast deine Bilder ( Videos ) mit -b:v 1500k angepasst.



gruss MaGe
Genau so ist es. deshalb ist die gleiche Größe nicht wirklich verwunderlich. Das meiste Bildmaterial (eigentlich alles) ist bei mir jpg und ich werde das zukünftig nicht mehr konvertieren, weil ich darin keinen SInn und Mehrwert erkennen kann. Bin auf diesem Gebiet allerdings auch kein Experte, und laß mich deshalb gerne belehren.

Gruß ralli
System: Debian Buster - Cinnamon Desktop - CPU: Intel Core i7-870 - RAM: 16 GB - GPU: AMD (2 GB) - SSD 128 GB - HD: 1 TB

MSfree
Beiträge: 5917
Registriert: 25.09.2007 19:59:30

Re: Diashow mit ffmpeg erstellen

Beitrag von MSfree » 01.08.2020 11:16:25

ralli hat geschrieben: ↑ zum Beitrag ↑
01.08.2020 11:06:00
ich werde das zukünftig nicht mehr konvertieren, weil ich darin keinen SInn und Mehrwert erkennen kann.
Du hast schon recht, es ergibt keinen besonderen Sinn, die Bilder zu konvertieren. ffmpeg muß die Bilder ohnehin beim Laden dekomprimieren und hat dann ein unkomprimiertes Bild im RAM, bevor es neu in das Zielformat MP4 komprimiert wird.

wanne
Moderator
Beiträge: 6527
Registriert: 24.05.2010 12:39:42

Re: Diashow mit ffmpeg erstellen

Beitrag von wanne » 01.08.2020 12:59:05

müssen dann die Bilder nicht identisch sein?
Ja. Fast. Es gibt am Ende Rundungsfehler beim Decodieren vom jpeg. Btw. rundet ffmpeg gerne mal etwas "flotter" (Nutzt intels avx, dass es gerne mal nicht so genau beim Rechnen nimmt.)

Code: Alles auswählen

SSIM Y:0.994990 (23.001598) U:0.969569 (15.166880) V:0.978440 (16.663563) All:0.987995 (19.206344)
Das ist ein Bug im ffmpeg. Der kann nicht verschiedene Bilder mit unterschiedlichen pix_fmts vergleichen. Da kommt normalerweise totaler Müll raus. Ich nehme an, dein Bild ist in erster Linie schwarz und deswegen sieht das einigermaßen gut aus.
Leder kann png nur rgb24 rgba rgb48be rgba64be pal8 gray ya8 gray16be ya16be monob
Und jpeg nur yuvj420p yuvj422p yuvj444p
Damit ist ffmpeg zu blöd pngs mit jpegs zu vergleichen. Ausdrückliche Empfehlung der Entwickler: Zuerst alles nach rgb24-png umwandeln und dann vergleichen. Am ende macht spätestens deine Grafikkarte Konversion+Rundung eh. Imagemagick kann ssim erst in neueren Versionen als die aus Debian. Auch da würde ich aber tippen, dass die Genauigkeit für die SSIM Berechnung nicht ausreicht um die Rundungsfehler beim Koverteiren von jpeg zu png festzustellen.
Frage ist das normal das die Dateien .JPG so aufgepumpt werden
Kommt auf jpeg an. Bei jpeg kannst du vor allem die Qualität zu Gunsten der Dateigröße runterschrauben. Das kann man auch mit png. Gedacht ist es so nicht und es gibt auch weit weniger Möglichkeiten.
Steuern kannst du das mit -q im ffmpeg oder -quality im imagemagick. Schraub mal an den Parametern -q 50 und auch du wirst den Qualitätsunterschied merken. Dafür reichen die qualtitiven Möglichkeiten von pngs weit über die von jpegs raus. So kann png z.B. bis zu 281 Billionen Farben. 16Millionen mal mehr als jpeg. (Auch hier ist die Frage, was das bringt wenn die neusten Bildschirme gerade mal eine Milliarde Farben darstellen können.) Noch weniger nutzen hast du davon, wenn dein Ursprungsbild ein jpeg ist und deswegen eh schon viel weniger Farben enthält. Der zweite fette Parameter ist wie lange du dir zeit lässt nach einem kleinen Bild zu suchen, dass deinen Inhalt darstellt. Pngcrush ist ein tool das sich da für pngs deutlich mehr Arbeit macht und kleinere exakt gleiche Bilder produziert.
Der fette Vorteil ist, dass png-Konvertierungen nicht verlustbehaftet sein müssen. Du magst den unterschied bei ein mal konvertieren nicht sehen. Aber du konvertierst jetzt schon 2 mal. Wenn du dann das Xte mal konvertierst und jedes mal die Qualität abnimmt hast du irgend wann wirklich Müll. Deswegen hält man seine Zwischenergebnisse immer möglichst verlust- und rechenarm (und nimmt dafür in größeren Dateigrößen in kauf) die werden später ja eh gelöscht. Danach wird konvertiert
Das spricht doch dafür, das jpg Format zu benutzen. Und tatsächlich geschieht das auch heute noch überwiegend in der Praxis.
Nein. jpeg ist Qualität vs. Dateigröße beschissen. jpeg2000 oder webp sind bei gleicher Qualität so um den Faktor 5 kleiner. AVIF soll nochmal deutlich besser sein. jpeg wird so gerne verwendet, weil es überall funktioniert. Siehe dein Fernseher: Kann kein png. Kann kein webp. Kann kein jpeg2000.
Das Ergebnis hat mich dann doch etwas überrascht.
Ich gar nicht. Ich habe da -b:v 1500k angegeben. Damit bestimme ich die Dateigröße. Bei 7min Film gibt das nach Adam Riese 75MiB. Das hat der ffmpeg jetzt etwas verfehlt. Aber nicht zu schlimm. Du könntest mit -minrate wohl nochmal etwas nachhelfen das wirklich zu erreichen.
Btw. fühle ich mich da ein bisschen verarscht: Dein Fernsher hat wohl Probleme mit kleinen Dateien. Den ganzen "Klateradatsch" den ich da dran gehängt habe bläst die Datei nur "unnötig" auf damit das Ding irgend wie auf dem TV abspielt. (Habe ich mir vom Imagination abgeguckt das macht das auch so. TV macht das selbe und baut absichtlich "nullen" in den Stream ein, weil Decoder wohl Probleme mit zu kleinen Streams haben. Dass das für Dateien auch gilt war mir neu.)
Die folgenden Kommandos werden dir ein Video in deutlich besserer Qualität liefern und dabei so ca. 1.5MiB statt 60MiB groß ist (crf peilt nur eine gewisse Qualität an und erlaubt dem ffmpeg die Datei möglichst klein zu machen auch hier kann man wie bei pngcrush mit -speed bzw. -preset einstellen wie lange gesucht werden soll um kleinere Ergebnisse bei gleicher Qualität zu erreichen.):

Code: Alles auswählen

ffmpeg -r "1/3" -i image%02d.png  -c:v vp9 -pix_fmt yuv420p -crf 18 out.mkv
ffmpeg -r "1/3" -i image%02d.png  -c:v libx264 -pix_fmt yuv420p -crf 18 out.mp4
Genau so ist es. deshalb ist die gleiche Größe nicht wirklich verwunderlich. Das meiste Bildmaterial (eigentlich alles) ist bei mir jpg und ich werde das zukünftig nicht mehr konvertieren, weil ich darin keinen Sinn und Mehrwert erkennen kann. Bin auf diesem Gebiet allerdings auch kein Experte, und laß mich deshalb gerne belehren.
Es gibt eigentlich keinen Sinn. Den Grund habe ich genannt:
Gerade festgestellt: ffmpeg ist sauer wenn abwechselnd pngs und jpegs kommen.
ffmpeg hat halt das Problem dass er auf der Kommandozeile (in der C API schon) nicht aus abwechselnd png UND jpeg einen Film machen kann. Du musst als entweder alle jpeg in png umwandeln oder alle png in jpeg. Beim Umwandeln von png in jpeg wird die Qualität schlechter in die andere Richtung bleibt sie (weitestgehend). Deswegen habe ich mich für die andere Richtung entschieden. wenn wirklich ALLE Bilder jpegs sind macht die Umwandlung natürlich keinen Sinn.
rot: Moderator wanne spricht, default: User wanne spricht.

wanne
Moderator
Beiträge: 6527
Registriert: 24.05.2010 12:39:42

Re: Diashow mit ffmpeg erstellen

Beitrag von wanne » 02.08.2020 12:47:11

Die Diskussion um JPEG nach TID 178201 abgetrennt.
rot: Moderator wanne spricht, default: User wanne spricht.

Benutzeravatar
ralli
Beiträge: 2701
Registriert: 02.03.2008 08:03:02

Re: Diashow mit ffmpeg erstellen

Beitrag von ralli » 03.08.2020 16:58:10

So ich habe noch weiter experimentiert. Herausgekommen ist folgendes Script:

Code: Alles auswählen

 
printf "file '%s'\n" *.JPG > list.txt 

ffmpeg -r 0.2 -f concat -i list.txt -target pal-dvd -s 1280x720 video.mpg
Das meiste Bildmaterial ist nicht so üppig von der Größe und Auflösung, das reicht mir völlig und die Qualität ist akzeptabel.

Wer tiefer eintauchen möchte, kommt um die Original Dokumentation nicht herum.

https://ffmpeg.org/ffmpeg.html

Damit kann man sich Monate beschäftigen .... Für mich reicht es erst mal. Mehr wollte ich nicht.

Gruß ralli
System: Debian Buster - Cinnamon Desktop - CPU: Intel Core i7-870 - RAM: 16 GB - GPU: AMD (2 GB) - SSD 128 GB - HD: 1 TB

MaGe
Beiträge: 979
Registriert: 01.06.2014 17:12:16

Re: [gelöst] Diashow mit ffmpeg erstellen

Beitrag von MaGe » 03.08.2020 19:58:26

ralli hat geschrieben: ffmpeg -r 0.2 -f concat -i list.txt -target pal-dvd -s 1280x720 video.mpg
PAL DVD ist immer 720x576 mit einem 4:3 oder 16:9-Seitenverhältnis

Es sind andere Rahmengrößen zulässig: 704x576, 352x576, 352x288. Aber werden selten verwendet.



gruss MaGe
Wir müssen uns vor der Klimaerwärmung nicht fürchten.
Uns rottet die soziale Kälte viel früher aus.

Benutzeravatar
ralli
Beiträge: 2701
Registriert: 02.03.2008 08:03:02

Re: [gelöst] Diashow mit ffmpeg erstellen

Beitrag von ralli » 03.08.2020 20:09:51

Ist mir schon klar, aber tatsächlich erstellt er mit dem zusätzlichen Parameter -s 1280x720 ein Video mit genau dieser Auflösung. Und es läuft einwandfrei auf meinem Smart TV mit annehmbarer Qualität. Warum das so funktioniert, kann ich Dir nicht beantworten. Ob er das dann interpoliert? Kann ja mal den Parameter weglassen und schau mir dann die Videogröße an.

Gruß ralli
System: Debian Buster - Cinnamon Desktop - CPU: Intel Core i7-870 - RAM: 16 GB - GPU: AMD (2 GB) - SSD 128 GB - HD: 1 TB

Benutzeravatar
ralli
Beiträge: 2701
Registriert: 02.03.2008 08:03:02

Re: [gelöst] Diashow mit ffmpeg erstellen

Beitrag von ralli » 03.08.2020 20:17:18

Wenn ich den Parameter -s 1280x720 weg lasse ist die Videogröße 120 MB, mit erzwungener HD Auflösung 247 MB. Bei meiner bevorzugten Lösung habe ich auch links und rechts keine schwarzen Trauerränder und der Bildschirm ist ganz ausgefüllt.

Gruß ralli
System: Debian Buster - Cinnamon Desktop - CPU: Intel Core i7-870 - RAM: 16 GB - GPU: AMD (2 GB) - SSD 128 GB - HD: 1 TB

MaGe
Beiträge: 979
Registriert: 01.06.2014 17:12:16

Re: [gelöst] Diashow mit ffmpeg erstellen

Beitrag von MaGe » 03.08.2020 22:13:53

ralli hat geschrieben: Und es läuft einwandfrei auf meinem Smart TV
Ich dachte eher an eine DVD ( -target pal-dvd ), und ob die
mit der einstellung 1280x720 vom Dvd player erkannt wird ?



gruss MaGe
Wir müssen uns vor der Klimaerwärmung nicht fürchten.
Uns rottet die soziale Kälte viel früher aus.

wanne
Moderator
Beiträge: 6527
Registriert: 24.05.2010 12:39:42

Re: [gelöst] Diashow mit ffmpeg erstellen

Beitrag von wanne » 03.08.2020 23:31:26

Ist mir schon klar, aber tatsächlich erstellt er mit dem zusätzlichen Parameter -s 1280x720 ein Video mit genau dieser Auflösung. Und es läuft einwandfrei auf meinem Smart TV mit annehmbarer Qualität. Warum das so funktioniert, kann ich Dir nicht beantworten. Ob er das dann interpoliert? Kann ja mal den Parameter weglassen und schau mir dann die Videogröße an.
Das war ziemlich genau mein erster Vorschlag und du hast behauptet, dass er dann das Seitenverhältnis verzieht. Deswegen habe ich die Ränder dran gepackt.
Kann es sein, dass wir jetzt nicht mehr über das gleiche Ausgangsmaterial reden?
rot: Moderator wanne spricht, default: User wanne spricht.

Benutzeravatar
ralli
Beiträge: 2701
Registriert: 02.03.2008 08:03:02

Re: [gelöst] Diashow mit ffmpeg erstellen

Beitrag von ralli » 04.08.2020 06:59:32

wanne hat geschrieben: ↑ zum Beitrag ↑
03.08.2020 23:31:26
Ist mir schon klar, aber tatsächlich erstellt er mit dem zusätzlichen Parameter -s 1280x720 ein Video mit genau dieser Auflösung. Und es läuft einwandfrei auf meinem Smart TV mit annehmbarer Qualität. Warum das so funktioniert, kann ich Dir nicht beantworten. Ob er das dann interpoliert? Kann ja mal den Parameter weglassen und schau mir dann die Videogröße an.
Das war ziemlich genau mein erster Vorschlag und du hast behauptet, dass er dann das Seitenverhältnis verzieht. Deswegen habe ich die Ränder dran gepackt.
Kann es sein, dass wir jetzt nicht mehr über das gleiche Ausgangsmaterial reden?
Ganz genau, jetzt habe ich ein Ausgangsmaterial von gleich großen Bildern benutzt, die ich vor einigen Jahren mit meiner digitalen Spiegelreflexkamera machte. Das erschien mir sinnvoller, um Fehler zu vermeiden. Ich habe nur das behauptet, was als Ergebnis herauskam. Natürlich kann ich weiter h264 einbauen, ist aber für meine Zwecke nicht unbedingt erforderlich. Auch will ich keine Wissenschaft daraus machen. Habe trotz allem einiges hinzugelernt. Ist ja klar, war ja auch alles völliges Neuland für mich. Wirklich hilfreiche deutsche Dokumentationen fand ich nur ganz wenige. ffmpeg ist sehr sehr umfangreich, so das ich alles schrittweise mit Versuch und Irrtum herausgefunden habe.

Danke wanne, eine Befehlsfolge will auch verstanden werden. Das bedarf der Zeit und Einarbeitung. Ihr (auch Du) habt mir die Tür geöffnet, durchgehen muß ich selbst.

Hier eine gute deutsche Dokumentation, die ich zum besseren Verständnis hilfreich fand.

Guckst Du hier:

https://hartmut.homelinux.org/Linux/ffmpeg.html

Gruß ralli
System: Debian Buster - Cinnamon Desktop - CPU: Intel Core i7-870 - RAM: 16 GB - GPU: AMD (2 GB) - SSD 128 GB - HD: 1 TB

Benutzeravatar
ralli
Beiträge: 2701
Registriert: 02.03.2008 08:03:02

Re: [gelöst] Diashow mit ffmpeg erstellen

Beitrag von ralli » 04.08.2020 07:04:06

MaGe hat geschrieben: ↑ zum Beitrag ↑
03.08.2020 22:13:53
ralli hat geschrieben: Und es läuft einwandfrei auf meinem Smart TV
Ich dachte eher an eine DVD ( -target pal-dvd ), und ob die
mit der einstellung 1280x720 vom Dvd player erkannt wird ?



gruss MaGe
Könnte ich ja mal ausprobieren, aber normalerweise benutze ich keine CD/DVD mehr.

Gruss ralli
System: Debian Buster - Cinnamon Desktop - CPU: Intel Core i7-870 - RAM: 16 GB - GPU: AMD (2 GB) - SSD 128 GB - HD: 1 TB

Benutzeravatar
ralli
Beiträge: 2701
Registriert: 02.03.2008 08:03:02

Re: [gelöst] Diashow mit ffmpeg erstellen

Beitrag von ralli » 04.08.2020 08:29:52

Hallo MaGe,

"probieren geht über studieren" heißt es bei uns .... also hab ich die Slideshow einmal als mpg Datei und ein zweites Mal als mp4 Datei (beides mpeg2) als Video CD gebrannt. Im Einsatz ist hier ein Blueray Player, der die Video CD's einwandfrei erkannt und abgespielt hat. Ist damit Deine Frage beantwortet?

Gruß ralli
System: Debian Buster - Cinnamon Desktop - CPU: Intel Core i7-870 - RAM: 16 GB - GPU: AMD (2 GB) - SSD 128 GB - HD: 1 TB

MaGe
Beiträge: 979
Registriert: 01.06.2014 17:12:16

Re: [gelöst] Diashow mit ffmpeg erstellen

Beitrag von MaGe » 04.08.2020 09:50:42

ralli hat geschrieben: Video CD's einwandfrei erkannt und abgespielt hat. Ist damit Deine Frage beantwortet?
Ja :D und nein :(

ich besitze schon einige jahre keinen Standaloneplayer mehr!

Ja als Video CD

Nein Als DVD, ich meinte mit der DVD-Datenstruktur

Code: Alles auswählen

VIDEO_TS.BUP
VIDEO_TS.IFO
VTS_01_0.BUP
VTS_01_0.IFO
VTS_01_1.VOB 


gruss MaGe
Wir müssen uns vor der Klimaerwärmung nicht fürchten.
Uns rottet die soziale Kälte viel früher aus.

Benutzeravatar
ralli
Beiträge: 2701
Registriert: 02.03.2008 08:03:02

Re: [gelöst] Diashow mit ffmpeg erstellen

Beitrag von ralli » 05.08.2020 10:33:19

Damit auch hier nun Klarheit herrscht und um endgültig alle Zweifel auszuräumen, habe ich eben eine Original Video DVD mit DEVEDE gebrannt. Natürlich hat sie eine Menustruktur und wird von meinem Blueray Player auch einwandfrei erkannt und abgespielt. Es handelt sich um eine mit ffmpeg erstellte mpg Datei mit HD Auflösung 1280x720. Noch Fragen?

Gruß ralli
System: Debian Buster - Cinnamon Desktop - CPU: Intel Core i7-870 - RAM: 16 GB - GPU: AMD (2 GB) - SSD 128 GB - HD: 1 TB

Antworten