transcode mpeg2 mit multi-pass

  • Auf Google bin ich nicht so erfolgreich gewesen, darum hier mal meine Frage. Ich suche eine Möglichkeit, einen MPEG-Stream zu verkleinern, da ich beispielsweise 2 Filme auf eine DVD bringen möchte.


    Dazu gibt es 2 Ansätze:


    [list=1]
    [*]Einige Frames weglassen
    [*]Alles zu dekodieren und dann neu zu kodieren
    [*]Und das unter 2. noch im Multi-Pass-Verfahren wie bei DivX
    [/list=1]


    Zu 1. habe ich nur das Tool M2VRequantizer vom Metakine gefunden. Ist ja ok. läuft auch bei mir. Die genaue Qualität im Vergleich zu DVDShrink (unter Wine) kann ich erst der nächsten Tage sagen (falls gewünscht).


    Zu 2. gibt es ja nun sehr viele Programme (mplayer, transcode, mjpegtools usw.), aber ...


    Zu 3. finde ich unter Linux leider nix. Das schein sogar unter Windows nicht übleich zu sein, aber wenigstens möglich.


    Kann mir jemand eine Hilfestellung geben, wo ich entsprechenden finden kann (oder kann transcode oder eine mplayer-Version es vielleicht doch schon)?

    VDR-Server: Gentoo (AMD64/Core-i7) / VDR-1.7.23 / Digital Devices Octopus CI & 2xDuoFlex S2 HDTV (Rev. V3)
    VDR-Client: Gentoo (AMD64/Atom-D525) / VDR-1.7.23 / Chieftech & iMON-Pad / ASUSTeK - AT5IONT-I / 4GB-RAM & 65GB-SSD
    Alt: 3xTT-1.5 / linuxtv-dvb-1.1.1 + test_av-1.28 + FW-2622 / vdr-1.3.37 / viele Plugins / LFS-4.1

  • Hi,


    mpeg2 2pass encoding unter windows sollte es gehen, ligos z.b. oder mainconcept


    und requant unter linux ist besser als neu zu kodieren, aber man könnte es auch noch
    verbessern, z.b. mit nem 2-pass verfahren, aber z.b. nicht vorhanden.


    Gruß MeMeD

    --
    viel spass am geraet
    ---
    AMD1100/512 # 200GB-VDR # 220GB-DIVX #
    1.3 Siemens # 2.1 Haupauge(primary) # RH 7.3


  • Hi,


    zu 1) es werden KEINE Bilder weggelassen, sondern es wird transcodiert. Allerdings werden die Bewegungsvektoren nicht neu "gesucht", sondern aus dem Original Material übernommen. Deshalb ist das Verfahren viel schneller. Von der Qualität her ist das ws nicht zu schlagen


    zu 2) ist sehr langsam und bringt nix


    zu 3) steckt implizit in 1) drin, wenn der Original Encoder schon eine optimale Datenrate pro Szene gesucht hat, dann wird beim gleichmässigen eindampfen um einen Faktor die (relative) Verteilung beibehalten. In meinen Augen ist nur 1) gelungen (weil schnell und gute Qualität). Wenn man sonst "bei Null" anfängt und 2-Pass macht (soll ffmpeg (demnächst?) können), dann braucht das einfach zuviel Zeit...


    Cheers


    Peter / doc

    Mitstreiter für VDRsync gesucht!
    Egal ob Perl Programmierer, Tester, Doku-Schreiber oder User, jede Hilfe ist willkommen. Infos hier im Board (nach vdrsync suchen) oder auf der vdrsync-Homepage

  • Quote

    Original von Doc
    zu 1) es werden KEINE Bilder weggelassen, sondern es wird transcodiert.


    Ok, wieder etwas dazu gelernt :-)


    Quote


    zu 3) steckt implizit in 1) drin, wenn der Original Encoder schon eine optimale Datenrate pro Szene gesucht hat, dann wird beim gleichmässigen eindampfen um einen Faktor die (relative) Verteilung beibehalten. In meinen Augen ist nur 1) gelungen (weil schnell und gute Qualität).


    Logisch, hätte ich auch drauf kommen können. ?(


    Quote


    Wenn man sonst "bei Null" anfängt und 2-Pass macht (soll ffmpeg (demnächst?) können), dann braucht das einfach zuviel Zeit...


    Das würde ich gern in kauf nehmen, denn meine Aufnahmen über AnalogTV sind halt mit einer konstanten Bitrate kodiert. Zwar einer hohen, aber eben darum die 2-Pass-Mathode.


    Ich werde mal nachschauen, ob ffmpeg vielleicht schon etwas genaueres über den Termin/Umfang gesagt hat. Mal sehen wie es angewendet werden soll.


    Tschüß
    Thomas

    VDR-Server: Gentoo (AMD64/Core-i7) / VDR-1.7.23 / Digital Devices Octopus CI & 2xDuoFlex S2 HDTV (Rev. V3)
    VDR-Client: Gentoo (AMD64/Atom-D525) / VDR-1.7.23 / Chieftech & iMON-Pad / ASUSTeK - AT5IONT-I / 4GB-RAM & 65GB-SSD
    Alt: 3xTT-1.5 / linuxtv-dvb-1.1.1 + test_av-1.28 + FW-2622 / vdr-1.3.37 / viele Plugins / LFS-4.1

  • Quote

    Original von lawhead
    Falls Du also wirklich an 2-pass MPEG2 interessiert ist, wäre das Deine Lösung.


    Dann werde mal schauen, wie ich das anstelle, denn im 2-Pass-Verfahren habe ich immer nur mit mencoder (da ist es ja eigentlich ein 3-Pass-Verfahren) gearbeitet.


    Wahrscheinlich wird es dann so aussehen wie:


    Code
    1. transcode -i ... -o test.mpg -y null,ffmpeg -F mpeg2 -R 1


    Nur erst einmal so geraten. Das mit dem Mulitpass bei transcode ist mit noch nicht so recht klar (0-3), aber das wird ja hoffentlich irgend wo in der Doku stehen.


    Falls jemand das schon fertig hat, wäre ich allerdings nicht böse, wenn er es mal kurz postet. :] Denn wie gesagt, mit transcode habe ich noch nicht so die Erfahrung.


    Bei mencoder habe ich es prinzipiell immer so gemacht:


    Audio berechnen und die Videokompression von mencoder für die verschiedenen Größen anzeigen lassen:

    Code
    1. mencoder ${FILE} -ovc frameno -o frameno.avi -oac mp3lame -lameopts abr:br=${ARATE}:q=0:aq=0


    Pass 1:

    Code
    1. mencoder ${FILE} -o film.avi -oac copy -pp hb:y,vb:y,lb -vop crop=${SCHNITT},scale=${FORMAT} -ovc divx4 -divx4opts br=${VRATE}:q=5:pass=1


    Pass 2:

    Code
    1. mencoder ${FILE} -o film.avi -oac copy -pp hb:y,vb:y,lb -vop crop=${SCHNITT},scale=${FORMAT} -ovc divx4 -divx4opts br=${VRATE}:q=5:pass=2

    VDR-Server: Gentoo (AMD64/Core-i7) / VDR-1.7.23 / Digital Devices Octopus CI & 2xDuoFlex S2 HDTV (Rev. V3)
    VDR-Client: Gentoo (AMD64/Atom-D525) / VDR-1.7.23 / Chieftech & iMON-Pad / ASUSTeK - AT5IONT-I / 4GB-RAM & 65GB-SSD
    Alt: 3xTT-1.5 / linuxtv-dvb-1.1.1 + test_av-1.28 + FW-2622 / vdr-1.3.37 / viele Plugins / LFS-4.1

  • Quote

    Falls jemand das schon fertig hat, wäre ich allerdings nicht böse, wenn er es mal kurz postet. Denn wie gesagt, mit transcode habe ich noch nicht so die Erfahrung.


    Also da wirst Du noch kein Glück haben. Wird wohl noch etwas dauern, bis transcode o.ä. das unterstützen. Wenn Du mich fragst: nutze lieber ffmpeg direkt für die MPEG-Erstellung.


    Beispiel:


    Du willst 2 Filme auf DVD bringen mit einer Gesamtgrösse von 5500 MB. Nehmen wir an, Du willst nur eine Audio-Spur behalten, reduziert sich die Gesamtgrösse auf 5000 MB.


    1. Die Filme mit vdrsync bearbeiten, NICHT multiplexen.
    2. Den Videostream kannst Du jetzt verkleinern lassen. Entweder mit requant (wenn die Auflösung DVD-kompatibel ist), oder mit ffmpeg (wenn die Auflösung nicht DVD-kompatibel ist)
    Den Umgang mit requant setze ich jetzt mal voraus. Für ffmpeg im 2-Pass so:


    ffmpeg -i e0.mpv -g 15 -bf 2 -minrate 500 -maxrate 7500 -b AVG_BITRATE -f rawvideo -vcodec mpeg2video -pass 1 -passlogfile film -s 720x576 -aspect 16:9 e0_trans.mpv


    ffmpeg -i e0.mpv -g 15 -bf 2 -minrate 500 -maxrate 7500 -b AVG_BITRATE -f rawvideo -vcodec mpeg2video -pass 2 -passlogfile film -s 720x576 -aspect 16:9 e0_trans.mpv


    AVG_BITRATE ist Deine errechnete Averate Bitrate für beide Filme.
    Wenn das Video resized wird (-s ) muss auch zwindend der Aspect Ratio (-aspect ) angegeben werden !


    Dann kann das neue Video mit dem Audio-Stream gemuxt werden. Fertig !


    ffmpeg ist meines Wissens für Linux der schnellste MPEG1+2 Encoder, der im Moment verfügbar ist (von requant abgesehen ).


    Wenn Du noch mehr Infos benötigst, einfach fragen. Aber wie immer : erst Manual von ffmpeg lesen!


    MfG


    lawhead


  • Hi,


    die Erfahrungen mit der Geschwindigkeit kann ich bestätigen, ffmpeg ist wirklich sehr schnell.


    Zum Thema "shrinken":


    Die Developerversion von VDRsync enthält jetzt die Möglichkeit, Audio- und Video-Filter per Command-line anzugeben.
    Bsp zum "shrinken"

    Code
    1. ./vdrsync.pl -v-filter " requant 1.25 > " 001.vdr


    Schreibt gleich einen "shrinked" Version des Videostreams auf die Platte.
    Bsp für Audio in mp3:

    Code
    1. ./vdrsync.pl -a-filter " lame --mp2input - " 001.vdr


    Konvertiert die MP2 Audio-Streams nach MP3


    Mehr Infos dazu gibts auf der Developer Seite von vdrsync.


    Die Filter sind noch im Aufbau, Anregungen, Tips etc willkommen .)


    Cheers


    Peter / doc

    Mitstreiter für VDRsync gesucht!
    Egal ob Perl Programmierer, Tester, Doku-Schreiber oder User, jede Hilfe ist willkommen. Infos hier im Board (nach vdrsync suchen) oder auf der vdrsync-Homepage

    The post was edited 1 time, last by Doc ().

  • Quote

    Original von lawhead


    2. Den Videostream kannst Du jetzt verkleinern lassen. Entweder mit requant (wenn die Auflösung DVD-kompatibel ist), oder mit ffmpeg (wenn die Auflösung nicht DVD-kompatibel ist)


    Danke, das war genau das, was ich suchte. Natürlich kann ich ohne Probleme auch ffmpeg benutzen. Durch Deine Beispiele ist der Einstieg wirklich nicht mehr schwer. Danke.


    Eine Frage noch:


    Hast Du schon einmal requant und ffmpeg gegenübergestellt? Ich meine bis zu welchem Faktor nimmt man requant und ab wann dann lieber ffmpeg (dann ist vielleicht auch zu überlegen, die Auflösung etwas herab zu setzen)?

    VDR-Server: Gentoo (AMD64/Core-i7) / VDR-1.7.23 / Digital Devices Octopus CI & 2xDuoFlex S2 HDTV (Rev. V3)
    VDR-Client: Gentoo (AMD64/Atom-D525) / VDR-1.7.23 / Chieftech & iMON-Pad / ASUSTeK - AT5IONT-I / 4GB-RAM & 65GB-SSD
    Alt: 3xTT-1.5 / linuxtv-dvb-1.1.1 + test_av-1.28 + FW-2622 / vdr-1.3.37 / viele Plugins / LFS-4.1

  • Quote

    Hast Du schon einmal requant und ffmpeg gegenübergestellt? Ich meine bis zu welchem Faktor nimmt man requant und ab wann dann lieber ffmpeg (dann ist vielleicht auch zu überlegen, die Auflösung etwas herab zu setzen)?


    Naja, ich habe schon mal ein par Tests gemacht. Aus meiner eigenen Erfahrung würde ich sagen, dass bei actionlastigen Filmen oder mit vielen schnellen Schnitten mit requant meiner Meinung nach bis Faktor 1.3 oder 1.4 ein akzeptables Ergebnis erreicht wird. Darüber kann es leicht zu Verblockungen kommen, die man auch am Fernseher sieht. Bei anderen, "ruhigeren" Filmen bin ich auch schon bis 1.8 gegangen. Ansosnsten würde sich wirklich der Einsatz von ffmpeg lohnen. Dauert zwar etwas länger, aber es treten keine Verblockungen auf. Zu Deiner Frage mit der Auflösung: Ich würde schon mit 704x576 oder 720x576 arbeiten. Bis zu einer avg.Bitrate von 2500 habe ich noch gute Ergebnisse erzielt (das wäre wie bei einer guten SVCD !) Erst wenn Du unter diese Marke kämst, würde ich die Auflösung verkleinern um dem Encoder mehr Spielraum mit der Bitrate zu geben.


    Das sind meine ganz persönlichen Erfahrungen, also wenn jemand anderes hier noch mehr Tips hätte - wäre auch für mich interessant !


    MfG


    lawhead

  • Quote

    Original von lawhead
    AVG_BITRATE ist Deine errechnete Averate Bitrate für beide Filme.


    Ich habe es ein wenig anders gemacht, da ich 2 Filme mit stärkerer unterschiedlicher Averate Bitrate habe (einen mit 3900 und der andere mit 3300). Da der mit 3900 auch noch länger ist, würde ein Durchschnitt herauskommen, der über 3300 liegt.. :(


    Ich habe einfach mal die VOBs mit mplex erstellt und die Gesamtgröße ermittelt. Das was nicht mehr auf die DVD paßt (so 400MByte) habe ich in eine Bitrate umgerechnet (280) und von den eigentlichen Bitraten der einzelnen Filme abgerechnet (also 3900-280=3620 und 3300-280=3020). Siehe Da, es waren dann nicht mehr 400MB zuviel, sondern 30MB zu wenig. Ist doch ok.


    Aber:


    mplex (1.6.2) gab beim multiplexen den Fehler aus:



    Mit den nicht komprimierten Videostream ergibt mplex:



    Vielleicht kann mir jemand sagen, warum? Ich werde die DVD mal auf einer DVD+RW fertig machen. Mal sehen, ob man diese Stellen sieht.

    VDR-Server: Gentoo (AMD64/Core-i7) / VDR-1.7.23 / Digital Devices Octopus CI & 2xDuoFlex S2 HDTV (Rev. V3)
    VDR-Client: Gentoo (AMD64/Atom-D525) / VDR-1.7.23 / Chieftech & iMON-Pad / ASUSTeK - AT5IONT-I / 4GB-RAM & 65GB-SSD
    Alt: 3xTT-1.5 / linuxtv-dvb-1.1.1 + test_av-1.28 + FW-2622 / vdr-1.3.37 / viele Plugins / LFS-4.1

  • Quote

    INFO: [mplex] Average bit-rate : 2988000 bits/sec
    INFO: [mplex] Peak bit-rate : 14523200 bits/sec


    Hier zu sehen: die Peak-Bitrate liegt über der DVD-Spezifikation ! Deshalb kann es auch vorkommen, dass diese von Dir beschriebenen Fehler auftauchen. Poste doch mal, wie deine Befehlszeile zum Erzeugen der Dateien aussah. Hast Du den VBV-Puffer selbst festgelegt ? Besser wäre es, das nicht zu tun.


    mfg


    lawhead

  • Quote

    Original von lawhead


    Hier zu sehen: die Peak-Bitrate liegt über der DVD-Spezifikation ! Deshalb kann es auch vorkommen, dass diese von Dir beschriebenen Fehler auftauchen. Poste doch mal, wie deine Befehlszeile zum Erzeugen der Dateien aussah.


    Code
    1. ffmpeg -hq -i 001.m2v -g 15 -bf 2 -minrate 500 -maxrate 7500 -b 2988 -f rawvideo -vcodec mpeg2video -pass 1 -passlogfile film e0_trans.mpv


    Für pass erst 1 dann 2.

    Quote

    Hast Du den VBV-Puffer selbst festgelegt ? Besser wäre es, das nicht zu tun.


    Wenn Du -bufsize meinst, den Parameter habe ich wie oben aufgeführt nicht mit angegeben. Liegt es vielleicht an -bt?

    VDR-Server: Gentoo (AMD64/Core-i7) / VDR-1.7.23 / Digital Devices Octopus CI & 2xDuoFlex S2 HDTV (Rev. V3)
    VDR-Client: Gentoo (AMD64/Atom-D525) / VDR-1.7.23 / Chieftech & iMON-Pad / ASUSTeK - AT5IONT-I / 4GB-RAM & 65GB-SSD
    Alt: 3xTT-1.5 / linuxtv-dvb-1.1.1 + test_av-1.28 + FW-2622 / vdr-1.3.37 / viele Plugins / LFS-4.1

  • Quote

    Wenn Du -bufsize meinst, den Parameter habe ich wie oben aufgeführt nicht mit angegeben. Liegt es vielleicht an -bt?


    Nein, -bf gibt nur an, wieviel B-Frames zwichen I/P-Frames liegen sollen. Ohne diesen Parameter würdest Du GOPs nur mit I und P-Frames erzeugen.
    Wenn die Peak-Bitrate nur kurz auftreten würde wäre es kein großes Problem, aber es scheinen mehrere Überschreitungen der DVD-Norm zu sein. An Deiner Stelle würde ich mal mit tcmplex aus dem transcode-Paket multiplexen, da meiner Meinung nach mplex sehr rigoros bei solche Sachen ist.
    Das nächste wäre, ob das Material interlaced ist. Wenn ja, würde ich in der Befehlszeile noch '-deinterlace' hinzufügen, da MPEG-Encoder sehr viel besser mit progressivem Material umgehen können und daher geringere Bitraten erzeugen.


    Folgendes ist mir noch aufgefallen:


    Quote

    INFO: [mplex] Aspect ratio : forbidden


    Du müsstest mal noch den Aspect Ratio mit angeben. In Deinem Falle '-aspect 4/3' , warum ffmpeg den vom Original nicht übernimmt weiß ich aber auch nicht. :(


    mfg


    lawhead


    PS: Hast Du irgendwelche Verbesserungen bei Angabe von '-hq' im erzeugten Film festgestellt ?

  • Quote

    Original von lawhead
    Das nächste wäre, ob das Material interlaced ist. Wenn ja, würde ich in der Befehlszeile noch '-deinterlace' hinzufügen, da MPEG-Encoder sehr viel besser mit progressivem Material umgehen können und daher geringere Bitraten erzeugen.


    So, nun eine Frage von einem, bei dem es bisher ohne Probleme funktioniert hat. Und wenn es funktioniert, fragt man einfach nicht nach. Ich habe hier eine ganz normale TV-Aufnahme mit dem VDR-1.2.5. Was sollte ich da nun am günstigsten machen?


    Quote

    Original von lawhead
    Folgendes ist mir noch aufgefallen:



    Mir auch, ist kein Problem.

    VDR-Server: Gentoo (AMD64/Core-i7) / VDR-1.7.23 / Digital Devices Octopus CI & 2xDuoFlex S2 HDTV (Rev. V3)
    VDR-Client: Gentoo (AMD64/Atom-D525) / VDR-1.7.23 / Chieftech & iMON-Pad / ASUSTeK - AT5IONT-I / 4GB-RAM & 65GB-SSD
    Alt: 3xTT-1.5 / linuxtv-dvb-1.1.1 + test_av-1.28 + FW-2622 / vdr-1.3.37 / viele Plugins / LFS-4.1

  • Quote

    Original von lawhead


    Nein, -bf gibt nur an,


    Ich meinte -BT. Das hilft aber auch nicht. Gerade probiert.


    Quote

    PS: Hast Du irgendwelche Verbesserungen bei Angabe von '-hq' im erzeugten Film festgestellt ?


    Ich habe es ohne -hq noch nicht probiert. Mache ich aber gleich. Ich nahm an, daß dadruch die Verarbeitung selbst nur besser wird und es länger dauert, aber nicht, daß -maxrate überschritten wird.

    VDR-Server: Gentoo (AMD64/Core-i7) / VDR-1.7.23 / Digital Devices Octopus CI & 2xDuoFlex S2 HDTV (Rev. V3)
    VDR-Client: Gentoo (AMD64/Atom-D525) / VDR-1.7.23 / Chieftech & iMON-Pad / ASUSTeK - AT5IONT-I / 4GB-RAM & 65GB-SSD
    Alt: 3xTT-1.5 / linuxtv-dvb-1.1.1 + test_av-1.28 + FW-2622 / vdr-1.3.37 / viele Plugins / LFS-4.1