Crop + Resize oder Resize inklusive Crop?

  • Nicht unbedingt: Bei der Variante von Viperzahn gibt's ja auch keine "beweglichen Teile". Vielleicht bau ich dort nach "Weave()" noch einen Rauschgenerator ein, dann sieht man bestimmt was; kleinen Moment...
    __

    Holla, die Waldfee! Und wie's da bröselt!

    Code
    A=BlankClip(length=250, width=720, height=288, pixel_type="YV12", fps=25.00000, color=$FFFFFF)
    B=BlankClip(length=250, width=720, height=288, pixel_type="YV12", fps=25.00000, color=$000000)
    Interleave(A,B).AssumeFieldBased().Weave()
    AddGrain(20,0,0)
    C=Crop(0,72,720,440).Lanczos4Resize(512,208)
    D=Lanczos4Resize(512,208,0,72,720,440)
    Subtract(C,D).Levels(96,1,160,0,255)
  • Wie, Ihr seht keine Unterschiede!?
    Wenn das Skript mit Crop+Resize und Resize inkl. Crop direkt gegenübergestellt wird, sieht man doch eindeutig, das die oberste und unterste Zeile nicht übereinstimmen?


    EDIT
    Hier noch mal eins für diejenigen, welche nicht direkt vergleichen, sondern mit VirtualDubMod 'F5' arbeiten :cool:

    Code
    A1=BlankClip(length=250,width=768,height=288,pixel_type="YV12",fps=25.00000,color=$FFFFFF)
    A2=BlankClip(length=250,width=768,height=288,pixel_type="YV12",fps=25.00000,color=$000000)
    #
    B1=Interleave(A1,A2).AssumeFieldBased().Weave().Crop(16,8,736,560).LanczosResize(576,432)
    B2=Interleave(A1,A2).AssumeFieldBased().Weave().LanczosResize(576,432,16,8,736,560)
    #
    Interleave(B1,B2)

    Gruss,
    Viperzahn

    Es ist zu einer gesellschaftsfaehigen Unsitte geworden, dass jeder etwas von sich geben muss, auch wenn er keinerlei Ahnung hat. Und wer vielleicht mal 30 Sekunden nachdenkt, bevor er etwas sagt, dem wird weniger geglaubt als jemanden, der sofort gutklingenden Muell von sich gibt.
    -> http://people.freenet.de/dynamischerpha…esse_halten.mp3

  • Ähm, Viperzahn, was meinst du eigentlich? Dass die oberste Zeile nicht mit der untersten übereinstimmt? Oder dass oberste und unterste Zeile nicht mit dem Durchschnitt übereinstimmen? Also das liegt am Lanczos-Resizer; verwenden BilinearResize, und alles wird einheitlich grau.

    In meinem Problem ging's um was ganz anderes. Lass mal meinen Clip (AddGrain gibt's bei WarpEnterprises oder direkt bei TRBarry) abspielen, dann siehst du, welche Unterschiede zwischen den beiden Methoden ich meine - und das ist mehr als nur ein Interpolations-Steilrand.

    Ich rechne gleich mal ein paar AVIs aus, um den Unterschied zu verdeutlichen, den ich sehe.

  • Zitat

    Ähm, Viperzahn, was meinst du eigentlich? Dass die oberste Zeile nicht mit der untersten übereinstimmt? Oder dass oberste und unterste Zeile nicht mit dem Durchschnitt übereinstimmen? Also das liegt am Lanczos-Resizer; verwenden BilinearResize, und alles wird einheitlich grau.


    Weder noch, drück ich mich wirklich so schwammig aus?
    Ich meine, das die oberste und unterste Zeile bei Crop+Resize und Resize inkl. Crop unterschiedlich sind, wobei die obere Zeile aber wirklich am Resizer zu liegen scheint...

    Gruss,
    Viperzahn

    Es ist zu einer gesellschaftsfaehigen Unsitte geworden, dass jeder etwas von sich geben muss, auch wenn er keinerlei Ahnung hat. Und wer vielleicht mal 30 Sekunden nachdenkt, bevor er etwas sagt, dem wird weniger geglaubt als jemanden, der sofort gutklingenden Muell von sich gibt.
    -> http://people.freenet.de/dynamischerpha…esse_halten.mp3

  • Jetzt noch mal nebeneinander, und den wichtigen Bereich ausgeschnitten:

    Code
    A=BlankClip(length=250, width=768, height=288, pixel_type="YV12", fps=25, color=$FFFFFF)
    B=BlankClip(length=250, width=768, height=288, pixel_type="YV12", fps=25, color=$000000)
    Interleave(A,B).AssumeFieldBased().Weave()
    C=Crop(16,8,736,560).LanczosResize(576,432)
    D=LanczosResize(576,432,16,8,736,560)
    StackHorizontal(C,D).Crop(512,0,128,432)
    Levels(96,1,160,0,255)


    Ah, doch - minimale Unterschiede.

    Aber noch lange nicht so gravierend wie eine ganze verdoppelte Zeile!

  • Ähm...bei mir is es doch ziemlich genau eine verdoppelte Zeile, während es bei Deinem Skript sogar drei, vier Zeilen sind?!

    Gruss,
    Viperzahn

    Es ist zu einer gesellschaftsfaehigen Unsitte geworden, dass jeder etwas von sich geben muss, auch wenn er keinerlei Ahnung hat. Und wer vielleicht mal 30 Sekunden nachdenkt, bevor er etwas sagt, dem wird weniger geglaubt als jemanden, der sofort gutklingenden Muell von sich gibt.
    -> http://people.freenet.de/dynamischerpha…esse_halten.mp3

  • Oha... so genau hab ich da wohl noch gar nicht reingeschaut; jedenfalls ist es zu auffällig für eine RC2.

    Noch'n "Testvideo":

    Code
    A=BlankClip(length=250, width=80, height=40, pixel_type="YV12", fps=25, color=$FFFFFF)
    B=BlankClip(length=250, width=80, height=40, pixel_type="YV12", fps=25, color=$000000)
    Interleave(A,B).AssumeFieldBased().Weave()
    AddGrain(40,0,0)
    C=Crop(4,4,64,64).LanczosResize(16,32)
    D=LanczosResize(16,32,4,4,64,64)
    E=StackHorizontal(C,D)
    F=Subtract(C,D)
    StackHorizontal(E,F)
    Levels(96,1,160,0,255)

    Und das mal auf 400% laufen lassen (VirtualDubMod: Rechtsklick ins Videofenster).

  • Wie gesagt, war bei der Beta vom 13.07 auch schon so.
    Na ja, ich nehme an, Du hast das im englischen Doom9 schon als Fehler berichtet (mein Englisch ist dafür zu schlecht)?
    Nicht das das jetzt so tragisch wäre, da Crop + Resize sowieso vorzuziehen ist, weil Resize inkl. Crop wegen zusätzlichen Interpolationen und zusätzlichen Rundungsdifferenzen eh ungenauer sein muß. Die Verwendung macht also nur Sinn, wenn die Beschränkungen des Farbraumes umgangen werden sollen.

    Sei so gut und sprech auch den Bug in SSRC mal an :)


    EDIT
    Und die oberen Zeile ist doch auch bei Bilinear unterschiedlich...

    Gruss,
    Viperzahn

    Es ist zu einer gesellschaftsfaehigen Unsitte geworden, dass jeder etwas von sich geben muss, auch wenn er keinerlei Ahnung hat. Und wer vielleicht mal 30 Sekunden nachdenkt, bevor er etwas sagt, dem wird weniger geglaubt als jemanden, der sofort gutklingenden Muell von sich gibt.
    -> http://people.freenet.de/dynamischerpha…esse_halten.mp3

  • Zitat von Viperzahn

    weil Resize inkl. Crop wegen zusätzlichen Interpolationen und zusätzlichen Rundungsdifferenzen eh ungenauer sein muß.


    Davon hab ich eigentlich das Gegenteil behauptet - internes Cropen sollte effizienter sein als externes, und nicht unbedingt ungenauer. Na, wir werden sehen, was sich tut...
    __

    sh0dan hat bereits was gefunden; anscheinend hängt die Wirkung mancher Funktionen davon ab, ob der Compiler optimiert?! :so-nicht:

    Bei SSRC könnte es daran liegen, dass diese Routinen optimiert sind für bestimmte Verhältnisse, nicht für beliebiges Resampeln. Aber da wird sicher auch noch was kommen. Oder du versuchst mal EnsureVBRMP3Sync.

  • Zitat von LigH


    Davon hab ich eigentlich das Gegenteil behauptet - internes Cropen sollte effizienter sein als externes, und nicht unbedingt ungenauer. Na, wir werden sehen, was sich tut...


    Ich habe mir das laienhaft so gedacht:
    Beim getrennten schneiden und skalieren bekommt der Skalierungsalgorithmus ein fertiges Bild vor die Nase gesetzt und wendet darauf seine Skalierungsmethode an. Wenn beim schneiden vorher die Beschränkungen des Farbraumes verletzt wurden, ist das Ergebnis eben kaputt. Es wird also nur geschnitten und skaliert.
    Beim skalieren inkl. schneiden muß der Algorithmus ja irgendwas machen um die Konventionen des Farbraumes zu beugen und das ist eine zusätzliche, auf das Bild angewendete Berechnung, die ganz bestimmt nicht verlustfrei ist. Hier wird also irgendwas gefummelt, geschnitten und skaliert - oder skaliert, gefummelt, geschnitten - oder…
    Deshalb denke ich, das Crop + Resize die genauere Lösung ist, aber vielleicht kannst Du mir das ganze etwas verdeutlichen.


    Zitat

    Bei SSRC könnte es daran liegen, dass diese Routinen optimiert sind für bestimmte Verhältnisse, nicht für beliebiges Resampeln.


    Das sollte mich aber wundern, wenn ich mit SSRC nicht 8kHz auf 48kHz upsamplen könnte. Wofür brauche ich einen solchen Highquality Samplerate Converter, wenn nicht für solche Aufgaben? Außerdem tritt der Fehler auch bei 44.1kHz Mono -> 48.0 Stereo auf – es liegt anscheinend am Monoeingang:

    Code
    V1=OpenDMLSource("uncompressed_pcm_44100Hz_Mono.avi",audio=true,pixel_type="RGB24").SSRC(48000,fast=true)AudioDub(V1,MergeChannels(GetChannel(V1,1),GetChannel(V1,1)))


    Dauert unglaublich lange und erzeugt Müll.

    Code
    V1=OpenDMLSource("uncompressed_pcm_44100Hz_Mono.avi",audio=true,pixel_type="RGB24")
    AudioDub(V1,MergeChannels(GetChannel(V1,1),GetChannel(V1,1))) ").SSRC(48000,fast=true)


    Funktioniert


    Zitat

    Oder du versuchst mal EnsureVBRMP3Sync


    Warum traust Du mir eigentlich nichts zu :(. Das + Entfernung aller anderen Filter außer AVISource + EnsureVBRMP3Sync + SSRC war mein erster Versuch das Problem zu lösen, danach habe ich ne andere Quelle versucht.

    Gruss,
    Viperzahn

    Es ist zu einer gesellschaftsfaehigen Unsitte geworden, dass jeder etwas von sich geben muss, auch wenn er keinerlei Ahnung hat. Und wer vielleicht mal 30 Sekunden nachdenkt, bevor er etwas sagt, dem wird weniger geglaubt als jemanden, der sofort gutklingenden Muell von sich gibt.
    -> http://people.freenet.de/dynamischerpha…esse_halten.mp3

Jetzt mitmachen!

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