staging.inyokaproject.org

Für diese Funktion musst du eingeloggt sein.

ffmpeg mit externem Filter nutzen: nnedi für Deinterlace

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

BillMaier Team-Icon

Supporter

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6389

Hallo,

ich habe hier knapp 20 Jahre altes MiniDV-Videomaterial, das ich deinterlacen will.

ffpmeg kann das mit verschiedenen Filtern. Der einfachste und schnellste sei yadif etwas besser sei bwdif. Beide finde ich deutlich zu schlecht. Sie erzeugen deutliche Artefakte im Bild, das sieht fast nach MPEG aus, damit bin ich nicht zufrieden.

Ich habe nach einiger Recherche einen Tipp auf nnedi gefunden.

Also lade ich mir nach Anleitung das binary herunter:

wget https://github.com/dubhater/vapoursynth-nnedi3/blob/master/src/nnedi3_weights.bin

Damit sieht mein source-dir so aus:

$ ll
total 266400
drwxrwxrwx  2 marc marc       100 Mar  3 14:27 ./
drwxrwxrwt 36 root root      1780 Mar  3 14:25 ../
-rwxrwxr-x  1 marc marc       168 Mar  3 14:26 do.sh*
-rwxrwxrwx  1 marc marc    145098 Mar  3 14:24 nnedi3_weights.bin*
-rwxrwxrwx  1 marc marc 272638682 Mar  3 12:58 source-video.avi*

Die ffmpeg-Zeile sieht nach dieser Anleitung so aus

$ cat do.sh 
#!/bin/bash
rm output-video.mkv
ffmpeg -i "source-video.avi" -map 0:0 -map 0:1 -vf  "nnedi=weights=nnedi3_weights.bin" -c:v libx264 -preset slow -crf 19 -c:a aac -b:a 256k "output-video.mkv"

In der Ausführung erhalte ich nun folgende Fehlermeldung:

[Parsed_nnedi_0 @ 0x560958261b40] Unexpected weights file size.
[AVFilterGraph @ 0x56095825a500] Error initializing filter 'nnedi' with args 'weights=nnedi3_weights.bin'
Error reinitializing filters!
Failed to inject frame into filter network: Invalid argument
Error while processing the decoded data for stream #0:0
Conversion failed!

Ich habe nun versucht, den Pfad zum .bin relativ/absolut anzugeben. Das hier funktioniert alles nicht:

ffmpeg -i "source-video.avi" -map 0:0 -map 0:1 -vf  "nnedi=weights=./nnedi3_weights.bin" -c:v libx264 -preset slow -crf 19 -c:a aac -b:a 256k "output-video.mkv"
ffmpeg -i "source-video.avi" -map 0:0 -map 0:1 -vf  "nnedi=weights=/home/marc/nnedi-demo/nnedi3_weights.bin" -c:v libx264 -preset slow -crf 19 -c:a aac -b:a 256k "output-video.mkv"

Irgendwie steh ich auf dem Schlauch. Wer hat noch eine Idee?

Danke und Gruß

BillMaier

BillMaier Team-Icon

Supporter
(Themenstarter)

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6389

Problem gelöst, das binary ließ sich nicht wie o.g. via wget runter laden. Stattdessen hab ich mir das HTML-file runter geladen 🙄

Also nochmal das richtige bin-file geholt, jetzt läuft es zumindest. Bin gespannt, soll ja angeblich ganz toll sein ☺

BillMaier Team-Icon

Supporter
(Themenstarter)

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6389

wow, ich bin ganz angetan - allerdings kam ein 50p-Video mit verdoppelten Frames raus.

Da ich - abgesehen vom interlace - eigentlich nichts codieren will, nutze ich jetzt folgende Zeile:

ffmpeg -i "source-video.avi" -map 0:0 -map 0:1 -vf  nnedi=weights='nnedi3_weights.bin':deint=interlaced -r 25 -c:v dvvideo -preset slow -crf 19 -c:a copy -b:a 256k "do-1.avi"

Da ich nicht alle Werte wirklich verstehe, lade ich hier zum Optimieren. Gerne mit Begründung, warum wie was besser ist.

Ansonsten bin ich bestimmt nicht der letzte, der deinterlacen will - dann findet sich da mal ein sehr brauchbarer Ansatz.

Gruß BillMaier

Antworten |