Liomans Blog - encodierenhttps://lioman.de/42 ist die Antwort – aber wie lautet die Frage?Thu, 27 Jan 2011 17:46:00 +0100Skript: DVD/Video in XVID umwandelnhttps://lioman.de/2011/01/skript-dvdvideo-in-xvid-umwandeln/<p>Vor einiger Zeit habe ich <a class="reference external" href="https://lioman.de/2009/11/script-videos-in-xvid-encodieren/">hier</a> beschrieben, wie man einfach ein oder mehrere Videos in <span class="caps">XVID</span> umwandeln kann, damit sie auch ein <span class="caps">DVD</span>-Player abspielen&nbsp;kann.</p> <p>Mein Skript habe ich ein wenig&nbsp;verbessert:</p> <ol class="arabic simple"> <li>man kann direkt den ersten Titel einer <span class="caps">DVD</span> rippen und umrechnen lassen wenn man als ersten Parameter <em>dvd</em> eingibt. So kann man Aufnahmen einfach&nbsp;archivieren.</li> <li>Schwarze Balken werden automatisch abgeschnitten. Das spart Größe und verbessert die Qualität. Dazu habe ich <a class="reference external" href="http://lists.mplayerhq.hu/pipermail/mplayer-users/2005-November/056636.html">dieses</a> Skript in meines&nbsp;integriert.</li> <li>Die Bitrate habe ich ein bisschen nach oben&nbsp;geschraubt.</li> </ol> <p>Ansonsten ist die Benutzung gleich geblieben.&nbsp; Also Skript runterladen - ausführbar machen und&nbsp;mit</p> <pre class="literal-block"> ./Video2xvid video1 video2 video3 </pre> <p>oder</p> <pre class="literal-block"> ./Video2xvid dvd </pre> <p>starten.</p> <p>Hier das Skript (Download: <a class="reference external" href="https://lioman.de/2011/01/skript-dvdvideo-in-xvid-umwandeln/Video2xvid_update.tar.gz">Video2xvid_update.tar.gz</a>):</p> <pre class="literal-block"> #!/bin/bash #Lösche logdatei um Störungen zu vermeiden rm -v divx2pass.log Gesamtdauer=0 while [ ${1} != '' ] do if [ &quot;$1&quot; = &quot;dvd&quot; ]; then echo &quot;Filmname eingeben:&quot; read Filmname mplayer -dvd-device /dev/sr0 dvd://1 -v -dumpstream -dumpfile $Filmname.vob set &quot;$Filmname.vob&quot; fi ###Bestimme Breite BREITE=`mplayer -identify &quot;$1&quot; -ao null -vo null -frames 0 2&gt;/dev/null | grep ^ID_VIDEO_WIDTH | cut -c16-`; echo &quot;Orginalbreite= $BREITE&quot; if [ $BREITE -le 720 ]; then VBREITE=$BREITE else VBREITE=720 fi ###Bestimme Höhe HOEHE=`mplayer -identify &quot;$1&quot; -ao null -vo null -frames 0 2&gt;/dev/null | grep ^ID_VIDEO_HEIGHT | cut -c17-`; echo &quot;Orginalhöhe= $HOEHE&quot; CROPHOEHE=$((HOEHE-8)); echo &quot;Crophöhe -$CROPHOEHE-&quot; ####### Crop TOTAL_LOOPS=&quot;40&quot; NICE_PRI=&quot;10&quot; ######### CROP Settings ############# echo &quot;Please wait.&nbsp; It make take a couple minutes to detect crop parameters.&quot; A=20 while [ &quot;$A&quot; -lt &quot;$TOTAL_LOOPS&quot; ] ; do A=&quot;$(( $A + 1 ))&quot; SKIP_SECS=&quot;$(( 35 * $A ))&quot; nice -n $NICE_PRI nohup mplayer $1 -ss $SKIP_SECS -identify -frames 20 -vo md5sum -ao null -nocache -vf crop=$BREITE:$CROPHOEHE:0:8,cropdetect=20:2 2&gt;&amp;1 &gt; mplayer.log &lt; /dev/null # echo DEBUG ; cat mplayer.log CROP[$A]=`awk -F 'crop=' '/crop/ {print $2}' &lt; mplayer.log| awk -F ')' '{print $1}' | tail -n 1` echo &quot;A= ${CROP[$A]}&quot; done rm md5sums mplayer.log B=20 while [ &quot;$B&quot; -lt &quot;$TOTAL_LOOPS&quot; ] ; do B=&quot;$(( $B + 1 ))&quot; echo &quot;B= ${CROP[$B]}&quot; C=20 while [ &quot;$C&quot; -lt &quot;$TOTAL_LOOPS&quot; ] ; do C=&quot;$(( $C + 1 ))&quot; if [ &quot;${CROP[$B]}&quot; == &quot;${CROP[$C]}&quot; ] ; then COUNT_CROP[$B]=&quot;$(( ${COUNT_CROP[$B]} + 1 ))&quot; fi done done HIGHEST_COUNT=0 D=20 while [ &quot;$D&quot; -lt &quot;$TOTAL_LOOPS&quot; ] ; do D=&quot;$(( $D + 1 ))&quot; if [ &quot;${COUNT_CROP[$D]}&quot; -gt &quot;$HIGHEST_COUNT&quot; ] ; then HIGHEST_COUNT=&quot;${COUNT_CROP[$D]}&quot; GREATEST=&quot;$D&quot; fi done CROP=&quot;${CROP[$GREATEST]}&quot; echo -e &quot;\n\nCrop Setting is: $CROP ... \n\n&quot; ####Crop-Ende## # Bestimme Audio-Codec ACODEC=`mplayer -identify &quot;$1&quot; -ao null -vo null -frames 0 2&gt;/dev/null | grep ^ID_AUDIO_CODEC | cut -c16-`; echo &quot;Audiocodec= $ACODEC&quot; if [ &quot;$ACODEC&quot; == &quot;a52&quot; -o &quot;$ACODEC&quot; == &quot;faad&quot; ]; then AOPTS=&quot;lavc -lavcopts acodec=ac3&quot; #&quot;lavc -lavcopts acodec=ac3:abitrate=192 -af volnorm=1&quot; else AOPTS=&quot;mp3lame -lameopts abr:br=196 -af lavcresample=44100,volnorm=1&quot; fi #Bestime Bitrate RATE=`mplayer -identify &quot;$1&quot; -ao null -vo null -frames 0 2&gt;/dev/null | grep ^ID_VIDEO_BITRATE | cut -c18-`; echo &quot;Orginalbitrate= $RATE&quot; if [ $RATE == 0 ]; then BRATE=900 else if [ $RATE -le 1500000 ]; then BRATE=$((RATE/1000)) else BRATE=900 fi fi # Bestimme Namen NAME=`echo &quot;$1&quot; | sed 's/\.[^\.]*$//'`; echo $NAME #Bestimme Startzeit START=$(date +&quot;%s&quot;); #Starte Codieren echo &quot;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&quot; echo &quot;Encodiere $1 in $NAME-xvid.avi&quot; echo echo &quot;Beginne mit erstem Durchgang&quot; echo echo &quot;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&quot; mencoder&nbsp; -ffourcc XVID -oac $AOPTS -ovc xvid -xvidencopts pass=1:trellis:hq_ac -vf crop=$BREITE:$CROPHOEHE:0:8,crop=$CROP,scale=$VBREITE:-3 -o /dev/null $1 echo &quot;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&quot; echo &quot;Nun folgt Durchgang Nummer Zwei&quot; echo &quot;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&quot; mencoder&nbsp; -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 crop=$BREITE:$CROPHOEHE:0:8,crop=$CROP,scale=$VBREITE:-3 -o $NAME-xvid.avi $1 #Berechne Dauer ENDE=$(date +&quot;%s&quot;); DAUER=$(((ENDE-START)/60)); echo &quot;************************************&quot; echo &quot;**Encodieren in XVID abgeschlossen**&quot; echo &quot;**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; **&quot; echo &quot;** es dauerte ca. $DAUER Minuten&nbsp;&nbsp;&nbsp;&nbsp; **&quot; echo &quot;************************************&quot; echo Gesamtdauer=$((Gesamtdauer+DAUER)) # Aufräumen echo -e &quot;Logdatei wird gelöscht&quot; rm -v divx2pass.log # Auswahl anzeigen echo &quot;Soll Orginaldatei gelöscht werden [y/n]&quot; echo &quot;Nach 25 Sekunden ohne Eingabe wird ohne Löschen beendet&quot; read -t 25 -n 1 TASTE if [ &quot;$TASTE&quot; == &quot;y&quot; ] ; then echo &quot;Lösche $1&quot; rm -f $1 shift else shift fi done # Beenden echo &quot;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&quot; echo echo &quot;Encodieren beendet&quot; echo echo &quot;Gesamtdauer ca. $Gesamtdauer Minuten&quot; echo &quot;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&quot; </pre> LiomanThu, 27 Jan 2011 17:46:00 +0100tag:lioman.de,2011-01-27:/2011/01/skript-dvdvideo-in-xvid-umwandeln/DigitalOpen SourcedivxDVDencodierenKonsoleLinuxMplayerrippenSkriptVideoxvidScript: Videos in XVID encodierenhttps://lioman.de/2009/11/script-videos-in-xvid-encodieren/<p><strong>*Platzsparende Videocodecs wie*</strong> <a class="reference external" href="http://de.wikipedia.org/wiki/X264">x264</a> <strong>*verpackt in einem <span class="caps">MP4</span>-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&nbsp;umencodieren.*</strong></p> <p>Da ich immer mal wieder Videos in verschiedensten Formaten aus dem Netz lade, sie aber mit dem <span class="caps">DVD</span>-Recorder anschauen möchte, habe ich ein kleines Script geschrieben, dass alles automatisch&nbsp;erledigt.</p> <p>Der Player kann wie die meisten <span class="caps">XVID</span>/<span class="caps">DIVX</span> - Avicontainer lesen. Es sollen also alle Videos in dieses Format überführt werden. Das Problem: Es gibt viele verschiedene Quellen und Qualitätsstufen. <span class="caps">HDTV</span>-Videos wie <a class="reference external" href="http://www.home-2009.com/"><span class="caps">HOME</span></a>über <a class="reference external" href="http://www.legaltorrents.com/torrents/547-home-2009">Legaltorrents.com</a> (Sehr groß, mp4, aac), Youtube/ Vimeo videos (kleine flv, zT. <span class="caps">HQ</span>-Videos/mp4) , Streammitschnitte (unterschiedlicher Ausführung) und natürlich <span class="caps">TV</span>-Mitschnitte in <span class="caps">DVD</span>-Qualität. Die verschieden Quellen sollen alle jeweils so optimal wie möglich verarbeitet werden und von Hand ist es viel zu viel&nbsp;Arbeit.</p> <p>Ich möchte als Ergebnis eine möglichst hohe Qualität haben, bei vernünftiger Videogröße und natürlich absoluter&nbsp;Kompatibilität.</p> <p>Dazu folgende Erkenntnis: Das Ergebnis wird nie besser als die Quelle werden. Es macht also keinen Sinn aus einem kleinen *.flv-Video ein 1280x720-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&nbsp;sparen.</p> <p>Was macht das&nbsp;Script:</p> <ol class="arabic simple"> <li>Quelle&nbsp;prüfen</li> <li>Qualität festsetzen nicht besser als Quelle aber höchstens 720 in der Breite bei einer Bitrate von&nbsp;750</li> <li>2-pass-Encodieren und danach&nbsp;aufräumen</li> </ol> <p>Wie nutzt man das&nbsp;Script?</p> <ol class="arabic"> <li><p class="first">runterladen</p> </li> <li><p class="first">entpacken</p> </li> <li><pre class="first literal-block"> chmod +x #(Ausfuehrbar machen) </pre> </li> <li><pre class="first literal-block"> ./Video2xvid video1 video2 video3 </pre> <p></li> <li><p class="first">Das Script Encodiert alle Videos&nbsp;nacheinander</p> </li> </ol> <p>Über Vorschläge zur verbesserung des Scriptes oder Fragen nach Hilfe freue ich&nbsp;mich.</p> <p>Nun das Script, ich hoffe ich habe es ausreichend&nbsp;kommentiert:</p> <p>(Weiter unten nochmal als&nbsp;Download)</p> <pre class="literal-block"> #!/bin/bash #Lösche logdatei um Störungen zu vermeiden rm -v divx2pass.log Gesamtdauer=0 while [ ${1} != '' ] do #Bestimme Breite BREITE=`mplayer -identify \$1\ -ao null -vo null -frames 0 2&gt;/dev/null | grep ^ID_VIDEO_WIDTH | cut -c16-`; echo \Orginalbreite= $BREITE\ if [ $BREITE -le 720 ]; then VBREITE=$BREITE else VBREITE=720 fi # Bestimme Audio-Codec ACODEC=`mplayer -identify \$1\ -ao null -vo null -frames 0 2&gt;/dev/null | grep ^ID_AUDIO_CODEC | cut -c16-`; echo \Audiocodec= $ACODEC\ if [ \$ACODEC\ == \a52\ -o \$ACODEC\ == \faad\ ]; then AOPTS=\lavc -lavcopts acodec=ac3 -af volnorm=1\ else AOPTS=\mp3lame -lameopts abr:br=196 -af lavcresample=44100,volnorm=1\ fi #Bestime Bitrate RATE=`mplayer -identify \$1\ -ao null -vo null -frames 0 2&gt;/dev/null | grep ^ID_VIDEO_BITRATE | cut -c18-`; echo \Orginalbitrate= $RATE\ if [ $RATE == 0 ]; then BRATE=750 else if [ $RATE -le 800000 ]; then BRATE=$((RATE/1000)) else BRATE=750 fi fi # Bestimme Namen NAME=`echo \$1\ | sed 's/\.[^\.]*$//'`; echo $NAME #Bestimme Startzeit START=$(date +\%s\); #Starte Codieren echo \~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ echo \Encodiere $1 in $NAME-xvid.avi\ echo echo \Beginne mit erstem Durchgang\ echo echo \~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ mencoder -ffourcc XVID -oac $AOPTS -ovc xvid -xvidencopts pass=1:trellis:hq_ac -vf scale=$VBREITE:-3 -o /dev/null $1 echo \~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ echo \Nun folgt Durchgang Nummer Zwei\ echo \~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ 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 #Berechne Dauer ENDE=$(date +\%s\); DAUER=$(((ENDE-START)/60)); echo \************************************\ echo \**Encodieren in XVID abgeschlossen**\ echo \** **\ echo \** es dauerte ca. $DAUER Minuten **\ echo \************************************\ echo Gesamtdauer=$((Gesamtdauer+DAUER)) # Aufräumen echo -e \Logdatei wird gelöscht\ rm -v divx2pass.log # Auswahl anzeigen echo \Soll Orginaldatei gelöscht werden [y/n]\ echo \Nach 15 Sekunden ohne Eingabe wird ohne Löschen beendet\ read -t 15 -n 1 TASTE if [ \$TASTE\ == \y\ ] ; then echo \Lösche $1\ rm -f $1 shift else shift fi done # Beenden echo \~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ echo echo \Encodieren beendet\ echo echo \Gesamtdauer ca. $Gesamtdauer Minuten\ echo \~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ </pre> <p>Und hier die Datei zum Download: <a class="reference external" href="https://lioman.de/2009/11/script-videos-in-xvid-encodieren/Video2xvid.tar.gz">Video2xvid.tar.gz</a></p> LiomanMon, 09 Nov 2009 18:40:00 +0100tag:lioman.de,2009-11-09:/2009/11/script-videos-in-xvid-encodieren/Wissenschaft und TechnikbashencodierenLinuxscriptVideovideocodecsxvid