DesignStudie - mpg --> mp4 ( h246 / aac ) 400 Kbit/sec

  • Tach Team,


    Über die 500 KBit/sec Initiativen für HD Material im Netz, ausgelößt durch den neuen Flash Player von Adobe, , bin ich ein wenig am herumspielen, was man mit h264 für SD Material so machen kann.


    500Kbit HD Links :
    --> http://www.progettosinergia.co…hvideo/flashvideoblog.htm
    --> http://www.flashcomguru.com/index.cfm/2008/2/2/jaw-drop-h264


    Ich habe für Testzwecke ein paar Commandlines zusammengelegt, die ein 400 KBit/sec ( Video ) mit aac als mp4 erzeugen.


    Originale Bildbreite bleibt dabei erhalten. Dienen soll das Ganze erstmal als Spielwiese, um die optimalen Encoding Parameter zu ermitteln, daher hier auch erstmal eine Studie.


    kurzes Beispiel mp4 hier :


    --> http://uploaded.to/?id=uh416m


    - 10 Minuten
    - 720x416
    - 400 Kbit Video ( 28,6Mbyte ) ,
    - 86Kbit Audio ( 6 Mbyte )
    - zusammen --> 37,4 MByte)



    Full Length Beispiel mit selben Codec Parametern :


    --> http://uploaded.to/?id=hcm53v


    - 41min 11 sec
    - 720x416
    - 400 Kbit Video : 117,8 Mbyte
    - 86Kbit Audio : 24,7 Mbyte
    - zusammen 153,6 Mbyte


    Die Rechte am Bildmaterial liegen beim jeweiligen Urheber, die Files werden hier nur zur technischen Demonstration verwendet.


    gebraucht wird :


    - transcode
    - x264
    - faac
    - mp4creator aus mpeg4ip


    fest codierte Bedingungen :
    - Ausgangsmaterial noninterlaced, 720x576 @16:9, mpg
    - Codierbereich 1-15000 Frames ( 10 min )


    Aufruf :
    aktuelles Verzeichnis beschreibbar ( für tmp dateien )
    Infile --> mpg mit voller Pfadangabe
    Outfile --> Endung .mp4 mit voller Pfadangabe


    Code
    ./transcode_2_h264.sh Infile Outfile


    Code transcode_2_h264.sh


    Bin gespannt, was bei euch so rauskommt, vielleicht wirds ja mal ein Script vdr -> mp4 ( SD ), der 300 Mbyte Spielfilm rückt in greifbare Nähe :)


    PS : Multipprozessor Maschine von Vorteil um die Frame/sec zu erreichen :
    hier Phenom 4 x 2,2 Ghz -> pass 1 / 52fps -> pass 2 / 23 fps


    Grüße vom Alex

    Wer Rechtschreibfehler findet, darf sie behalten


    Meine Konfiguration :


    Ion 2, 2 x S2 3600, 4 Gig Ram, OS : Kubuntu 12.04 LTS, Kernel 3.2.0-40-generic , x86_64, vdr.2.0.1 ( yavdr-testing ) , vdr-xine 0.9.4 ( yavdr-testing ) , xine-lib 1.2 ( yavdr-testing )

    2 Mal editiert, zuletzt von faup ()

  • Also mal ehrlich ... 500kb sind zwar machbar, aber die Qualität ist da wirklich nicht gerade berauschend, das sieht man schon in dem 10 minütigen Schnipsel.


    Wenn man sich danach mal das original MPG-File anschaut (sofern es ne ordentliche Qualität hat),erkennt man sofort die Unterschiede.


    Um die DVD-Qualität ca. 1:1 in h264 umzusetzen braucht man mindestens 1500kb, wenn das Material vorher schon in h264 war dann reichen auch ca. 1200kb.


    Alles darunter würde ich wirklich nur als "streaming-fähig" bezeichnen. Kommt halt drauf an, was für Ansprüche man hat ...


    1:1 geht geht nicht nicht 300mb, auch nicht mit h264, sooo toll komprimiert der nämlich auch nicht, zumindest nicht, wenn man auf scharfe Bilder steht.



    Fürs kurze Streaming reichts, dafür ist der Codec wirklich ganz gut zu gebrauchen ...


    Meine Meinung


    MFG
    Marco

  • Tach Team,


    hier mal der aktuelle Stand, ich kodiere hiermit vor allem die Sendeformate 480x368, wie sie auf Premiere SciFi, 13thStreet etc. gesendet werden.


    Da ist mir die Platzersparnis gegenüber xvid wichtiger, im Vergleich ergibt sich eine deutlich bessere Bildqqualität bei eh schon schlechtem Ausgangsmaterial :


    xvid -> 45 min -> Size 375 MByte ~ 1000 Kbit
    h264 -> 45 min -> Size 220 Mbyte ~ 550 Kbit


    Automatisch werden erledigt :
    - Bildscalierung
    - deinterlace
    - Beschnitt ( schwarze Balken )


    Der x264 Prozess skalliert auf 4 Cores und ist sehr, sehr CPU intensiv ( hier Phenom mit 4 x 2,2 Ghz , transcoding Zeit 2 x orig Länge bei 4 x 95% CPU load )


    Das Script benötigt folgende bins :


    - transcode
    - x264 ( the pure encoder )
    - faac
    - mp4creator from mpg4


    Aufruf :


    Code
    transcode_mpg_2_h264.pl File1 TargetSize File2 TargetSize File3 TargetSize



    Infiles : mpg nach Umwandlung der VDR Files z.B. mittels Projectx
    created Outfiles : selber Filename / selbes Verzeichnis -> Endung mp4 statt mpg


    Grüße vom Alex

    Dateien

    Wer Rechtschreibfehler findet, darf sie behalten


    Meine Konfiguration :


    Ion 2, 2 x S2 3600, 4 Gig Ram, OS : Kubuntu 12.04 LTS, Kernel 3.2.0-40-generic , x86_64, vdr.2.0.1 ( yavdr-testing ) , vdr-xine 0.9.4 ( yavdr-testing ) , xine-lib 1.2 ( yavdr-testing )

    5 Mal editiert, zuletzt von faup ()

  • Hallo,
    ich wollte gerade mal das Skript testen, aber irgendwie tut ab diesem Punkt nichts mehr und ich muss mit STRG+C abbrechen. CPU Last ist auch gleich 0. Hat jemand eine Idee?



    easyVDR:/# ./transcode_mpg_2_h264.pl welcometrans.mpg
    Design study for transcoding vdr to mp4 on ultra low video bitrates from alex Richter last edit 2008-08-12
    transcode to h264 mp4 with transcode and piped x264, also transcode Audio from mpg to aac for mp4
    Use of uninitialized value in concatenation (.) or string at ./transcode_mpg_2_h264.pl line 52.
    welcometrans.mpg --> welcometrans.mp4 TargetSize -->


    ° get Frames...15154 OK
    ° get Orig Picture Sizes... 720 x 576 , 4:3 OK
    ° get Black Border, Deinterlace Informations... 112,0,112,0 , -I off OK
    ° Target Picture Size : 720 x 320
    [transcode] (probe) suggested AV correction -D 0 (0 ms) | AV 0 ms | 0 ms
    [transcode] auto-probing source welcometrans.mpg (ok)
    [transcode] V: import format | MPEG-2 (V=vob|A=vob)
    [transcode] V: AV demux/sync | (1) sync AV at initial MPEG sequence
    [transcode] V: import frame | disabled
    [transcode] V: bits/pixel | 0.000 (unknown)
    [transcode] V: decoding fps,frc | 25.000,3
    [transcode] V: Y'CbCr | YV12/I420
    [transcode] A: import format | 0x50 MPEG layer-2 [48000,16,2] 192 kbps
    [transcode] A: export format | 0x55 MPEG layer-3 [48000,16,2] 128 kbps
    [transcode] V: encoding fps,frc | 25.000,3
    [transcode] A: bytes per frame | 7680 (7680.000000)
    [transcode] A: adjustment | 0@1000
    [transcode] A: rescale stream | 0.900
    [transcode] V: IA32/AMD64 accel | sse3 (sse3 sse2 sse 3dnowext 3dnow mmxext mmx asm C)
    [transcode] V: video buffer | 1024 @ 0x0
    [filter_normalize.so] v0.1.1 (2002-06-18) Volume normalizer
    [import_vob.so] tccat -i "welcometrans.mpg" -t vob -d 0 -S 0 | tcdemux -a 0 -x mp3 -S 0 -M 1 -d 0 | tcextract -t vob -a 0 -x mp2 -d 0 | tcdecode -x mp2 -d 0
    [import_vob.so] tccat -i "welcometrans.mpg" -t vob -d 0 -S 0 | tcdemux -s 0xc0 -x mpeg2 -S 0 -M 1 -d 0 | tcextract -t vob -a 0 -x mpeg2 -d 0 | tcdecode -x mpeg2 -d 0 -y yv12
    Freeware Advanced Audio Coder
    FAAC 1.25


    Quantization quality: 75
    Bandwidth: 14000 Hz
    Object type: Low Complexity(MPEG-4) + M/S
    Container format: Transport Stream (ADTS)
    Encoding test.wav to out.aac
    frame | bitrate | elapsed/estim | play/CPU | ETA


    28350/524289 ( 5%)| 108.5 | 32.6/603.0 | 18.55x | 570.4
    clean up | frame threads | unload modules | cancel signal | internal threads | done
    28413/524289 ( 5%)| 108.4 | 32.7/603.0 | 18.55x | 570.3


    Use of uninitialized value in division (/) at ./transcode_mpg_2_h264.pl line 288.
    Use of uninitialized value in subtraction (-) at ./transcode_mpg_2_h264.pl line 288.
    ° Beta Code Warning ---> h264Rate lower than 200 Kbit/sec ( -106 Kbit/sec ) !!!!!
    ° H264 Data Rate set at -106 KBit/sec


    [transcode] (probe) suggested AV correction -D 0 (0 ms) | AV 0 ms | 0 ms
    [transcode] auto-probing source welcometrans.mpg (ok)
    [transcode] V: import format | MPEG-2 (V=vob|A=vob)
    [transcode] V: AV demux/sync | (1) sync AV at initial MPEG sequence
    [transcode] V: import frame | 720x576 1.25:1 encoded @ 4:3
    [transcode] V: new aspect ratio | 720x544 1.32:1 (-B)
    [transcode] V: clip frame (->) | 720x320
    [transcode] V: rgb2bgr | yes
    [transcode] V: bits/pixel | 0.312
    [transcode] V: decoding fps,frc | 25.000,3
    [transcode] V: Y'CbCr | YV12/I420
    [transcode] A: import format | 0x50 MPEG layer-2 [48000,16,2] 192 kbps
    [transcode] A: export format | 0x55 MPEG layer-3 [48000,16,2] 128 kbps
    [transcode] V: encoding fps,frc | 25.000,3
    [transcode] A: bytes per frame | 7680 (7680.000000)
    [transcode] A: adjustment | 0@1000
    [transcode] V: IA32/AMD64 accel | sse3 (sse3 sse2 sse 3dnowext 3dnow mmxext mmx asm C)
    [transcode] V: video buffer | 1024 @ 720x576


    P.S.
    Was muss ich bei Targetsize angeben? Ich möchte doch, dass er selbst das bestmögliche berechnet? Ich habe auch schon verschiedene Werte Probiert, doch er bleibt immer an der selben Stelle stehen?


    Grüße


    Dirk

    VDR 1: GA-MA78GM-S2H; X2 4450e, 1GB RAM, WD 250GB RE , NT S12 330, Gen2VDR


    HD VDR: Asus M3A78-EM, X2 245e, 2GB RAM, TT1600, X10, Gen2VDR V3B4


    Server: Alix1c, 256MB RAM, 160GB HDD, GBLAN OVPN, SAMBA, DSL und WLAN Access Point SW: Debian Etch.

  • Probier mal die Zielgröße hinten in Mbyte anzugeben


    #transcode_avi_2_h264.pl [Infile] [Targetsize/Mbyte]


    45 Minuten bei Zielsize 220 Mbyte ergeben rund 500 Kbit, als Anhaltspunkt


    Code
    easyVDR:/# ./transcode_mpg_2_h264.pl welcometrans.mpg 220


    Grüße vom Alex


    BTW : ich experimentiere gerade mit transcode 1.1.0 , die x264 Unterstützung an Board haben,
    mit angepassten Parametern und individueller Matrizze. da gibts demnächst mehr.

    Wer Rechtschreibfehler findet, darf sie behalten


    Meine Konfiguration :


    Ion 2, 2 x S2 3600, 4 Gig Ram, OS : Kubuntu 12.04 LTS, Kernel 3.2.0-40-generic , x86_64, vdr.2.0.1 ( yavdr-testing ) , vdr-xine 0.9.4 ( yavdr-testing ) , xine-lib 1.2 ( yavdr-testing )

    3 Mal editiert, zuletzt von faup ()

  • Hi,
    habe gerade noch mal probiert aber wieder das gleiche. Ich muss mit STRG+C abbrechen.


    Grüße


    Dirk


    easyVDR:/# ./transcode_mpg_2_h264.pl welcometrans.mpg 220
    Design study for transcoding vdr to mp4 on ultra low video bitrates from alex Richter last edit 2008-08-12
    transcode to h264 mp4 with transcode and piped x264, also transcode Audio from mpg to aac for mp4
    welcometrans.mpg --> welcometrans.mp4 TargetSize --> 220


    ° get Frames...15154 OK
    ° get Orig Picture Sizes... 720 x 576 , 4:3 OK
    ° get Black Border, Deinterlace Informations... 112,0,112,0 , -I off OK
    ° Target Picture Size : 720 x 320
    Freeware Advanced Audio Coder
    FAAC 1.25


    [transcode] (probe) suggested AV correction -D 0 (0 ms) | AV 0 ms | 0 ms
    [transcode] auto-probing source welcometrans.mpg (ok)
    [transcode] V: import format | MPEG-2 (V=vob|A=vob)
    [transcode] V: AV demux/sync | (1) sync AV at initial MPEG sequence
    [transcode] V: import frame | disabled
    [transcode] V: bits/pixel | 0.000 (unknown)
    [transcode] V: decoding fps,frc | 25.000,3
    [transcode] V: Y'CbCr | YV12/I420
    [transcode] A: import format | 0x50 MPEG layer-2 [48000,16,2] 192 kbps
    [transcode] A: export format | 0x55 MPEG layer-3 [48000,16,2] 128 kbps
    [transcode] V: encoding fps,frc | 25.000,3
    [transcode] A: bytes per frame | 7680 (7680.000000)
    [transcode] A: adjustment | 0@1000
    [transcode] A: rescale stream | 0.900
    [transcode] V: IA32/AMD64 accel | sse3 (sse3 sse2 sse 3dnowext 3dnow mmxext mmx asm C)
    [transcode] V: video buffer | 1024 @ 0x0
    [filter_normalize.so] v0.1.1 (2002-06-18) Volume normalizer
    [import_vob.so] tccat -i "welcometrans.mpg" -t vob -d 0 -S 0 | tcdemux -a 0 -x mp3 -S 0 -M 1 -d 0 | tcextract -t vob -a 0 -x mp2 -d 0 | tcdecode -x mp2 -d 0
    [import_vob.so] tccat -i "welcometrans.mpg" -t vob -d 0 -S 0 | tcdemux -s 0xc0 -x mpeg2 -S 0 -M 1 -d 0 | tcextract -t vob -a 0 -x mpeg2 -d 0 | tcdecode -x mpeg2 -d 0 -y yv12
    Quantization quality: 75
    Bandwidth: 14000 Hz
    Object type: Low Complexity(MPEG-4) + M/S
    Container format: Transport Stream (ADTS)
    Encoding test.wav to out.aac
    frame | bitrate | elapsed/estim | play/CPU | ETA


    28350/524289 ( 5%)| 108.5 | 32.6/602.2 | 18.57x | 569.6
    clean up | frame threads | unload modules | cancel signal | internal threads | done
    28413/524289 ( 5%)| 108.4 | 32.6/602.3 | 18.57x | 569.7


    ° H264 Data Rate set at 2748 KBit/sec


    [transcode] (probe) suggested AV correction -D 0 (0 ms) | AV 0 ms | 0 ms
    [transcode] auto-probing source welcometrans.mpg (ok)
    [transcode] V: import format | MPEG-2 (V=vob|A=vob)
    [transcode] V: AV demux/sync | (1) sync AV at initial MPEG sequence
    [transcode] V: import frame | 720x576 1.25:1 encoded @ 4:3
    [transcode] V: new aspect ratio | 720x544 1.32:1 (-B)
    [transcode] V: clip frame (->) | 720x320
    [transcode] V: rgb2bgr | yes
    [transcode] V: bits/pixel | 0.312
    [transcode] V: decoding fps,frc | 25.000,3
    [transcode] V: Y'CbCr | YV12/I420
    [transcode] A: import format | 0x50 MPEG layer-2 [48000,16,2] 192 kbps
    [transcode] A: export format | 0x55 MPEG layer-3 [48000,16,2] 128 kbps
    [transcode] V: encoding fps,frc | 25.000,3
    [transcode] A: bytes per frame | 7680 (7680.000000)
    [transcode] A: adjustment | 0@1000
    [transcode] V: IA32/AMD64 accel | sse3 (sse3 sse2 sse 3dnowext 3dnow mmxext mmx asm C)
    [transcode] V: video buffer | 1024 @ 720x576


    ° first done


    [transcode] (probe) suggested AV correction -D 0 (0 ms) | AV 0 ms | 0 ms
    [transcode] auto-probing source welcometrans.mpg (ok)
    [transcode] V: import format | MPEG-2 (V=vob|A=vob)
    [transcode] V: AV demux/sync | (1) sync AV at initial MPEG sequence
    [transcode] V: import frame | 720x576 1.25:1 encoded @ 4:3
    [transcode] V: new aspect ratio | 720x544 1.32:1 (-B)
    [transcode] V: clip frame (->) | 720x320
    [transcode] V: rgb2bgr | yes
    [transcode] V: bits/pixel | 0.312
    [transcode] V: decoding fps,frc | 25.000,3
    [transcode] V: Y'CbCr | YV12/I420
    [transcode] A: import format | 0x50 MPEG layer-2 [48000,16,2] 192 kbps
    [transcode] A: export format | 0x55 MPEG layer-3 [48000,16,2] 128 kbps
    [transcode] V: encoding fps,frc | 25.000,3
    [transcode] A: bytes per frame | 7680 (7680.000000)
    [transcode] A: adjustment | 0@1000
    [transcode] V: IA32/AMD64 accel | sse3 (sse3 sse2 sse 3dnowext 3dnow mmxext mmx asm C)
    [transcode] V: video buffer | 1024 @ 720x576


    ° second done


    sh: mp4creator: command not found
    Wed Oct 15 13:37:48 2008
    Wed Oct 15 13:39:29 2008
    easyVDR:/#

    VDR 1: GA-MA78GM-S2H; X2 4450e, 1GB RAM, WD 250GB RE , NT S12 330, Gen2VDR


    HD VDR: Asus M3A78-EM, X2 245e, 2GB RAM, TT1600, X10, Gen2VDR V3B4


    Server: Alix1c, 256MB RAM, 160GB HDD, GBLAN OVPN, SAMBA, DSL und WLAN Access Point SW: Debian Etch.

  • - x264 ( the pure encoder )
    - mp4creator from mpg4


    an board ?


    Code
    $ x264 --help
    x264 core:56
    Syntax: x264 [options] -o outfile infile [widthxheight]
    ....


    Code
    $ mp4creator -version
    mp4creator - mpeg4ip version 1.5.0.
    ...


    Grüße vom Alex

    Wer Rechtschreibfehler findet, darf sie behalten


    Meine Konfiguration :


    Ion 2, 2 x S2 3600, 4 Gig Ram, OS : Kubuntu 12.04 LTS, Kernel 3.2.0-40-generic , x86_64, vdr.2.0.1 ( yavdr-testing ) , vdr-xine 0.9.4 ( yavdr-testing ) , xine-lib 1.2 ( yavdr-testing )

  • Zitat

    Original von faup
    hier mal der aktuelle Stand, ich kodiere hiermit vor allem die Sendeformate 480x368, wie sie auf Premiere SciFi, 13thStreet etc. gesendet werden.


    Warum rechnest du die Auflösung herunter? Gesendet wird in 480x576. Bei der Wiedergabe dürfte auch bei h.264 das Bildformat richtig dargestellt werden.



    Ciao

  • Aus historischen Gründen ( xvid / avi ) habe ich es immer bei quadratischen Pixeln ( PAR 1/1) belassen.


    Wäre nun aber mal ein guter Zeitpunkt das orig Bildformat beizubehalten und den PAR mitzugeben.


    Ich werde mal ein paar Tests machen und die augenscheinliche Qualität bei gleicher Filegröße vergleichen.


    Grüße vom Alex

    Wer Rechtschreibfehler findet, darf sie behalten


    Meine Konfiguration :


    Ion 2, 2 x S2 3600, 4 Gig Ram, OS : Kubuntu 12.04 LTS, Kernel 3.2.0-40-generic , x86_64, vdr.2.0.1 ( yavdr-testing ) , vdr-xine 0.9.4 ( yavdr-testing ) , xine-lib 1.2 ( yavdr-testing )

  • @ faup
    Hallo ALex,


    danke für die Info. Ich sag es ja auch immer: Wer lesen kann ist klar im Vorteil :) Habe natürlich nicht den mp4creator und den x264 auf meinem System. Muss mal schauen wie ich das am geschicktesten installiere (easyvdr).


    Ich habe allerdings schon erfolgreich deine Skripte vdr2mpg.pl und mpg2avi.pl getestet und finde deine Arbeit wirklich Super. Vielleicht kannst du oder jemand anders mir da noch ein wenig weiterhelfen. Ich möchte die meisten meiner Aufnahmen gerne in Xvid oder ein anderes Format konvertieren um ein wenig Platz zu sparen. Ich möchte allerdings die Originalauflösung nicht verändern (verkleinern) und die Platzeinsparung sollte in einem vernünftigen Verhältnis stehen. Mir reicht es eigentlich, wenn eine 90min Aufnahme mit DD statt 3,5GB nur noch 1,5-2GB hat. Ich möchte halt das die 720x576 erhalten werden und man keine Bildartefakte sieht. Bei der veränderten Auflösunf geht ziemlich viel Qualität verloren, oder? (Kommt mir auf meinem LCD jedenfalls so vor). Wie kann ich bei deinen Skripten das verändern der Auflösung verhindern? Mit welchem verfahren komprimierst du mittlerweile deine Videos?
    Grüße
    Dirk

    VDR 1: GA-MA78GM-S2H; X2 4450e, 1GB RAM, WD 250GB RE , NT S12 330, Gen2VDR


    HD VDR: Asus M3A78-EM, X2 245e, 2GB RAM, TT1600, X10, Gen2VDR V3B4


    Server: Alix1c, 256MB RAM, 160GB HDD, GBLAN OVPN, SAMBA, DSL und WLAN Access Point SW: Debian Etch.

  • Hi faup,


    ich versuche mich zur Zeit auch an einer Umwandlung von VDR-Aufnahmen nach x264 mit AAC Audio. Dein Script hat mir schon viel geholfen. Zurzeit Versuche ich "transcode" in den Grif zu bekommen. So wie es aussicht werden Automatisch die schwaren Balken entfernt. Leider stimmt danach das Seitenverhältnis nicht mehr. Du scheinst das ja mit der -B Option zu regeln. Allerdings verstehe ich nicht woher du weißt wie viel Abgeschnitten wurde und wie stark man das bild stauchen muss.


    Ich hoffe du verstehst was ich meine und kannst mir helfen.


    Gruß
    Mucki

  • Hallo,


    laufen die Videos wohl auf einem Athlon mit 1400Mhz? (ich wollte eigentlich die Testvideos abspielen, aber die gibbet nimmer; Könnte vielleicht jemand nochmal Videos zur Verfügung stellen?)


    Gruß,
    Hendrik

Jetzt mitmachen!

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