Bildberechnen fehler?

  • Ich habe hier ein video vorliegen
    1280,544 bei 23,976 als 720p in MKV.

    Ich möchte Pal DVD haben
    MKV entpackt, Indexiert und in einem Skript eingebunden:

    Code
    avcsource("C:\Dokumente und Einstellungen\Jackie & Ninos\Desktop\HZ DGA.dga")assumefps(25)Lanczos4Resize(720,576)

    und dann mit dem HCEncoder encodiert doch das ergebnis sah anders aus als mein Source.


    Also habe ich folgendes gemacht

    Source:
    1280/544=2.35
    Ziel:
    720/306=2.35

    Meine neue auflösung (um keine eierköpfe zubekommen) ist 720,306 (mit den Borders 135 U und O sind es 576.
    Dies habe ich dann in dem AviSynth skript eingetragen:

    Code
    avcsource("C:\Dokumente und Einstellungen\Jackie & Ninos\Desktop\HZ DGA.dga")
    assumefps(25)
    Lanczos4Resize(720,306)
    addborders(0,135,0,135)


    Nach dem encoden, waren die Borders sehr Hoch und ein Border ist viel Größer als das Gesamte Bild.

    Was ist falsch?

  • MPEG2-Video für DVDs hat keine quadratischen Pixel, sondern immer gestauchte. Deshalb kannst du nicht einfach so nach der simplen Verhältnisgleichung die Zielgröße berechnen; du musst immer zusätzlich noch mit einberechnen, wie stark die anamorphe Stauchung zusätzlich wirkt. Und die ist bei NTSC-Video noch mal zusätzlich anders.

    Angenommen, du stellst im HC-Encoder ein, er soll das Video so markieren, dass es anamorph für Widescreen-Darstellung (16:9-Fernseher) gestaucht encodiert wurde. Dann geht man von folgender vereinfachten Idee aus:

    Das komplette PAL-Fernsehbild hätte 576 sichtbare Bildzeilen. Bei quadratischen Pixeln hätte man also eine Bildbreite von 576 * 16 : 9 = 1024 Pixeln. Wenn schon Verhältnisgleichung, dann zwischen zwei Auflösungen, die beide die gleichen Pixel-Seitenverhältnisse haben. Und HD-Videos haben auch quadratische Pixel, wie dieser Zwischenschritt:

    1280:544 = 1024:{h1}

    {h1} = 544 * 1024 : 1280 = 435,2 Zeilen

    Nun hast du allerdings NTSC-Video (wegen 23,976 fps). Für NTSC werden nicht 576, sondern 480 Zeilen verwendet. Die Höhe wird also zusätzlich gestaucht.

    {h2} = 435,2 * 480 : 576 = 362,6~ sichtbare Zeilen innerhalb von 480

    Die nächstgelegene durch 16 teilbare Zahl wäre 368. Vielfache von 16 deshalb, damit die Letterboxen möglichst eine Höhe haben, die Vielfache von 8 sind, damit sie an Grenzen von MPEG- (Makro-) Blöcken liegen.

    Fertig? - Nein, noch nicht ganz, wir haben immer noch 1024 Pixel entzerrte Breite. Die muss noch geschrumpft werden. Jetzt könnten wir uns streiten, ob volle 720 Pixel Breite oder 704 Pixel innerhalb von 720 richtig wären. Aber das haben schon Generationen vor uns nicht endgültig klären können... Oder wir erzeugen gleich 704 Pixel Breite, das ist auf DVD auch erlaubt.

    Also - resize 1280:544 zu 704:368 und letterboxe zu 704:480. Und stelle im HC-Encoder "16:9 NTSC" ein ... obwohl: Eigentlich müssten wir nun noch über "NTSC-Film progressiv auf DVD" oder "von Film nach NTSC-interlaced mit 3:2 Pulldown" reden. Aber jetzt bist du mal dran mit der Benutzung der Forensuche.

  • Quelle: 1280x544
    Ziel: NTSC_FILM 720x480

    Rechnung A: LetterBox (4:3) = Lanczos4Resize(720,279).Addborders(0,100,0,101)
    Rechnung B: Anamorphic (16:9) = Lanczos4Resize(720,372).Addborders(0,54,0,54)

    inc Overscan wird für AnalogTVs benötigt.
    Rechnung C: LetterBox (4:3) = Lanczos4Resize(704,273).Addborders(8,103,8,104)
    Rechnung D: Anamorphic (16:9) = Lanczos4Resize(704,364).Addborders(8,58,8,58)

    --------------------------------------------------

    Also - resize 1280:544 zu 704:368 und letterboxe zu 704:480.


    das kann doch nicht stimmen. 704x368 gibts doch nicht.

  • Hast Recht scharfi, ist für 704x und 720x erlaubt, irgendwie hab ich das immer im Kopf das das nur für 720x war. Hab extrah nochmal nachgeschaut... steht auf Seite 289

    Zitat

    Anamorphic only allowed for 720 and 704 resolutions.

    und im DVDDatenBlatt (ref. DVD-3 5.4.1.2.1)

    Code
    MPEG-2: Permitted combination of horizontal_size, vertical_size, frame_rate and display aspect_ratio 
    
    
       horizontal_size             vertical_size                frame_rate                  aspect_ratio 
    
    
        720                         480                         29.97                       16:9 
        [COLOR='Red']704[/COLOR]                         480                         29.97                       16:9 
        720                         576                         25                          16:9 
        [COLOR='#ff0000']704[/COLOR]                         576                         25                          16:9

    Sorry nochmal!

  • ohh man bin ich jetzt verwirrt.

    Was muss ich jetzt rechnen um mein HD quelle 1280,544 NTSC nach Pal (ohne köpfe) zubekommen?

    Edit:

    Kann ich diesen Rechen schritt immer verwenden um die optimale werte zubekommen?
    {h1} = 544 * 1024 : 1280 = 435,2 Zeilen

  • ohh man bin ich jetzt verwirrt.

    Was muss ich jetzt rechnen um mein HD quelle 1280,544 NTSC nach Pal (ohne köpfe) zubekommen?

    Deine "HD Quelle" mit 1280x544 ist eigentlich ein Beschnittenes HD in 1280x720 (aber sicherlich 1920x1080)

    Also mach doch einfach wieder Ränder dran: Addborders(0,88,0,88)
    und dann Resize nach DVD: Lanczos4Resize(720,576)

    Fertig.

    Man könnte jetzt natürlich mit komplexen Rechnungen Macroblock Optimiert Resizen, aber beim Encoden nach MPEG2 macht das Kraut auch nicht mehr besser, weil Dein Film so oder so schon ReEncodet wurde. Und ob der auch richtig gemacht wurde, weiß hier bestimmt keiner.

  • Deine "HD Quelle" mit 1280x544 ist eigentlich ein Beschnittenes HD in 1280x720 (aber sicherlich 1920x1080)

    Also mach doch einfach wieder Ränder dran: Addborders(0,88,0,88)
    und dann Resize nach DVD: Lanczos4Resize(720,576)


    Kann ich das auch mit jedem film machen der in HD vorliegt z.B. 1280x688?
    Also einfach die Höhe auf 720 bringen und dan mit dem resizer auf 720x576.

    klappt das IMMER

  • Was ist denn aus dem guten alten FitCD geworden, nutzt das niemand mehr?

    Jedenfalls spuckt es für makroblockoptimiertes Resizing folgendes aus:

    BicubicResize(720,448,0,0.6,2,0,1276,544)
    AddBorders(0,64,0,64)

  • Für ein DVD Encoding ist es von Vorteil, wenn man an Makroblocks optimiert. Dann schließt das Bild genau an einem solchen ab. Ansonsten würde eine Makroblock-Zeile sowohl aus Bild als auch aus schwarz der Borders bestehen, was durchaus mal in verstärkten Kompressionsartefakten in dieser Zeile resultiert.

    Ansonsten ist FitCD wirklich ein super Tool, welches diese Nickeligkeiten mal eben schnell berechnet. Zu SVCD-Zeiten ein steter Begleiter gewesen, und fristet immernoch sein Dasein in meinem Videotools Ordner.

    Mir fällt gerade noch ein, dass es auch das hinzufügen von schwarzem Rand links und rechts beherrscht. Dieser Bereich wird an normalen Fernsehern meistens gar nicht angezeigt (overscan) und kann somit auch mit stark komprimierbaren Daten gefüllt werden. Das spart Bitrate für den Rest des Bildes. (16 px rechts und links also 1 Makroblock jeweils sind dabei eine sichere Einstellung)

    Ach was waren das noch Zeiten ;)

  • Ja - Runden auf Vielfache von 8 oder 16 - auf oder ab. Eventuell auch links und rechts je mal einen Block Rand hinzugeben, sowie oben und unten einen extra. Und jedes Mal ausrechnen, wie groß die Abweichung von der direkt berechneten Größe wäre.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!