Meine Kommentare

  • “Wir vermieten nicht an Neger”
    1 week ago
    Hab mich durch eine große Anzahl der Kommentare gewühlt und war vom latenten bis ganz offenen Rassismus überrascht! Ich war aber auch beruhigt, dass es genug Leute gibt, die sich dagegen wehren. Warum das ganze rassistisch ist soll man bitte...
  • Aufgeklappt und aufgerissen: Die ‘Video in Print’-Broschüre von OTTO
    4 weeks ago
    Sieht zumindest interessant aus, aber das kleine Display ist ja nicht so berauschend. So etwas wäre interessant als Beilage zum Katalog mit kleinen Videos zu allen Produkten, damit man sie sich in 3D anschauen kann. PS: An eurer...
  • Ich lass dann mal einen Baum für den Blog hier pflanzen
    Dec 10, 2009

    Es lohnt sich zumindestens darüber nachzudenken. Mal sehen vielleicht mache ich mit meinem Blog auch mit. Ein Baum mehr ist nie verkehrt.

  • Ladenschluss: Pro und Kontra
    Dec 9, 2009
    Die Freiheit als Freibrief in einer Argumentation vorzuschieben halte ich dennoch falsch. 1. bin ich der Meinung dehkah. Wird Sonntags in Berlin geöffnet ziehen die Berliner Läden das Geld durch Touristen aus anderen Städten ab. Und bei...
  • Wegen Kopenhagen uns so …
    Dec 8, 2009
    So etwas ähnliches gab es mal bei uns in Freiburg, da war ne Lampe über der Ampel die Motor aus/an gezeigt hat. Aus irgendeinem Grund wurden alle erst abgeschaltet, dann abgebaut. Wahrscheinlich war irgendeine Sesselfurzer-DIN nicht eingehalten...

Script: Videos in XVID encodieren

Platzsparende Videocodecs wie x264 verpackt in einem MP4-Container bieten hochqualitative Videos bei kleiner Größe. So ist es nicht verwunderlich, dass Videos mit diesem Format im Netz weit verbreitet sind. Das Problem dabei: Viele Standaloneplayer können es nicht lesen. Man muss also umencodieren.

Da ich immer mal wieder Videos in verschiedensten Formaten aus dem Netz lade, sie aber mit dem DVD-Recorder anschauen möchte, habe ich ein kleines Script geschrieben, dass alles automatisch erledigt.

Der Player kann wie die meisten XVID/DIVX – Avicontainer lesen. Es sollen also alle Videos in dieses Format überführt werden. Das Problem: Es gibt viele verschiedene Quellen und Qualitätsstufen. HDTV-Videos wie HOME über Legaltorrents.com (Sehr groß, mp4, aac), Youtube/ Vimeo videos (kleine flv, zT. HQ-Videos/mp4) , Streammitschnitte (unterschiedlicher Ausführung) und natürlich TV-Mitschnitte in DVD-Qualität. Die verschieden Quellen sollen alle jeweils so optimal wie möglich verarbeitet werden und von Hand ist es viel zu viel Arbeit.

Ich möchte als Ergebnis eine möglichst hohe Qualität haben, bei vernüftiger Videogröße und natürlich absoluter Kompatibilität.

Dazu folgende Erkentnis: Das Ergebnis wird nie besser als die Quelle werden. Es macht also keinen Sinn aus einem kleinen *.flv-Video ein 1280×720-Video mit ac3-Sound und einer Bitrate von 1000 zu machen. Andererseits kann der Player nicht mit zu Großen Bildern umgehen und ich will ja auch Platz sparen.

Was macht das Script:

  1. Quelle prüfen
  2. Qualität festsetzen
    nicht besser als Quelle aber höchstens 720 in der Breite bei einer Bitrate von 750
  3. 2-pass-Encodieren und danach aufräumen

Wie nutzt man das Script?

  1. runterladen
  2. entpacken
  3. chmod +x #(Ausfuehrbar machen)
  4. ./Video2xvid video1 video2 video3
  5. Das Script Encodiert alle Videos nacheinander

Über Vorschläge zur verbesserung des Scriptes oder Fragen nach Hilfe freue ich mich.

Nun das Script, ich hoffe ich habe es ausreichend kommentiert:

(Weiter unten nochmal als Download)

  1. #!/bin/bash
  2. #Loesche logdatei um Stoerungen zu vermeiden
  3. rm -v divx2pass.log
  4. Gesamtdauer=0
  5. while [ ${1} != '' ]
  6. do
  7. #Bestimme Breite
  8. BREITE=`mplayer -identify "$1" -ao null -vo null -frames 0 2>/dev/null | grep ^ID_VIDEO_WIDTH | cut -c16-`; echo "Orginalbreite= $BREITE"
  9. if [ $BREITE -le 720 ]; then
  10. VBREITE=$BREITE
  11. else
  12. VBREITE=720
  13. fi
  14. # Bestimme Audio-Codec
  15. ACODEC=`mplayer -identify "$1" -ao null -vo null -frames 0 2>/dev/null | grep ^ID_AUDIO_CODEC | cut -c16-`; echo "Audiocodec= $ACODEC"
  16. if [ "$ACODEC" == "a52" -o "$ACODEC" == "faad" ]; then
  17. AOPTS="lavc -lavcopts acodec=ac3 -af volnorm=1"
  18. else
  19. AOPTS="mp3lame -lameopts abr:br=196 -af lavcresample=44100,volnorm=1"
  20. fi
  21. #Bestime Bitrate
  22. RATE=`mplayer -identify "$1" -ao null -vo null -frames 0 2>/dev/null | grep ^ID_VIDEO_BITRATE | cut -c18-`;
  23. echo "Orginalbitrate= $RATE"
  24. if [ $RATE == 0 ]; then
  25. BRATE=750
  26. else
  27. if [ $RATE -le 800000 ]; then
  28. BRATE=$((RATE/1000))
  29. else
  30. BRATE=750
  31. fi
  32. fi
  33. # Bestimme Namen
  34. NAME=`echo "$1" | sed 's/\.[^\.]*$//'`; echo $NAME
  35. #Bestimme Startzeit
  36. START=$(date +"%s");
  37. #Starte Codieren
  38. echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
  39. echo "Encodiere $1 in $NAME-xvid.avi"
  40. echo
  41. echo "Beginne mit erstem Durchgang"
  42. echo
  43. echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
  44. mencoder  -ffourcc XVID -oac $AOPTS -ovc xvid -xvidencopts pass=1:trellis:hq_ac -vf scale=$VBREITE:-3 -o /dev/null $1
  45. echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
  46. echo "Nun folgt Durchgang Nummer Zwei"
  47. echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
  48. mencoder  -ffourcc XVID -oac $AOPTS -af lavcresample=44100,volnorm=1 -ovc xvid -xvidencopts pass=2:bitrate=$BRATE:hq_ac:trellis:chroma_opt:vhq=2:bvhq=1:quant_type=mpeg -vf scale=$VBREITE:-3 -o $NAME-xvid.avi $1
  49. #Berechne Dauer
  50. ENDE=$(date +"%s");
  51. DAUER=$(((ENDE-START)/60));
  52. echo "************************************"
  53. echo "**Encodieren in XVID abgeschlossen**"
  54. echo "**                                **"
  55. echo "** es dauerte ca. $DAUER Minuten     **"
  56. echo "************************************"
  57. echo
  58. Gesamtdauer=$((Gesamtdauer+DAUER))
  59. # Aufraeumen
  60. echo -e "Logdatei wird geloescht"
  61. rm -v divx2pass.log
  62. # Auswahl anzeigen
  63. echo "Soll Orginaldatei geloescht werden [y/n]"
  64. echo "Nach 15 Sekunden ohne Eingabe wird ohne Loeschen beendet"
  65. read -t 15 -n 1 TASTE
  66. if [ "$TASTE" == "y" ] ; then
  67. echo "Loesche $1"
  68. rm -f $1
  69. shift
  70. else
  71. shift
  72. fi
  73. done
  74. # Beenden
  75. echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
  76. echo
  77. echo "Encodieren beendet"
  78. echo
  79. echo "Gesamtdauer ca. $Gesamtdauer Minuten"
  80. echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"

Und hier die Datei zum Download: Download Video2XVID.tar.gz

Teile mit anderen:
  • Twitter
  • Facebook
  • Wikio DE
  • Diigo
  • Technorati
  • del.icio.us
  • Digg
  • Google Bookmarks
  • email
  • MisterWong.DE
  • LinkArena
  • FriendFeed
  • Yigg
  • BlinkList
  • blogmarks
  • Faves
  • Ping.fm
  • Reddit
  • StumbleUpon
  • Live
  • SphereIt
  • MisterWong

Ähnliche Artikel:

Einen Kommentar schreiben