Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Der Code-Schnippsel-Thread
TAL Offline
機関車

Beiträge: 6.359
Registriert seit: Jul 2008
Beitrag #161
RE: Der Code-Schnippsel-Thread
Halbwegs vernünftige Ausgabe von CPU und Speicherverbrauch (in %) für den aktuellen User.¹
Code:
top -n 1 -b -U $USER |tail -n+8 |awk '{cpu+=$9} {mem+=$10} END {print cpu "|" mem}'

¹: GNU-Features bei tail durch hint von gandro

(Dieser Beitrag wurde zuletzt bearbeitet: 29.05.2012 16:24 von TAL.)
29.05.2012 16:21
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
thosch97 Offline
All things have a right to grow

Beiträge: 9.820
Registriert seit: Feb 2010
Beitrag #162
RE: Der Code-Schnippsel-Thread
(29.05.2012 16:21)TAL schrieb:  Halbwegs vernünftige Ausgabe von CPU und Speicherverbrauch (in %) für den aktuellen User.¹
Code:
top -n 1 -b -U $USER |tail -n+8 |awk '{cpu+=$9} {mem+=$10} END {print cpu "|" mem}'

¹: GNU-Features bei tail durch hint von gandro

Code:
% top -n 1 -b -U $USER |tail -n+8 |awk '{cpu+=$9} {mem+=$10} END {print cpu "|" mem}'
    top: unknown argument 'X'
usage:    top -hv | -bcisSH -d delay -n iterations [-u user | -U user] -p pid [,pid ...]

|

PGP-Key E384 009D 3B54 DCD3 21BF 9532 95EE 94A4 3258 3DB1 | S/MIME-Key 0x1A33706DAD44DA
G d-@ s+:- a--- C+++ UB+L++ P--- L++@ E-@>++ W+ N o? K? w>++ !O !M !V PS+++ PE-- Y+>++ PGP++>+++ !t 5? X? !R tv b+++>++++ DI !D G>+ e>+++ h !r>++ !z
„Die Aachener gelten als Erfinder des 4. Hauptsatzes der Thermodynamik: ‚Thermo schreibt man zweimal.“‘
“Saying that Java is good because it works on all platforms is like saying oral sex is good because it works on all sexes.”
„Es gibt 10 Sorten von Leuten: Die einen verstehen das Binärsystem, die anderen nicht.“
„Manche Männer lieben Männer, Manche Frauen eben Frauen; Da gibt's nix zu bedauern und nichts zu staunen; Das ist genau so normal wie Kaugummi kauen; Doch die meisten werden sich das niemals trauen“
29.05.2012 16:32
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
friedrichheinze Offline
...und Kondensatoren.

Beiträge: 2.838
Registriert seit: Jul 2008
Beitrag #163
RE: Der Code-Schnippsel-Thread
Bisschen länger.

Synct die Dateien einer .m3u Playlist in einen Ordner. Konvertiert dabei alac files in mp3 mit brauchbarer Qualität. Behält die Ordnerhierarchie bei.
Wenn es jemand benutzen will: Es SYNCT die Playlist und den Ordner. Sprich, es löscht alles was da sonst noch im Zielordner und nicht in der m3u.
Legt einen Cache für checksums in ~/.pushm3ucache/checksums an, der Ordner sollte also existieren, sonst halt ändern.
Ist nützlich wenn man seinen bevorzugten Musikplayer irgendwie mounten kann und dann nen einfachen Sync-Mechanismus ohne nen ganzen Player will, so wie ich, weil beim Galaxy Nexus irgendwie jedes Programm das das theoretisch können sollte abschmiert.
Braucht audiotools (audiotools.sf.net). Code könnte crap sein, hab nicht so den Plan von Python, und womöglich kriegt man was besseres mit rsync hin.

Code:
#!/usr/bin/python

import sys
import os
import audiotools
import hashlib
import tempfile
import base64
import shutil
import string

sumsfile = "~/.pushm3ucache/checksums"

deviceFormats = ["mp3", "m4a"]
convertFormat = audiotools.MP3Audio
convertQuality = "extreme"

def pathize(path):
  return os.path.abspath(os.path.expanduser(path))

def parsem3u(filename):
  print "Reading m3u file..."
  files = []
  f = open(filename, 'r')
  for line in f:
    if (line[0] != '#'):
      path = pathize(os.path.join(os.path.dirname(filename), line.strip()))
      if (os.path.exists(path)):
        files.append(path)
      else:
        print("What the hell is '" + line + "' doing in your .m3u file? "
           + "I don't know what that is.")
  return files

def printAudiotoolsInfo():
  print "pushm3u using audiotools " + audiotools.VERSION
  print "supported types: "
  for k, v in audiotools.TYPE_MAP.iteritems():
    print k + " with supported compression modes " + str(v.COMPRESSION_MODES)

def getNewSums(files):
  print "Getting new checksums..."
  checksums = {}
  for file in files:
    md5 = hashlib.md5()
    with open(file, 'r') as f:
      for chunk in iter(lambda: f.read(128*md5.block_size), b''):
        md5.update(chunk)
    checksums[file] = md5.digest()
  return checksums

def getOldSums():
  checksums = {}
  key = ""
  if os.path.exists(sumsfile):
    f = open(sumsfile, 'r')
    for number, line in enumerate(f):
      if (number % 2 == 0):
        key = line.strip()
      else:
        checksums[key] = base64.b64decode(line.strip())
  return checksums

def writeSums(checksums):
  f = open(sumsfile, 'w')
  for k, v in checksums.iteritems():
    f.write(k + '\n' + base64.b64encode(v) + '\n')

def filterChanges(files, oldSums, newSums):
  newFiles = []
  for file in files:
    if file not in oldSums or oldSums[file] != newSums[file]:
      newFiles.append(file)
  return newFiles

def convert(filename, audio):
  print "Converting " + os.path.basename(filename) + "..."
  newFile = tempfile.NamedTemporaryFile().name
  audio.convert(newFile, convertFormat, convertQuality)
  newAudio = audiotools.open(newFile)
  newAudio.set_metadata(audio.get_metadata())
  return newFile
  
def getCopyables(files, audios):
  copyables = []
  for file, audio in zip(files, audios):
    if audio.NAME in deviceFormats:
      copyables.append(file)
    else:
      copyables.append(convert(file, audio))
  return copyables

def destMap(srcs, newSrcs, dest):
  if (len(srcs) > 1):
    prefix = os.path.commonprefix(srcs)
    print "stripping " + prefix + " from the paths."
  dsts = map(lambda x : os.path.join(dest, string.lstrip(newSrcs[x], prefix)), srcs)
  destMap = dict(zip(srcs, dsts))
  return destMap
  
def copyAll(origs, news, dests):
  print "Copying..."
  for orig, new in zip(origs, news):
    dest = dests[orig]
    dir = os.path.dirname(dest)
    if not os.path.exists(dir):
      os.makedirs(dir)
    shutil.copy(new, dest)

def getNewSrcs(files, audios):
  newSrcs = {}
  for filename, audio in zip(files, audios):
    if audio.NAME in deviceFormats:
      newSrcs[filename] = filename
    else:
      base, ext = os.path.splitext(filename)
      newFile = base + '.' + convertFormat.SUFFIX
      newSrcs[filename] = newFile
  return newSrcs
  
def delIfEmpty(dirname):
  if os.listdir(dirname) == []:
    print "removing empty directory " + path
    os.removedir(dirname)

def visitCrap(dests, dirname, names):
  for name in names:
    path = os.path.join(dirname, name)
    if os.path.isfile(path):
      if path not in dests.values():
        print "removing file " + path
        os.remove(path)
    elif os.path.isdir(path):
      delIfEmpty(path)
  delIfEmpty(dirname)

def deleteCrap(dest, dests):
  os.path.walk(dest, visitCrap, dests)

def pushm3u(src, dest):
  printAudiotoolsInfo()
  srcs = parsem3u(src)
  checksums = getNewSums(srcs)
  newSrcs = getNewSrcs(srcs, audiotools.open_files(srcs, False))
  copyFiles = filterChanges(srcs, getOldSums(), checksums)
  copyables = getCopyables(copyFiles, audiotools.open_files(copyFiles, False))
  dests = destMap(srcs, newSrcs, dest)
  copyAll(copyFiles, copyables, dests)
  writeSums(checksums)
  deleteCrap(dest, dests)
  
# MAIN #
if (len(sys.argv) < 3):
  print "usage: pushm3u source.m3u destination"
else:
  src = pathize(sys.argv[1])
  dest = pathize(sys.argv[2])
  sumsfile = pathize(sumsfile)
  pushm3u(src, dest)
05.06.2012 22:13
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
LukeGee Offline
Misanthrop

Beiträge: 2.021
Registriert seit: Dec 2009
Beitrag #164
RE: Der Code-Schnippsel-Thread
Kein Code, aber cool und kannte ich nicht:

Code:
root@collaps:~# export TMOUT=2
root@collaps:~# timed out waiting for input: auto-logout

Und zack, ist die Shell weg.
(Dieser Beitrag wurde zuletzt bearbeitet: 05.07.2012 16:00 von LukeGee.)
05.07.2012 16:00
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
mrshadowtux
Unregistered

 
Beitrag #165
RE: Der Code-Schnippsel-Thread
Das ist mal ne coole Sache,danke für den Tipp :)
05.07.2012 16:08
Diese Nachricht in einer Antwort zitieren
niwax Offline
Hardcore-Coder

Beiträge: 3.822
Registriert seit: Dec 2009
Beitrag #166
RE: Der Code-Schnippsel-Thread
Code:
@echo off
:a
IF X%1==X GOTO e

ffmpeg.exe -i %1 -vcodec libx264 -acodec libmp3lame -ab 96k %1.mp4

shift
GOTO a
:e

Kleine Batch-Datei, auf die man Videodateien zieht, die dann in h264/mp3 bei kleiner Bitrate umgewandelt werden. Sehr praktisch, da sich langsam meine 2TB-Platte für Filme füllt und scheinbar wenige der Leute, die mir Filme geben, einen Sinn für Bitraten haben.


30.07.2012 23:06
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
julben Offline
Erfahrener Benutzer

Beiträge: 2.324
Registriert seit: Jul 2008
Beitrag #167
RE: Der Code-Schnippsel-Thread
Doofe Frage: Warum MP3? Was H.264 decodieren kann, sollte doch auch AAC können und da kann man selbst mit dem schrotten FAAC-Encoder nochmal ein bisschen etwas an Bitrate rausholen.

Nachtrag: http://encodingwissen.de/handarbeit/audio/ffmpeg beschreibt, wie man auch z.B. Nero AAC nutzen kann:
Code:
ffmpeg -i "D:\Quelle-5.1ch.dts" -vol 509 -acodec pcm_f32le -f wav - | neroaacenc -if - -of "D:\Ziel-5.1ch.m4a" -ignorelength -q 0.3

Nachtrag 2: Okay, das war etwas kurz gedacht, da kommt dann nur die Tonspur raus. Müsste man dann eben nachher nochmal mit dem Video mergen.
(Dieser Beitrag wurde zuletzt bearbeitet: 30.07.2012 23:13 von julben.)
30.07.2012 23:10
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
PacMani
Unregistered

 
Beitrag #168
RE: Der Code-Schnippsel-Thread
Überprüfen und Wiederherstellen eines D3D9-LostDevices in SlimDX. Bevor man das alles überhaupt macht, sollte man erstmal gucken, ob das Anwendungsfenster überhaupt noch aktiv ist, sonst kann man Vollbildanwendungen nie verlassen, da die gleich beim Verlassen des Fensters neu erstellte Direct3D9-Geräteschnittstelle sofort den Vollbildmodus wieder aktiviert...
Code:
/// <summary>
        /// Gibt zurück, ob die Geräteschnittstelle nicht mehr verfügbar ist.
        /// Falls sie verloren gegangen ist, wird versucht, sie wiederherzustellen; dies kann mit
        /// dem übergebenen Flag verhindert werden.
        /// </summary>
        /// <param name="resetIfNeeded">Gibt an, ob die Geräteschnittstelle neu erstellt werden
        ///     soll wenn nötig.</param>
        /// <returns>True, wenn die Geräteschnittstelle nicht mehr verfügbar ist.</returns>
        /// <seealso cref="http://msdn.microsoft.com/en-us/library/windows/desktop/bb174425%28v=vs.85%29.aspx"/>
        private bool IsDeviceLost(bool resetIfNeeded)
        {
            bool deviceLost = false;

            // Prüfen, ob DeviceLost festgestellt wurde
            Result result = _device.TestCooperativeLevel();
            if (result == ResultCode.DeviceLost)
            {
                Log.Information("Video: Device lost and cannot be reset yet.");
                // Das Gerät wurde verloren und kann momentan nicht zurückgesetzt werden
                deviceLost = true;
            }
            else if (result == ResultCode.DeviceNotReset)
            {
                // Das Gerät ist wieder verfügbar und wurde noch nicht zurückgesetzt
                deviceLost = true;
                if (resetIfNeeded)
                {
                    // Gerät zurücksetzen und prüfen, ob es wieder arbeitsfähig ist
                    Log.Information("Resetting lost device...");
                    _device.Reset(_presentParams);
                    deviceLost = IsDeviceLost(false);
                    if (deviceLost)
                    {
                        Log.Information("Video: Reset failed, device still lost.");
                    }
                    else
                    {
                        Log.Information("Video: Reset successful, device restored.");
                        // TODO: Texturen und States neu setzen, da diese bei Reset verloren gehen
                    }
                }
            }

            return deviceLost;
        }
Warum gehen im Code-Tag eigentlich Einrückungen "lost"?
04.08.2012 16:28
Diese Nachricht in einer Antwort zitieren
Blue Offline
Seit dem 17.10.2006 dabei!

Beiträge: 21.576
Registriert seit: Jul 2008
Beitrag #169
RE: Der Code-Schnippsel-Thread
@echo off
04.08.2012 20:15
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
PacMani
Unregistered

 
Beitrag #170
RE: Der Code-Schnippsel-Thread
ECHO EUDA
04.08.2012 21:41
Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste