{"id":1176,"date":"2025-02-08T20:47:10","date_gmt":"2025-02-08T19:47:10","guid":{"rendered":"https:\/\/terraner.zapto.org\/?p=1176"},"modified":"2025-02-10T11:03:25","modified_gmt":"2025-02-10T10:03:25","slug":"h-265-umstellung-version-beta-0-9-5-8-202409252105","status":"publish","type":"post","link":"https:\/\/terraner.zapto.org\/index.php\/2025\/02\/08\/h-265-umstellung-version-beta-0-9-5-8-202409252105\/","title":{"rendered":"h.265 Umstellung (Version, Beta-0.9.5-8 (20240925,2105))"},"content":{"rendered":"\n<p>Ich stelle Videos auf h.265 um. Dazu habe ich mit meinem Bruder mir eine kleine Hilfe gebaut.<br><br>(Ich nutze dazu Debian 12 mit dem HEVC encoder version 3.5 und ffmpeg version 6.0.1)<br><\/p><!--more-->\n\n\n\n<pre class=\"wp-block-preformatted\">#!\/bin\/bash\n\n# Einfache h.265 Umstellungshilfe.\n# Author: Eiskalter Winter <wwerrber@yahoo.com>\n# Version, Beta-0.9.5-8 (20240925,2105)\n\n# Die Verzeichnisse m\u00fcssen f\u00fcr das eigene System angepasst werden.\n#  DIRA ist das Verzeichnis der Quelldateien.\n#  DIRB ist das Verzeichnis f\u00fcr die tempor\u00e4ren Dateien vom first Pass und f\u00fcr die umgestellte Datei bis sie fertig ist. Danach wird die fertige Datei ins Verzeichnis DIRD verschoben.\n#  DIRC ist das Verzeichnis wo die Quelldateien hin verschoben werden wenn die Dateien umgestellt wurden.\n#  DIRD ist das Verzeichnis wo die fertigen Dateien hin verschoben werden.\n#  DIRE ist das Verzeichnis wo die die input.txt liegt.\n\nDIRA=~\/Bearbeitung\/Videos\/1-Umstellung\nDIRB=~\/Bearbeitung\/Videos\/2-Bearbeitung\nDIRC=~\/Bearbeitung\/Videos\/3-Umgestellt\nDIRD=~\/Bearbeitung\/Videos\/4-Fertig\nDIRE=~\/Bearbeitung\/Videos\n\n# Input Datei. Variablen werden durch diese Datei \u00fcbergeben.\ninput=\"$DIRE\/input.txt\"\n\n# Hardwarebeschleunigung. !!!!! Nicht getestet !!!!!\n#  Muss f\u00fcr eigenes System angepasste sein.\n#hwaccel=\"-hwaccel cuvid\"   #CUDA Video Decoding API (Nvidia)\n#hwaccel=\"-hwaccel vdpau\"   #Video Decode and Presentation API for Unix (Nvidia, ATI, S3, ...)\n#hwaccel=\"-hwaccel vaapi\"   #Video Acceleration API (Nvidia, ATI, Intel, S3, ...)\nhwaccel=\"\"   #keine\n\n# Kopieren oder umstellen?\nvidencod=`cat $input | grep \"=\" | grep videncoder | cut -d \"=\" -f 2`\n\n  if [ \"$videncod\" == \"copy\" ]; then\n    encoder=\"-c:v copy\"\n    else\n      if [ \"$videncod\" == \"h265\" ]; then\n        encoder=\"-c:v copy -c:v:0 libx265\"\n        else\n        echo  -e \"\\e[5;93mKein Encoder f\u00fcr den Videostream angegeben.\\033[00m\"\n        exit 1\n      fi\n  fi\n\n# ffmpeg einstellungen\nerw0=\"-fix_sub_duration -analyzeduration 1000G -probesize 1000G\"\nerw1=\"-coder 1 -refs 4 -deblock 1:0:0 -partitions +partp4x4 -psy 1 -psy-rd 1.00:0.00 -psymodel -1 -cmp rd -nr 0 -rc-lookahead 100 -direct-pred spatial -flags +loop -me_method hex -subq 7 -me_range 16 -trellis 1 -chromaoffset -2 -bf 3 -b_strategy 2 -g 100 -keyint_min 10 -sc_threshold 0 -qcomp 0.60 -qmin 0 -qmax 69 -qdiff 4 -i_qfactor 1.40\"\n#erw1=\"\"\nerw2=\"-8x8dct 1 -b-pyramid 2 -mixed-refs 1 -refs 4 -weightp 1\"\n#erw2=\"\"\n\n# CPU-Einstellungen\ncpu1=\"-cpuflags +mmx+mmxext+sse+sse2+sse3+ssse3+sse4.1+sse4.2+avx+avx2+fma3+bmi1+bmi2+cmov -threads 20\" #Xeon E5-2630L v4, i9 10700k, \u2026\n#cpu1=\"-cpuflags +cmov+sse4.2 -threads 4\"\n\n# h265 encoding einstellungen\ncrf=`cat $input | grep \"=\" | grep crf | cut -d \"=\" -f 2`\nerw265=\"input-depth=12:no-sao=1:level=5.2:aq-mode=3:crf=$crf:high-tier=1:level-idc=52:output-depth=12:keyint=1:lossless=1\"\n\ncd $DIRA\n\n# \u00dcberpr\u00fcfung ob ffmpeg schon l\u00e4uft.\nAPPLICATIONS=\"ffmpeg\"\n\nIsRunning()\n{\n    for i in $*; do\n    if [ `pgrep -c $i` -gt 0 ] ; then\n        return 1\n    fi\n    done\n\n    return 0\n}\n\n    IsRunning $APPLICATIONS\n    if [ \"$?\" == \"1\" ]; then\n        echo -e \"\\e[5;93mEine Instanz von ffmpeg l\u00e4uft schon.\\033[00m\"\n        echo -e \"\\e[5;93mBearbeitung wurde gestoppt.\\033[00m\"\n        exit 1\n        else\n        clear\n    fi\n\n# Profile f\u00fcr die Umstellung:\n#  8bit profiles:\n#   mmain, main-intra, mainstillpicture\n#   main444-8, main444-intra, main444-stillpicture\n#  10bit profiles:\n#   main10, main10-intra\n#   main422-10, main422-10-intra\n#   main444-10, main444-10-intra\n#  12bit profiles:\n#   main12, main12-intra\n#   main422-12, main422-12-intra\n#   main444-12, main444-12-intra\nprofile=main444-12-intra\n\n# Presents f\u00fcr die Umstellung (1 Pass):\npreset1=`cat $input | grep \"=\" | grep present1 | cut -d \"=\" -f 2`\n\n# Presents f\u00fcr die Umstellung (2 Pass):\npreset2=`cat $input | grep \"=\" | grep present2 | cut -d \"=\" -f 2`\n\n# Durchschnittliche Videobitrate\n#  1 = 1k | 1000 = 1000k\navbit=`cat $input | grep \"=\" | grep avbit | cut -d \"=\" -f 2`\n  if [[ \"$avbit\" == \"j\" || \"$avbit\" == \"y\" ]]; then\n    echo \"\"\n    elif [ \"$avbit\" == \"n\" ]; then\n      bit=`cat $input | grep \"=\" | grep videobit | cut -d \"=\" -f 2`\n      kbit=\"$bit\"k\n    else\n    exit 1\n  fi\n\n# Minimale Videobitrate\nmin=0\n\n# Maximale Videobitrate\n#  Das wie viel fache der durchschnittlichen Videobitrate?\nmaxmal=`cat $input | grep \"=\" | grep maxmal | cut -d \"=\" -f 2`\n\n  if [[ \"$avbit\" == \"j\" || \"$avbit\" == \"y\" ]]; then\n    echo \"\"\n    elif [ \"$avbit\" == \"n\" ]; then\n      max=`expr $bit \\* $maxmal`\n      kmax=\"$max\"k\n    else\n    exit 1\n  fi\n\n# Framerate des fertiggestellten Videos.\nfps=`cat $input | grep \"=\" | grep fps | cut -d \"=\" -f 2`\n  if [ \"$fps\" == \"\" ]; then\n    exit 2\n    elif [ \"$fps\" == \"0\" ]; then\n    fps1=\"\"\n    else\n    fps1=\"-r $fps\"\n  fi\n\n# Untertitel?\nsub1=`cat $input | grep \"=\" | grep sub1 | cut -d \"=\" -f 2`\n\n  if [ \"$sub1\" == \"0\" ]; then\n    sub=\"-sn\"\n    sub2=\"none\"\n    elif [ \"$sub1\" == \"1\" ]; then\n    sub=\"-sub_charenc UTF-8 -c:s copy\"\n    sub2=\"copy\"\n    else\n    exit 3\n  fi\n\n#--- Audio ---\n# Audiospur\nauds1=`cat $input | grep \"=\" | grep auds1 | cut -d \"=\" -f 2`\nauds2=`cat $input | grep \"=\" | grep auds2 | cut -d \"=\" -f 2`\nauds3=`cat $input | grep \"=\" | grep auds3 | cut -d \"=\" -f 2`\nauds4=`cat $input | grep \"=\" | grep auds4 | cut -d \"=\" -f 2`\n\n# Audiosprache\nlanguage1=`cat $input | grep \"=\" | grep language1 | cut -d \"=\" -f 2`\nlanguage2=`cat $input | grep \"=\" | grep language2 | cut -d \"=\" -f 2`\nlanguage3=`cat $input | grep \"=\" | grep language3 | cut -d \"=\" -f 2`\nlanguage4=`cat $input | grep \"=\" | grep language4 | cut -d \"=\" -f 2`\nlnga=\"-metadata:s:a:0 language=$language1 -metadata:s:a:0 title= -metadata:s:a:1 language=$language2 -metadata:s:a:1 title= -metadata:s:a:2 language=$language3 -metadata:s:a:2 title= -metadata:s:a:3 language=$language4 -metadata:s:a:3 title=\"\ndisp=\"-disposition:a:1 none -disposition:a:2 none -disposition:a:3 none -disposition:a:0 default\"\n\n# Encoder f\u00fcr die Audioumstellung: aac, libfdk_aac, ac3, copy, flac, mp2, libmp3lame, vorbis, wmav2, \u2026\naudencoder=`cat $input | grep \"=\" | grep audencoder | cut -d \"=\" -f 2`\naudiobit=`cat $input | grep \"=\" | grep audiobit | cut -d \"=\" -f 2`\naudiobitk=\"$audiobit\"k\n\n  if [ \"$audencoder\" == \"copy\" ]; then\n    aencoder=\"-c:a copy\"\n    else\n    aencoder=\"-c:a $audencoder -b:a $audiobitk\"\n  fi\n\n# Wie viele Audiospuren? (Maximal vier Audiospuren.)\ntracks=`cat $input | grep \"=\" | grep tracks | cut -d \"=\" -f 2`\n  if [ \"$tracks\" == \"0\" ]; then\n    if [ \"$sub1\" == \"0\" ]; then\n      audiomap=\"-map 0:v\"\n      audiomap1=\"nein\"\n      elif [ \"$sub1\" == \"1\" ]; then\n      audiomap=\"-map 0:v -map 0:s\"\n      audiomap1=\"ja\"\n    fi\n  elif [ \"$tracks\" == \"1\" ]; then\n    if [ \"$sub1\" == \"0\" ]; then\n      audiomap=\"-map 0:v -map 0:$auds1\"\n      audiomap1=\"nein\"\n      elif [ \"$sub1\" == \"1\" ]; then\n      audiomap=\"-map 0:v -map 0:$auds1 -map 0:s\"\n      audiomap1=\"ja\"\n    fi\n  elif [ \"$tracks\" == \"2\" ]; then\n    if [ \"$sub1\" == \"0\" ]; then\n      audiomap=\"-map 0:v -map 0:$auds1 -map 0:$auds2\"\n      audiomap1=\"nein\"\n      elif [ \"$sub1\" == \"1\" ]; then\n      audiomap=\"-map 0:v -map 0:$auds1 -map 0:$auds2 -map 0:s\"\n      audiomap1=\"nein\"\n    fi\n  elif [ \"$tracks\" == \"3\" ]; then\n    if [ \"$sub1\" == \"0\" ]; then\n      audiomap=\"-map 0:v -map 0:$auds1 -map 0:$auds2 -map 0:$auds3\"\n      audiomap1=\"nein\"\n      elif [ \"$sub1\" == \"1\" ]; then\n      audiomap=\"-map 0:v -map 0:$auds1 -map 0:$auds2 -map 0:$auds3 -map 0:s\"\n      audiomap1=\"nein\"\n    fi\n  elif [ \"$tracks\" == \"4\" ]; then\n    if [ \"$sub1\" == \"0\" ]; then\n      audiomap=\"-map 0:v -map 0:$auds1 -map 0:$auds2 -map 0:$auds3 -map 0:$auds4\"\n      audiomap1=\"nein\"\n      elif [ \"$sub1\" == \"1\" ]; then\n      audiomap=\"-map 0:v -map 0:$auds1 -map 0:$auds2 -map 0:$auds3 -map 0:$auds4 -map 0:s\"\n      audiomap1=\"nein\"\n      fi\n  else\n    exit 4\n  fi\n\n#--- Video Sonstiges ---\n# R\u00e4nder entfernen?\ncorp0=`cat $input | grep \"=\" | grep corp0 | cut -d \"=\" -f 2`\n\n    if [ \"$corp0\" == \"0\" ]; then\n      corp1=\"\"\n      elif [ \"$corp0\" == \"1\" ]; then\n      corpa=`cat $input | grep \"=\" | grep corpa | cut -d \"=\" -f 2`\n      corpb=`cat $input | grep \"=\" | grep corpb | cut -d \"=\" -f 2`\n      corpx=`cat $input | grep \"=\" | grep corpx | cut -d \"=\" -f 2`\n      corpy=`cat $input | grep \"=\" | grep corpy | cut -d \"=\" -f 2`\n      corp1=crop\n      else\n      exit 5\n    fi\n\n# Logo entfernen?\nlogo0=`cat $input | grep \"=\" | grep logo0 | cut -d \"=\" -f 2`\n\n    if [ \"$logo0\" == \"0\" ]; then\n      logo1=\"\"\n      elif [ \"$logo0\" == \"1\" ]; then\n      logox=`cat $input | grep \"=\" | grep logox | cut -d \"=\" -f 2`\n      logoy=`cat $input | grep \"=\" | grep logoy | cut -d \"=\" -f 2`\n      logow=`cat $input | grep \"=\" | grep logow | cut -d \"=\" -f 2`\n      logoh=`cat $input | grep \"=\" | grep logoh | cut -d \"=\" -f 2`\n      logo1=delogo\n      else\n      exit 6\n    fi\n\n# Schneiden, Angabe vom Dateianfang aus gesehen\n  ssbof=`cat $input | grep \"=\" | grep ssbof | cut -d \"=\" -f 2`\n  if [[ \"$ssbof\" == \"\" || \"$ssbof\" == \"n\" ]]; then\n    ssbof1=\"\"\n    else\n    ssbof1=\"-ss $ssbof -accurate_seek\"\n  fi\n\n# Schneiden, Angabe vom Dateiende aus gesehen\n  sseof=`cat $input | grep \"=\" | grep sseof | cut -d \"=\" -f 2`\n  if [[ \"$sseof\" == \"\" || \"$sseof\" == \"n\" ]]; then\n      sseof1=\"\"\n    else\n      if [[ \"$ssbof\" == \"\" || \"$ssbof\" == \"n\" ]]; then\n        sseof1=\"-sseof $sseof -accurate_seek\"\n      else\n        sseof1=\"\"\n      fi\n  fi\n\n  if [ \"$ssbof1\" == \"\" ]; then\n    if [ \"$sseof1\" == \"\" ]; then\n      ssof=\"\"\n    else\n      ssof=\"$sseof1\"\n    fi\n  else\n    ssof=\"$ssbof1\"\n  fi\n\n# Schwarze Balken entfernen und delogo\n  if [[ \"$corp0\" == \"0\" && \"$logo0\" == \"0\" ]]; then\n    ext1=\"\"\n    ext2=\"\"\n    elif [[ \"$corp0\" == \"1\" && \"$logo0\" == \"0\" ]]; then\n    ext1=\"-filter:v:0 $corp1=$corpa:$corpb:$corpx:$corpy\"\n    ext2=\"-filter:v:0 $corp1=$corpa:$corpb:$corpx:$corpy\"\n    corp2=\"$corp1=$corpa:$corpb:$corpx:$corpy\"\n    elif [[ \"$corp0\" == \"0\" && \"$logo0\" == \"1\" ]]; then\n    ext1=\"\"\n    ext2=\"-filter:v:0 $logo1=x=$logox:y=$logoy:w=$logow:h=$logoh:show=0\"\n    logo2=\"$logo1=x=$logox:y=$logoy:w=$logow:h=$logoh\"\n    elif [[ \"$corp0\" == \"1\" && \"$logo0\" == \"1\" ]]; then\n    ext1=\"-filter:v:0 $corp1=$corpa:$corpb:$corpx:$corpy\"\n    ext2=\"-filter:v:0 $corp1=$corpa:$corpb:$corpx:$corpy,$logo1=x=$logox:y=$logoy:w=$logow:h=$logoh:show=0\"\n    corp2=\"$corp1=$corpa:$corpb:$corpx:$corpy\"\n    logo2=\"$logo1=x=$logox:y=$logoy:w=$logow:h=$logoh\"\n  fi\n\n# Zeitweises delogo wird hinten angef\u00fcgt\n  fbeon=`cat $input | grep \"=\" | grep fbeon | cut -d \"=\" -f 2`\n  fbet0=`cat $input | grep \"=\" | grep fbet0 | cut -d \"=\" -f 2`\n  fbet1=`cat $input | grep \"=\" | grep fbet1 | cut -d \"=\" -f 2`\n  if [ \"$fbeon\" == \"1\" ]; then\n    fbet2=\"enable='between(t,$fbet0,$fbet1)'\"\n    elif [ \"$fbeon\" == \"0\" ]; then\n    fbet2=\"\"\n    else\n    fbet2=\"\"\n  fi\n\n  if [[ \"$fbeon\" == \"\" || \"$fbeon\" == \"n\" || \"$fbeon\" == \"0\" ]]; then\n    ext3=$ext2\n    else\n      if [[ \"$fbeon\" == \"1\" && \"$logo0\" == \"1\" ]]; then\n        ext3=$ext2:$fbet2\n      else\n        ext3=$ext2\n      fi\n  fi\n\n#--- Muxing ---\nformat=`cat $input | grep \"=\" | grep format | cut -d \"=\" -f 2`\n\n  if [ \"$format\" == \"matroska\" ]; then\n    endung=mkv\n    elif [ \"$format\" == \"mp4\" ]; then\n    endung=mp4\n    elif [ \"$format\" == \"webm\" ]; then\n    endung=webm\n    elif [ \"$format\" == \"matroska.webm\" ]; then\n    endung=matroska.webm\n    else\n    exit 7\n  fi\n\n# \u00dcberpr\u00fcfung\n  if [ \"$profile\" == \"\" ]; then\n    exit 8\n    elif [ \"$preset1\" == \"\" ]; then\n    exit 9\n    elif [ \"$preset2\" == \"\" ]; then\n    exit 10\n    elif [ \"$audencoder\" == \"\" ]; then\n    exit 11\n    elif [ \"$sub\" == \"\" ]; then\n    exit 12\n    elif [ \"$format\" == \"\" ]; then\n    exit 13\n    elif [ \"$tracks\" == \"\" ]; then\n    exit 14\n  fi\n\n  if [[ \"$avbit\" == \"j\" || \"$avbit\" == \"y\" ]]; then\n    echo \"\"\n    elif [ \"$kbit\" == \"\" ]; then\n    exit 15\n    elif [ \"$kmax\" == \"\" ]; then\n    exit 16\n  fi\n\n# Soll fortgefahren werden?\n  ok=`cat $input | grep \"=\" | grep ok | cut -d \"=\" -f 2`\n\n  if [[ \"$ok\" == \"j\" || \"$ok\" == \"y\" ]]; then\n    echo \"\"\n    elif [ \"$ok\" == \"n\" ]; then\n    exit 17\n    else\n    exit 18\n  fi\n\n\n# Eigentliche Umstellung der Dateien\nfor file in *{.avi,.divx,.flv,.m2t,.mkv,.mp4,.mpg,.pva,.ts,.vob,.webm,.wmv} ; do\n\n    FILENAME=$(basename \"$file\")\n    NAME=`echo \"${FILENAME%.*}\"`\n    file1=`echo $file | grep -v \"^*\"`\n    SIZE=`ls -l \"$file\" | cut -d \" \" -f5`\n    DATE=`date '+%Y-%m-%d %H:%M:%S'`\n    ENCODER=`ffmpeg -version | grep -n ffmpeg | grep 1: | cut -d : -f 2 | cut -d \" \" -f 1-3`\n\n  if [[ \"$avbit\" == \"j\" || \"$avbit\" == \"y\" ]]; then\n    # Berechnung der durchschnittlichen und maximalen Videobitrate\n    brate=`\/usr\/bin\/mediainfo --Inform=\"Video;%BitRate%\" \"$DIRA\"\/\"$file1\"`\n    # Bei automatischer Bitrate, wieviel Prozent weniger\n    probit=`cat $input | grep \"=\" | grep probit | cut -d \"=\" -f 2`\n    rbit=`expr $brate \/ 1000`\n    rbit1=`expr $rbit \\* $probit`\n    rbit2=`expr $rbit1 \/ 1000`\n    bit=`expr $rbit - $rbit2`\n    max=`expr $bit \\* $maxmal`\n    kbit=\"$bit\"k\n    kmax=\"$max\"k\n    elif [ \"$avbit\" == \"n\" ]; then\n    echo \"\"\n    else\n    exit 1\n  fi\n\n ##1 Pass\npv -pteracb -s $SIZE \"$DIRA\"\/\"$file1\" | \/usr\/bin\/ffmpeg $cpu1 $hwaccel -y $ssbof1 $sseof1 $erw0 -i pipe:0 -max_muxing_queue_size 99999 -dn $ext1 $audiomap -preset $preset1 $encoder -x265-params \"profile=$profile:$erw265\" $erw1 -b:v $kbit -minrate $min -maxrate $kmax -bufsize 256M $fps1 -x265-params pass=1:stats=\"$DIRB\"\/\"$NAME\".log -an -sn -f $format $erw2 \/dev\/null\n\n ##2 Pass\npv -pteracb -s $SIZE \"$DIRA\"\/\"$file1\" | \/usr\/bin\/ffmpeg $cpu1 $hwaccel -y $ssbof1 $sseof1 $erw0 -i pipe:0 -max_muxing_queue_size 99999 $ext3 $audiomap $disp -preset $preset2 $encoder -x265-params \"profile=$profile:$erw265\" $erw1 -b:v $kbit -minrate $min -maxrate $kmax -bufsize 256M $fps1 -x265-params pass=2:stats=\"$DIRB\"\/\"$NAME\".log $aencoder -vbr 3 -map_chapters 0 -map_metadata 0 -metadata:s:v language=\"\" -metadata:s:v title=\"\" $lnga -metadata title=\"$NAME\" -metadata encoder=\"$ENCODER\" -metadata bitrate=\"$kbit\" -metadata creation_time=\"$DATE\" $erw2 $sub -f $format \"$DIRB\"\/\"$NAME\"-bearbeitung.$endung\n\n\n  if [ $? -eq 0 ]; then\n   if [ -f \"$DIRA\"\/\"$file\" ]\n     then\n      rm \"$DIRB\"\/\"$NAME\".log\n      rm \"$DIRB\"\/\"$NAME\".log.cutree\n      mv \"$DIRB\"\/\"$NAME\"-bearbeitung.$endung \"$DIRD\"\/\"$NAME\"-fertig.$endung\n      mv \"$DIRA\"\/\"$file\" \"$DIRC\"\n    fi\n    else\n     echo -e \"\\e[5;93mEs gab Probleme bei der Umstellung der Datei \\e[25;36m'$NAME'\\e[5;93m!!!\\033[00m\"\n  fi\n\ndone\nexit 0\n<\/pre>\n\n\n\n<p class=\"has-text-align-center\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">&#8212;&#8212;&#8212;-<\/mark><\/strong><\/p>\n\n\n\n<p>Dazu geh\u00f6rt noch eine zweit Datei, input.txt, in der die Optionen f\u00fcr die Umstellung angegeben werden. (Siehe &#8222;DIRE&#8220; im Skript.)<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Presents f\u00fcr die Umstellung (1 Pass):<br>#  ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo<br>present1=veryfast<br><br># Presents f\u00fcr die Umstellung (2 Pass):<br>#  ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo<br>present2=veryfast<br><br># \"h265\" oder \"copy\" anwenden? Den Videostream umstellen oder kopieren?<br>videncoder=h265<br><br># Automatische durchschnittliche Videobitrate?<br>#  ( y\/j = ja | n = nein )<br>avbit=n<br><br># Bei automatischer Bitrate, wie viele Prozent weniger?<br>#  ( 0,1% = 1 | 1% = 10 | 10% = 100 )<br>probit=0<br><br># Durchschnittliche Videobitrate, manuelle Eingabe. Nur wenn automatische durchschnittliche Videobitrate auf \"n\" steht.<br>#  ( 1 - 1k | 1000 - 1000k )<br>videobit=3500<br><br># Maximale Videobitrate<br>#  (Das wie Vielfache der durchschnittlichen Videobitrate?)<br>maxmal=6<br><br># CRF, (Constant Rate Factor) Bereich der Quantisierungsskala<br>#  0 = beste Qualit\u00e4t, 51 = schlechteste Qualit\u00e4t (18 = mein Standard)<br>crf=18<br><br># Framerate des fertiggestellten Videos.<br>#  ('0' f\u00fcr FPS des Videos \u00fcbernehmen.)<br>fps=0<br><br># Wie viele Audiospuren? (Wichtig, nie mehr angeben als die Quelle hat!)<br>#  (Maximal vier Audiospuren.)<br>tracks=1<br><br># Welche Audiospur soll benutzt werden?<br>#  (Und wie angeordnet?)<br>auds1=1<br>auds2=2<br>auds3=3<br>auds4=4<br><br># Welcher Audiospur hat welche Audiosprache?<br>#  (ISO 639-2 Language Code List)<br>language1=ger<br>language2=eng<br>language3=ger<br>language4=Kommentar<br><br># Encoder f\u00fcr die Audioumstellung: aac, libfdk_aac, ac3, copy, flac, mp2, libmp3lame, vorbis, wmav2, ...<br>#  Welche Encoder werden unterst\u00fctzt: ffmpeg -encoders<br>audencoder=copy<br><br># Bitrate f\u00fcr Audio.<br>#  ( 1 - 1k | 1000 - 1000k )<br>audiobit=0<br><br># Soll das Videos beschnitten werden? \"##:##:##.###, hh:mm:ss.ms\"<br>#  Am Anfang des Videos<br>ssbof=n<br>#  Angaben vom Ende des Videos aus gesehen<br>sseof=n<br><br># Zeitweise Anwendung von delogo. Angabe in Sekunden. (logo0 muss auf 1 daf\u00fcr stehen)<br>#  (\"1\" = ja, \"0\" oder \"n\" = nein)<br>fbeon=0<br># Von<br>fbet0=0<br>#Bis \/ Wie lange anwenden<br>fbet1=0<br><br># Soll vom Video die R\u00e4nder entfernt werden (0 nein, 1 ja)?<br>corp0=0<br>#Breite des Videos?<br>corpa=0<br>#H\u00f6he des Videos?<br>corpb=0<br>#Ab Breite?<br>corpx=0<br>#Ab H\u00f6he?<br>corpy=0<br><br># Soll ein Logo entfernt werden (0 nein, 1 ja)?<br>logo0=0<br>#Ab Breite?<br>logox=0<br>#Ab H\u00f6he?<br>logoy=0<br>#Breite des Logos?<br>logow=0<br>#H\u00f6he des Logos?<br>logoh=0<br><br># 0 kein Untertitel, 1 Kopiere Untertitel (Wichtig, auf 0 stellen wenn keiner vorhanden!)<br>sub1=0<br><br># Muxer: matroska, matroska.webm, mp4, webm<br>format=matroska<br><br># Sind die Einstellungen richtig, soll fortgefahren werden (\"n\"=nein, \"j\/y\"=ja)?<br>ok=y<br><\/pre>\n\n\n\n<p class=\"has-text-align-center\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">&#8212;&#8212;&#8212;-<\/mark><\/strong><\/p>\n\n\n\n<p>Leider ist das Changelog nicht ganz vollst\u00e4ndig da eine Datei wo die \u00c4nderungen vermerk waren versehentlich gel\u00f6scht wurde.<br><br>(Version 1.0 wird erst erreicht wenn es auf HW-Coding einrichte und getestet wurde. Da aber keine entsprechende Graka vorhanden ist wird dies noch etwas dauern.)<br><br>Changelog (Wieder aufgenommen am 21.07.2024):<br>Beta-0.9.5-8 (20240925,2105):<br>Im Dateinamen k\u00f6nnen jetzt auch Punkte verwendet werden.<br><br>Beta-0.9.5-7 (20240731,2116):<br>Variable f\u00fcr den Video-Encoder \u00fcber die input.txt eingef\u00fcgt f\u00fcr &#8222;copy&#8220; und &#8222;h265&#8220;.<br><br>Beta-0.9.5-6 (20240721,0740):<br>Variable f\u00fcr die Abfrage der CRF-Einstellung \u00fcber die input.txt eingef\u00fcgt.<br>Skript zur \u00dcberpr\u00fcfung ob &#8222;ffmpeg&#8220; schon l\u00e4uft gel\u00f6scht da diese Abfrage auch im Umstellungsskript vorhanden ist.<br><br>Changelog: (Bis 18.01.2020)<br>beta-0.8.8 ffmpeg Einstellungen in eine Variable gesetzt. \u00c4nderung dass erst die fertig umgestellte Datei verschoben wird, danach erst die Quelldatei.<br><br>beta-0.8.7 Wenn kein Untertitel ausgew\u00e4hlt wurde wird er auch nicht mehr gemapt.<br><br>beta-0.8.6 time Befehl entfernt. (L\u00e4uft \u00fcber vorgeschaltetes Skript.)<br><br>beta-0.8.5 max_muxing_queue_size 9999 in 2.Pass hinzugef\u00fcgt.<br><br>beta-0.8.4 Fehlende &#8220; hinzugef\u00fcgt.<br><br>beta-0.8.3 Mit pv Statuszeile f\u00fcr 1.Pass &amp; 2.Pass hinzugef\u00fcgt.<br><br>beta-0.8.2 time Befehl angepasst, time vor &#8222;for file do \u2026&#8220; wieder entfernt.<br><br>beta-0.8.1 time vor &#8222;for file do \u2026&#8220; und vor 1.Pass &amp; 2.Pass hinzugef\u00fcgt.<br><br>beta-0.8.0 Einige Texte angepasst, M\u00f6glichkeiten des HW-Encoding hinzugef\u00fcgt.<br><br>beta-0.7.5 Subtitle Bearbeitung in 1.Pass deaktiviert.<br><br>beta-0.7.4 Bei delogo falsche Textzuordnung verbessert, delogo nur noch im 2.Pass, auskommentierten Text verschoben.<br><br>beta-0.7.3 Schreibfehler behoben.<br><br>beta-0.7.2 delogo &amp; corp variable ge\u00e4ndert.<br><br>beta-0.7.1 hwaccel erweitert.<br><br>beta-0.7.0 delogo hinzugef\u00fcgt.<br><br>beta-0.6.2 Teilweise auskommentierte Zeilen entfernt.<br><br>beta-0.6.1 Fehler in corp variable entfernt.<br><br>beta-0.6.0 R\u00e4nder entfernen (corp) hinzugef\u00fcgt.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">&#8212;&#8212;&#8212;-<\/mark><\/strong><\/p>\n\n\n\n<p>Hinzu kommt noch ein Skript was das ganze startet. Es schaut nach wie viele Dateien im Verzeichnis f\u00fcr die Umstellung vorhanden sind. Sind keine vorhanden wird auch keine Umstellung gestartet. Und es wird nach der Umstellung angezeigt wie lange es gedauert hat.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#\/bin\/sh\n\nCOUNT=`ls ~\/Bearbeitung\/Videos\/1-Umstellung\/*{.avi,.divx,.flv,.m2t,.mkv,.mp4,.mpg,.pva,.ts,.vob,.webm,.wmv} 2&gt; \/dev\/null | wc -l`\n\n  if [ \"$COUNT\" -ge \"1\" ]; then\n    export TIME=\"\\tLaufzeit: %E | CPU: %P | Speicher: %K | HDD: %O R\/%I W\" 2&gt; \/dev\/null\n    \/usr\/bin\/time bash ~\/bin\/h265_umstellung.sh\n  else\n#    echo \"Keine Datei im Verzeichnis.\"\n     exit\n  fi\n\nexit\n<\/pre>\n\n\n\n<p class=\"has-text-align-center\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">&#8212;&#8212;&#8212;-<\/mark><a href=\"https:\/\/terraner.zapto.org\/wp-content\/uploads\/Installation_h265_umstellung-Deb12.tar.gz\" data-type=\"attachment\" data-id=\"1185\"><br><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">Hier die Dateien zum Downloaden mit einem Skript zur Installation auf Debian 12.<\/mark><\/em><\/strong><\/a><br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich stelle Videos auf h.265 um. Dazu habe ich mit meinem Bruder mir eine kleine Hilfe gebaut. (Ich nutze dazu Debian 12 mit dem HEVC encoder version 3.5 und ffmpeg version 6.0.1)<\/p>\n","protected":false},"author":1,"featured_media":952,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[25],"class_list":["post-1176","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux","tag-linux"],"_links":{"self":[{"href":"https:\/\/terraner.zapto.org\/index.php\/wp-json\/wp\/v2\/posts\/1176","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/terraner.zapto.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/terraner.zapto.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/terraner.zapto.org\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/terraner.zapto.org\/index.php\/wp-json\/wp\/v2\/comments?post=1176"}],"version-history":[{"count":17,"href":"https:\/\/terraner.zapto.org\/index.php\/wp-json\/wp\/v2\/posts\/1176\/revisions"}],"predecessor-version":[{"id":1202,"href":"https:\/\/terraner.zapto.org\/index.php\/wp-json\/wp\/v2\/posts\/1176\/revisions\/1202"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/terraner.zapto.org\/index.php\/wp-json\/wp\/v2\/media\/952"}],"wp:attachment":[{"href":"https:\/\/terraner.zapto.org\/index.php\/wp-json\/wp\/v2\/media?parent=1176"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/terraner.zapto.org\/index.php\/wp-json\/wp\/v2\/categories?post=1176"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/terraner.zapto.org\/index.php\/wp-json\/wp\/v2\/tags?post=1176"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}