Gesplittete DVB-Aufnahmen mit ffmpeg reparieren

Caramon2 schrieb:
Also könnte das jeder umbenennen, der den (hier öffentlich geposteten) Link hat?
Ja, das ist aber nur Kosmetik.
Caramon2 schrieb:
Oder auch löschen usw., also alles was auf https://0x0.st beschrieben ist?
Löschen kann man nur wenn man den x-token für die entsprechende Datei hat. Den bekommt man beim hochladen mit curl -v und setzt ihn in ein weiteres curl Kommando (steht auf der Hilfeseite).

Das ist ja nur für temporäres Wegwerfzeug gedacht.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Caramon2
Uridium schrieb:
Löschen kann man nur wenn man den x-token für die entsprechende Datei hat. Den bekommt man beim hochladen mit curl -v und setzt ihn in ein weiteres curl Kommando (steht auf der Hilfeseite).
Ok, also gibt es doch eine gewisse Sicherheit. - Ich hatte mit sowas noch nie zu tun und curl kannte ich nur vom Namen.

Normalerweise nutze ich nur die andere Richtung: "wget -c …" und aria2 für torrents, was ich für Linux-ISOs bevorzuge, da es damit auf keinen Fall Probleme mit resume gibt: z. B. um den restlichen Traffic des Monats zu verbraten und den Rest dann im nächsten Monat zu laden.

Zu den Aufnahmen:

Womit vergleicht man eigentlich am besten die Überschneidungen bei den Videos?

Einfach zwei Hexeditoren nebeneinander war nicht so praktikabel: "Nur" 47k sind in der Form doch erstaunlich viel. :)
 
Caramon2 schrieb:
Womit vergleicht man eigentlich am besten die Überschneidungen bei den Videos?
Indem man (mit dem Hexeditor) nach Hexbytes suchen lässt, also die ersten 32 Bytes der zweiten Datei in der ersten Datei aufspürt.
 
Das hatte ich mit dem wxHexEditor versucht, aber das war nicht sehr übersichtlich.

Ich dachte, es gäbe vielleicht ein Gegenstück zu "diff", das gleiches raussucht. - z. B. "same 47k 1.ts 2.ts" sucht nach identischen 47k Blöcken.
 
Zuletzt bearbeitet:
Caramon2 schrieb:
Das hatte ich mit dem wxHexEditor versucht, aber das war nicht sehr übersichtlich.
wxHexEditor ist eine Katastrophe. Ich habe versucht, das da nachzustellen. Die normale Hexsuche hat nur Unsinn gefunden, während 'Alle finden' es zwar ausfindig machen konnte, aber auch eine Absturzmeldung hervorbrachte. Der beste Hexeditor unter Linux ist 010Editor.
 
Uridium schrieb:
Die normale Hexsuche hat nur Unsinn gefunden, während 'Alle finden' es zwar ausfindig machen konnte, aber auch eine Absturzmeldung hervorbrachte.
Bei mir hat er zuerst das richtige gefunden, aber mehrfach, da zu kurzer Suchbegriff, dann war auch immer das falsche als Treffer markiert und eine Fehlermeldung hatte ich auch, es gab aber ein "Continue" und ich konnte wirklich weiter machen. Dann habe ich aufgegeben, da ich dachte du hättest vielleicht ein passendes Tool dafür genutzt und meine mamuelle Suche wäre unnütze Zeitverschwendung.

Naja. Zumindest weiß ich jetzt, dass der wx Müll ist und ich ihn nicht aus Unkenntnis falsch bedient hatte:

Das letzte Mal, dass ich sowas genutzt habe, war auf dem C64, um die zweite Diskettenseite von Testdrive zu reparieren: Die Sektoren einer Datei verwiesen an einer Stelle auf sich selbst, so dass das Diskettenlaufwerk in einer Endlosschleife hing.

Btw:


Heftig!

Uridium schrieb:
Der beste Hexeditor unter Linux ist 010Editor.
Sehe ich mir nächstes Mal an.
 
  • Gefällt mir
Reaktionen: Uridium
Uridium schrieb:
Der 8590 übernimmt beim Split Reste vom vorigen Buffer. Im Fragment 1e.ts sind die hinteren 47KiB mit den ersten 47KiB von 2a.ts identisch.
47K ist offenbar sein "Ding": Alle Teildateien sind absolut glatt durch 47K teilbar und bei allen, egal ob SD, HD, oder von welchem Sender, wiederholen sich die letzten 47K der vorherigen Teildatei.

Ich habe es übrigens doch nochmal mit dem wx versucht und offenbar hatte er seine "guten 5 Min.": :)

wxHexEditer.png

Da habe ich sicherheitshalber kontrolliert, ob es auch bei 2e->3a vom DMax bei 47K bleibt.

Also beim 8500 besteht kein Handlungsbedarf, da er ohne Überlappung trennt, für den 8590 ist das hiermit gelöst und wenn jemand anderes ein ähnliches Problem hat, weiß er/sie/es, wie man die Größe der Überlappung herausfindet.

Morgen werde ich mir überlegen, wie ich das per Skript automatisiere, wobei ich mir überlegt habe, dass ich besser nicht die Originalaufnahmen per truncate kürze: Falls ich das aus irgendeinem Grund wiederholen muss (und ich deshalb abgelenkt bin), werden ja weitere 47K abgeschnitten, weil ich nicht daran denke.

Besser ist es, die Originaldateien nicht zu verändern und stattdessen die jeweils ersten 47K mit "dd bs=47K skip=1 …" beim kopieren zu überspringen.

Außerdem "muss" ich noch "+discardcorrupt" testen.
 
Wobei Du vielleicht auch mal (sofern möglich) andere Formate auf der HDD (oder USB Stick) testen könntest. Es war ja mal die Rede von "large blocksize" u.ä. Exoten. Das kann bei einem kleinen Settop Gerät auch mal schief gehen (Nebeneffekte), gerade bei NTFS. Das kompatibelste, wenn auch nicht schnellste (muss es überhaupt so schnell sein?) Format dürfte FAT32 sein.

Der Gedanke dahinter ist, dass die ungewöhnlich große Blockgröße der HDD zu grob "rastert" und aufgefüllt werden muss (letzter Block). Bei Standard 4KB Blocksize wäre das u.U. nicht nötig.

Caramon2 schrieb:
Btw:

Sinnlos, aber genial. :)
 
Zuletzt bearbeitet:
Uridium schrieb:
Wobei Du vielleicht auch mal (sofern möglich) andere Formate auf der HDD (oder USB Stick) testen könntest. Es war ja mal die Rede von "large blocksize" u.ä. Exoten. Das kann bei einem kleinen Settop Gerät auch mal schief gehen (Nebeneffekte), gerade bei NTFS. Das kompatibelste, wenn auch nicht schnellste (muss es überhaupt so schnell sein?) Format dürfte FAT32 sein.
Die Clustergröße hat besonders bei fat auf Sticks einen sehr gravierenden Einfluss und kann u. U. zu solchen Störungen bei der Aufnahme führen, dass die spätere Wiedergabe an der Stelle abbricht.

Ich nehme deshalb auf SATA-SSDs in USB-Gehäusen auf und ntfs bringt dort *) mit 16k Cluster die beste Leistung. Im Gegensatz zu ntfs mit 4k (oft) oder 64k (gelegentlich), hatte der 8500 mit 16k bisher noch nie eine Störung: VideReDo zeigt dann in der Zusammenfassung dropped Frames an.

Beide Receicer scheinen nur einen sehr kleinen Schreibcache zu nutzen (der 8500 vielleicht sogar gar keinen), so dass das selbst bei SSDs Auswirkungen hat.

*) wie auch unter Windows oder mit ntfs3, egal ob HD, SSD, oder USB-Stick: Ich hatte das umfassend getestet.

Wie dort auch geschrieben (+ die vorherigen Beiträge), wäre fat-64k für sowas das beste, aber aus mir nicht bekannten Gründen wird das nicht vollständig getrimmt: Nur im USB-Gehäuse. Schließe ich die SSD per SATA im PC an und trimme sie nochmal, funktioniert es zuverlässig.

Bei allen anderen getesteten Dateisystemen funktioniert trimmen auch im USB-Gehäuse vollständig.

Uridium schrieb:
Der Gedanke dahinter ist, dass die ungewöhnlich große Blockgröße der HDD zu grob "rastert" und aufgefüllt werden muss (letzter Block). Bei Standard 4KB Blocksize wäre das u.U. nicht nötig.
47k sind genauso wenig durch 4 wie durch 16 teilbar: Ich wäre überrascht, wenn das Dateisystem oder die Clustergröße einen Einfluss darauf hätte. Zumal 4k definitiv schlechter sind.
 
Uridium schrieb:
Der Gedanke dahinter ist, dass die ungewöhnlich große Blockgröße der HDD zu grob "rastert" und aufgefüllt werden muss (letzter Block). Bei Standard 4KB Blocksize wäre das u.U. nicht nötig.
Andere FS/Clustergrößen ändern nichts.

Da ich i. d. R. nicht den kompletten Datenträger partitioniere (um Platz für solche Tests zu haben)), habe ich hinten drei 16 GB Sticks nachgestellt (noch die geläufige Größe, als ich den Receiver 2015 gekauft habe) und fat/ntfs jeweils mit Windows XP standardmäßig formatiert und eine mit ntfs-64k (mehr unterstützt der Receiver nicht, würde aber auch sowieso nur Nachteile bringen):

8590-Dateisystem-Test.png

Dann habe ich von ZDFinfo-HD (da ich nicht jedesmal >2h auf die >4GB warten wollte) darauf aufgenommen.

Dass es bei den 47K blieb, war keine Überraschung, aber dann wurde es toll:

Zuerst habe ich bei allen ersten Aufnahmedateien mit truncate (war ja nichts wichtiges) die letzten 47K entfernt.

Dann habe ich die jeweils zwei Dateien per ffmpeg-pipe zusammenkopiert (ich hatte die Schnittpunkte extra kontrolliert: keine Störungen).

Und anschließend die drei Aufnahmen per ffmpeg-demux zu einer großen kopiert (weil es ja eigentlich eine durchgehende Aufnahme war, nur mit kurzen Unterbrechungen zum wechsel der Aufnahme-Partition), da demux bei den Tests gestern das einzige war, wo anschließend mit AVIdemux das streamcopy der Schnittstellen funktioniert hat.

Demux produziert mit den doppelten 47K zwar die deutlichsten Störungen, aber repariert es auch irgendwie, so dass AVIdemux keine Probleme mehr damit hat.

Diesmal lief ffmpeg allerdings komplett ohne die geringste Fehlermeldungen durch und AVIdemux hatte beim auseinander kopieren der einzelnen Sendungen auch keine Probleme: Es lief vollkommen sauber! :)

Das ist schon mal richtig gut und viel mehr, als ich jemals zu hoffen wagte! :)

Ich bin so froh, dass hier 1. LoslessCut vorgestellt wurde und es 2. so enttäuschend war: Sonst wären wir wahrscheinlich niemals hierauf zu sprechen gekommen. ;)

Btw:

Momentan nutze ich diese Skripte (ursprünglich "tscp" für "ts copy"):

tscc (cat - auch wenn ich pv für die Fortschrittsanzeige nutze):
Bash:
#!/bin/bash
if [ $# == 0 ];then echo "tscc Zielname in '/tmph/'";exit;fi
pv *.ts > "/tmph/$1.ts"

tscp (pipe):
Bash:
#!/bin/bash
if [ $# == 0 ];then echo "tscp Zielname in '/tmph/'";exit;fi
cat *.ts | ffmpeg -hide_banner -nostats -ignore_unknown -i pipe: -map v:0 -map a:0 -c copy "/tmph/$1.ts"

tscd (demux):
Bash:
#!/bin/bash
if [ $# == 0 ];then echo "tscd Zielname in '/tmph/'";exit;fi
ffmpeg -hide_banner -nostats -ignore_unknown -f concat -safe 0 -i <(for f in ./*.ts; do echo "file '$PWD/$f'"; done) -map v:0 -map a:0 -c copy "/tmph/$1.ts"

"-ignore_unknown" habe ich wieder eingebaut, da es ja nicht schadet und vielleicht irgendwann doch mal einen Unterschied macht.

"-nostats" weil ich sowieso nicht darauf achte und brauche, falls ich die Ausgabe wieder per 2> in eine Textdatei leiten will.

Bzgl. dd mit skip 47K habe ich mir noch nichts überlegt: Alles zu seiner Zeit. :)
 
Caramon2 schrieb:
Demux produziert mit den doppelten 47K zwar die deutlichsten Störungen, aber repariert es auch irgendwie, so dass AVIdemux keine Probleme mehr damit hat.
Die Integrität des Containers wird durch das Remultiplexen wiederhergestellt, die des Inhalts nicht. Deshalb würde ich immer erst versuchen auf Dateiebene zu reparieren.

Die korrekte Vorgehensweise ist, den Stream auf Dateiebene zusammen zu schneiden (47k cut, pipe-join mit '-fflags +discardcorrupt', um Übertragungsfehler und ähnliches raus zu filtern) und danach in mp4/mkv zu multiplexen. Dann klappt das auch mit Losslesscut.
 
Uridium schrieb:
Die Integrität des Containers wird durch das Remultiplexen wiederhergestellt, die des Inhalts nicht. Deshalb würde ich immer erst versuchen auf Dateiebene zu reparieren.
Ich hatte gestern passend gekürzte SD-Aufnahmedateien zusammenkopiert, um die einzelnen Methoden zu vergleichen:

Sowohl mit cat und ffmpeg-pipe/concat wurde das vollkommen sauber, aber bei ffmpeg-demux war zwar der Ton sauber, aber das Bild hing kurz: Ca. ½s, also vermutlich 1 GOP, die die SD immer 12 Frames groß sind.

Ob das auch beim zusammenkopieren der vorher mit ffmpeg-pipe zusammenkopierten einzelnen Aufnahmen passiert ist, hatte ich nicht kontrolliert, da ffmpeg-demux ohne Fehlermeldungen durch lief und es ja sowieso die Aufnahmeunterbrechung zum wechseln der Aufnahmepartition gab.

Uridium schrieb:
Die korrekte Vorgehensweise ist, den Stream auf Dateiebene zusammen zu schneiden (47k cut, pipe-join mit '-fflags +discardcorrupt', um Übertragungsfehler und ähnliches raus zu filtern) und danach in mp4/mkv zu multiplexen.
Stimmt! An Übertragungsfehler, durch z. B. starken Regen, hatte ich noch gar nicht gedacht. - Übrigens ist HD da sehr viel empfindlicher:

Ich hatte es schon mal, dass es währen einer Aufnahme zu einem kurzen Starkregenschauer kam und der Empfang vollständig zusammenbrach. Da nur kurz, habe ich die Aufnahme weiterlaufen lassen, aber anschließend ließ sie sich nur bis zur Störung abspielen: An alles, was anschließend noch aufgenommen wurde, kam man nicht heran: Weder mit dem Receiver, noch am PC, egal was ich versuchte.

Bei SD hätte ich bei Wiedergabe mit dem Receiver die gestörte Stelle einfach überspringen können und am PC wäre das erst recht kein Problem gewesen.

Das kann ich vermutlich leicht nachstellen, indem ich während einer Aufnahme einen feuchten Lappen vors LNB halte: Die Schüssel ist auf der Dachterrasse leicht erreichbar.

Btw:

Ich hatte heute morgen nach dem Aufwachen eine Idee bzgl. truncate:

Um doppeltes truncatieren zu vermeiden, brauche ich die Endung nur von .ts auf .tst ändern: Bei nochmaligen Aufruf würde truncate mit *.ts ins leere laufen und es würde außerdem verhindert, dass ffmpeg noch nicht beschnittene Dateien verarbeitet, da es ja die *.tst nutzt.

Da der 8590 die Dateien ###.ts benennt und der 8500 data####.ts, kann man auch die eindeutige unterscheiden und das Skript würde letztere einfach nur in .tst umbenennen, da sie ja schon passend "zugeschnitten" sind.

Das ist unkomplizierter als mit dd+skip (keep it simple ;) ) und ich kann, falls etwas nicht funktioniert hat, auch sofort erkennen, ob die Teildatei schon zugeschnitten ist oder nicht.

Uridium schrieb:
Dann klappt das auch mit Losslesscut.
LC ist für mich in jeder Hinsicht nutzlos, da AVIdemux sehr viel besser, übersichtlicher und schneller ist:

LC zeigt nicht mal den jeweiligen Frametyp an und ist bei der Navigation so ungeheuer zäh (es dauert jedesmal einen deutlichen Moment, bevor der angesteuerte Frame angezeigt wird (selbst wenn man per Cursortasten Bildweise weiterschaltet - afair wurde das Vorschaufenster jedesmal vorher kurz schwarz), während man mit AVIdemux absolut flüssig durchschrollen kann), das für mich damit kein vernünftiges Arbeiten möglich ist.
 
Uridium schrieb:
mit '-fflags +discardcorrupt', um Übertragungsfehler und ähnliches raus zu filtern
Dazu findet man leider nicht viel, aber hier wird bzgl. MPEG-TS empfohlen es nicht zu nutzen:
Within HLS input consisting of MPEG-TS segments, each media packet consists of a continuity counter. The CC of the initial packet of a segment is supposed to follow on from the last packet of the prior segment. Some HLS packagers, including ffmpeg, reset these CC across segments (limitation rather than choice).

When demuxing, the HLS packager presents the concatenated media as a single stream and the child MPEG-TS demuxer expects the CC to remain continuous, which it isn't, so it flags it as corrupt. Nothing wrong with the actual media data.
Mir ist allerdings nicht klar, inwieweit das auf DVB-Empfang übertragbar ist.

Ich habe es erst mal eingebaut und sehe dann ja was passiert. :)

Das aktuelle "tscp"-Skript:
Bash:
#!/bin/bash
if [ $# == 0 ];then echo "tscp Zielname in '/tmph/'";exit;fi

if [ -e data0001.ts ]
  then for f in data????.ts
  do mv $f $f"t"
done;fi

if [ -e 000.ts ]
  then for f in ???.ts
  do truncate -s-47K $f && mv $f $f"t"
done;fi

sync -f .
cat *.tst | ffmpeg -hide_banner -nostats -ignore_unknown -fflags +discardcorrupt -i pipe: -map v:0 -map a:0 -c copy "/tmph/$1.ts"
Bei beiden wird die jeweils erste Aufnahmedatei geprüft.
 
Caramon2 schrieb:
Dazu findet man leider nicht viel, aber hier wird bzgl. MPEG-TS empfohlen es nicht zu nutzen:
Das bezieht sich auf HLS (HTTP Live Streaming). HTTP/TCP hat garantierte Datenintegrität. Ist ein Paket defekt, wird es neu angefordert, bis es passt. In diesen Bitstream sollte man durchaus nicht eingreifen.

Probiere es doch mit den Dateien, die Du hochgeladen hast, aus. Die 47k nicht wegschneiden und mit pipe-join und fflags zusammenfügen.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Caramon2
Uridium schrieb:
Das bezieht sich auf HLS (HTTP Live Streaming). HTTP/TCP hat garantierte Datenintegrität. Ist ein Paket defekt, wird es neu angefordert, bis es passt. In diesen Bitstream sollte man durchaus nicht eingreifen.
Das macht Sinn.

Mit Streaming habe ich mich nicht groß beschäftigt, da mein Internetanbindung bzgl. Traffic sowie nicht sonderlich dafür geeignet ist: Deshalb sind mit DVB-Aufnahmen ja so wichtig.

Ich nehme alles auf, was ich mir ansehen will und sehe es mir dann an, wann mir danach ich, nicht wann der Sender es mir "vorschreibt". ;)

Uridium schrieb:
Probiere es doch mit den Dateien, die Du hochgeladen hast, aus. Die 47k nicht wegschneiden und mit pipe-join und fflags zusammenfügen.
Ja, es gibt noch einiges auszutesten.

Im Moment bin ich aber etwas "übersättigt" und hatte gestern den PC nicht mal an, obwohl ich eine reguläre Aufnahme noch zu schneiden habe. - Stattdessen war ich (gedanklich) in Morschaztas :)

Vorgestern hatte ich fünf Dokus in Folge von 3sat-HD aufgenommen (knapp über 2h), um auf vier Teildateien zu kommen:

Auch damit hat das neue "tscp" anstandslos funktioniert und beim auseinanderkopieren der einzelnen Dokus hatte AVIdemux diesmal keine Probleme: Also es scheiterte auch nur an den doppelten 47K und ich brauche es nicht mit ffmpeg-demux zu "reparieren".

Die anderen beiden Skripte habe ich auch auf truncate+.tst geändert, da ich "tscc" (cat) zumindest noch brauche, wenn ich mehrere Tonspuren übernehmen will (z. B. deutsch und englisch) und "tscd" (demux) für weitere Tests und als Nachschlagewerk, da ich diese Art "<" zu nutzen, noch nicht kannte und wenn ich es wieder brauche, weiß wo ich suchen muss.

"cat" ist übrigens 5x schneller als "pipe" und das ca. 15% schneller als "demux". - Aber nur, wenn die Quelldateien schon im Datenträger-Cache sind, ansonsten ist USB3 das Nadelöhr.
 
Uridium schrieb:
Probiere es doch mit den Dateien, die Du hochgeladen hast, aus. Die 47k nicht wegschneiden und mit pipe-join und fflags zusammenfügen.
Da ich mir nicht sicher war, wie praxisnah das ist und auf arte-HD drei potenziell interessante Dokus in Folge (Zweiteilig über Elefanten und eine über Francis Drake), habe ich die für die Tests aufgenommen: 14,4 GiB, also 4 Teildateien und mit ffmpeg-pipe zusammenkopiert: 12,5 GiB (und mit der kontrastreiches-Voreinstellung recodet, nur noch 2,2 GiB)

Mit "-fflags +discardcorrupt" (ohne truncate) wurden an der Schnittstelle (ein langsamer Kameraflug mit Hintergrundgedudel, also optimal dafür) vom Player *) ein paar Frames übersprungen, der Ton war aber OK, während AVIdemux das Video ruckfrei abgespielt hat, aber der Ton kurz unterbrochen war.

*) MPV:
INI:
hwdec
scale=spline36
interpolation
video-sync=display-resample-vdrop
tscale=oversample
osd-duration=2000
idle=once
autofit-larger=90%x90%
audio-channels=auto

Zum Vergleich hatte ich es dann auch noch ganz ohne " -ignore_unknown -fflags +discardcorrupt" zusammenkopiert: Da war bei beiden MPV und AD der Ton OK und das Bild hatte eine geringfügige Störung.

Ich habe mir deshalb überlegt, "-fflags +discardcorrupt" doch wieder rauszunehmen:

Wenn es kurzfristig deutliche Übertragungsfehler gibt (z. B. starker Regenschauer), dann habe ich lieber Bildstörungen, als das vielleicht ganze Sequenzen entfernt oder zerhackt werden: So habe ich wenigstens eine Chance vielleicht noch genug mitzubekommen, wie es weitergeht.

Die aktuellen Skripte:

tscp (ffmpeg-pipe = werde ich primär nutzen):
Bash:
#!/bin/bash
if [ $# == 0 ];then echo "tscp Zielname in '/tmph/'";exit;fi

if [ -e data0001.ts ]
  then for f in data????.ts
  do mv $f $f"t"
done;fi

if [ -e 000.ts ]
  then for f in ???.ts
  do truncate -s-47K $f && mv $f $f"t"
done;fi

sync -f .
cat *.tst | ffmpeg -hide_banner -nostats -ignore_unknown -i pipe: -map v:0 -map a:0 -c copy "/tmph/$1.ts"

tscc (cat = wenn ich mehrere Tonspuren übernehmen möchte):
Bash:
#!/bin/bash
if [ $# == 0 ];then echo "tscc Zielname in '/tmph/'";exit;fi

if [ -e data0001.ts ]
  then for f in data????.ts
  do mv $f $f"t"
done;fi

if [ -e 000.ts ]
  then for f in ???.ts
  do truncate -s-47K $f && mv $f $f"t"
done;fi

sync -f .
pv *.tst > "/tmph/$1.ts"

tscd (ffmpeg-demux = ohne truncate, dafür mit "-fflags +discardcorrupt", da ich mir überlegt habe, wenn es Störungen, kann ich versuchen sie damit nachträglich aus dem zusammenkopierten zu entfernen: ob das nur nach "cat" funktioniert, oder auch nach "ffmpeg-pipe", wird sich dann zeigen):
Bash:
#!/bin/bash
if [ $# == 0 ];then echo "tscd Zielname in '/tmph/'";exit;fi
ffmpeg -hide_banner -nostats -ignore_unknown -fflags +discardcorrupt -f concat -safe 0 -i <(for f in ./*.ts; do echo "file '$PWD/$f'"; done) -map v:0 -map a:0 -c copy "/tmph/$1.ts"

Damit dürfte soweit alles abgedeckt sein.

Als nächstes gehe ich an, mit ffmpeg auch zu recoden, wobei ich die Konfigurationen meiner über viele Jahre aufwändig optimierten Voreinstellungen übernehmen werde.

Da ich langsam ein Gefühl dafür bekomme wie man ffmpeg nutzt, kann ich endlich daran gehen das umzusetzen.

Das sollte nicht mal allzu kompliziert sein, da ich mir per suchen/ersetzen aus den AVIdemux-Voreinstellungen einfach avpresets basteln kann:
5.12 Preset files
A preset file contains a sequence of option=value pairs, one for each line, specifying a sequence of options which would be awkward to specify on the command line. Lines starting with the hash (’#’) character are ignored and are used to provide comments. Check the presets directory in the FFmpeg source tree for examples.

5.12.2 avpreset files
avpreset files are specified with the pre option. They work similar to ffpreset files, but they only allow encoder- specific options. Therefore, an option=value pair specifying an encoder cannot be used.

When the pre option is specified, ffmpeg will look for files with the suffix .avpreset in the directories $AVCONV_DATADIR (if set), and $HOME/.avconv, and in the datadir defined at configuration time (usually PREFIX/share/ffmpeg), in that order.
 
Zuletzt bearbeitet:
Vielleicht kannst Du hiervon was gebrauchen. Im Prinzip ein Grundgerüst, was ich für fast alle Scripte benutze.
Bash:
#!/bin/sh

filename=$(basename "$1")  # filename
extension="${filename##*.}"  # extension only
filename="${filename%.*}"  # filename without extension

# low priority
ffmpeg="time systemd-run --user --pty --quiet -d -p IOWeight=10 -p CPUWeight=idle -p CPUSchedulingPolicy=idle ffmpeg -hide_banner"

${ffmpeg} -i "$1" -vf scale=-2:720,format=yuv420p -sws_flags lanczos -movflags +faststart -c:v libx264 -tune film -profile:v High -level 4.2 -crf 19 -c:a copy "${filename}-720p.mp4"

Interessant ist ffmpeg auch für AV1/RGB, z.B. für Screencaptures, weil der einzige AV1 Encoder der momentan RGB kann, der Referenzencoder (libaom-av1) ist. Die Ergebnisse sind sehr effizient (z.B. hier: 1080p, 60fps, 01m42s, 4.9MB).
 
Uridium schrieb:
Vielleicht kannst Du hiervon was gebrauchen. Im Prinzip ein Grundgerüst, was ich für fast alle Scripte benutze.
Danke, werde ich mir ansehen.

"-movflags +faststart" ist mir neulich schon mal aufgefallen, weil der 8590 bei manchen (sehr wenige) recodeten (normal-Voreinstellung) Aufnahmen mehrere Sekunden braucht, bevor die Wiedergabe startet, aber das ist offenbar ein MP4-Feature und hatte bei meinen x264-Vorbis-mkvs keinen Effekt.

Hat das mit der niedrigen Priorität überhaupt einen Effekt?

Ich konnte keinen Unterschied bei parallelem encoden damit erreichen, wie ich hier gefragt habe und es hier mit "SCHED_AUTOGROUP" begründet wurde.

Ich habe es aber trotz der dort verlinkten Threads nicht hinbekommen das besser hinzubekommen, oder dass es so wie bei Windows funktioniert: Das fand ich optimal.

Mit (afair) Kernel 6.7 Ist das plötzlich deutlich besser geworden, so dass selbst wenn schon 10 ADs parallel encoden, sich ein 11. AD noch fast normal bedienen lässt: Das war vorher fast unmöglich gewesen, da er kaum noch Rechenzeit bekommen hätte: Auch mit hoher Priorität, wenn alle anderen ADs niedrigste Priorität gehabt hätten.

Lass doch mal zwei ffmpegs parallel encoden und nur einen davon mit niedriger Priorität: Nach meinen Erfahrungen bekommen trotzdem beide die gleiche Recheinzeit (anstatt dass der mit normaler Priorität alles bekommt, was er nutzen kann und der mit niedriger Priorität nur den Rest).

Uridium schrieb:
Interessant ist ffmpeg auch für AV1/RGB, z.B. für Screencaptures, weil der einzige AV1 Encoder der momentan RGB kann, der Referenzencoder (libaom-av1) ist. Die Ergebnisse sind sehr effizient (z.B. hier: 1080p, 60fps, 01m42s, 4.9MB).

-----
Nachtrag: Auf dem Handy wird es grün angezeigt:

av1vid.jpg

-----

Für Screencaptures nutze ich meine kontrastreiches-Voreistellung mit q30 und erhöhe auf max. 1000 Frames/GOP.

Z. B. das in meinem AVIdemux-Thread verlinkte Videobearbeitung.mkv:

Größe: 5.92 MiB (6209850 Byte)
Dauer: 4:04 Min.
Pixel: 1920x1080

Die Framerate wird mir auf dem Handy nicht angezeigt, vermutlich 25 Hz: Am PC nutze ich wegen PAL 75 Hz, so dass das glatt teilbar ist.

Btw:

Die Frame-Interpolation von MPV (s. o.) funktioniert übrigens ziemlich gut: 23,976 *), 30 und 60 Hz Videos ruckeln selbst bei langsamen Kameraschwenks fast nicht mehr.

*) neulich erst gelesen: Das errechnet sich aus 24000/1001 - Wer kommt auf sowas?
 
Zuletzt bearbeitet: (Av1vid getestet und Shot gemacht)
Caramon2 schrieb:
Auf dem Handy wird es grün angezeigt:
Der Satreceiver kann es nicht abspielen, der PC spielt es ab, aber ohne Hardwaredecoding (AMD 560D) und als ich es zum Vergleich mit meiner Konfiguration recoden wollte, musste AVIdemux passen *) und konnte den Videostream nur kopieren: Übrigens sind es ohne die Tonspur nur noch 3,6 MiB.

Da Videos auf dem Satreceiver abspielbar sein müssen (meine persönliche Mindestanforderung), ist av1 nichts für mich.

Wenn ich mich weiter in ffmpeg eingearbeitet habe und auch das mit dem encoding hinbekomme, werde ich den Vergleich nachholen.


*) ich nutze das originale AppImage:

1. Da die noch aktuelle Version von 2022 ist, hatte es auf das, was ich zur Priorität geschrieben habe, keinen Einfluss, da ich das identische AppImage mit den unveränderten Voreinstellungen genutzt habe.

2. Auch das aktuelle "Nightly" von vorgestern konnte mit AV1 nichts anfangen. - Da ich keine Nachteile gefunden habe und das GUI etwas verbessert wurde, bin ich darauf umgestiegen: AVIdemux Nightly
 
AV1 ist zwar grundsätzlich sehr gut, aber für den alltäglichen (Encoding-)Gebrauch für Normalsterbliche derzeit eher weniger interessant, da es sehr(!) lange Encodingzeiten hat. Es sei denn man hat ausreichend potente Hardware.

Das obige Video ist dennoch etwas sehr außergewöhnliches, beachtet man den speziellen Anwendungsfall (Screencapture, RGB/Pixelexakt, native Browserunterstützung). Dafür ist es hervorragend geeignet, wegen seiner (besonderen) RGB Kodierung aber kaum außerhalb dieses Einsatzfeldes einsetzbar. Mit gewöhnlichem Material (Film, YUV) sollte man es daher nicht unbedingt vergleichen.

Und ja, bei mir auf dem Handy ist es (außerhalb des Browsers und VLC) auch grün (MXPlayer). Das ist quasi nur eine Empfehlung für Screencaptures gewesen.

Zu 'nice' kann man sagen, dass es nicht das Gleiche ist wie das systemd Kommando. Ersteres ist veraltet und u.U. in der Tat nicht mehr wirksam. Letzteres sollte aber Wirkung zeigen. Das kann man mit 'ps' und explizitem Filter auch sichtbar machen (sched_idle und neue 'prio' Einheiten. Die gehen jetzt bis irgendwas um die hundert).
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Caramon2

Ähnliche Themen

M
Antworten
4
Aufrufe
1.049
Mr. Snoot
M
Zurück
Oben