Audiobook Encoder (mp3 -> m4b)

I am developing an audiobook encoder to convert mp3 files into m4b files since March 2013. I used Audiobook Builder in the past but the lack of batch export and some other missing features forced me to create my own. I’ m working with Python 2.7 and PySide. FFmpeg (libfdk) is used for exporting.┬á I siwtched to abbinder.

I need beta testers (OSX only). So if you’re interested get in touch with me on twitter or email.

Audiobook Encoder 0.7


  • convert multiple mp3 -> m4b
  • add embedded cover
  • edit metatags
  • simple Drag and Drop
  • quality presets
  • save author presets ( default export destintaion etc.)
  • auto add to iTunes
  • shutdown after export
  • utf-8 support

Roadmap for Version 1.0 and 1.+

  • OSX Binary
  • more metatags
  • play files within Audiobook Encoder
  • organize / reorder files within Audiobook Encoder
  • variable bitrate quality presets
  • simultan exporting
  • UI responce during export
  • more files formats (ogg, acc)
  • Windows / Linux support


Creative Commons License
Audiobook Encoder is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.


PySide in Maya 2014

You can now use PySide in Maya 2014 out of the box.

Here is some code.

from PySide import QtGui

# Create a simple dialog box
msgBox = QtGui.QMessageBox()
msgBox.setText("Hello Maya - using PySide version " + PySide.__version__)

Maya startup – userSetup.mel

I was searching a way to automatically load PyMel and other tools on Mayas startup.

All you have to do is adding a few lines to you userSetup.mel file.

To locate your userSetup file on computer use this mel command:

print `whatIs "userSetup.mel"`;

Use a texteditor and copy the following code:

# loads mentalray on startup
autoLoadPlugin("", "Mayatomr","Mayatomr");

# imports pymel
python("import pymel.core as pm");

# imports maya.cmds (python)
python("import maya.cmds as cmds");

Normal map scale script

I was annoyed about the complexity to scale up a normal map value. So I created a script which adds a slider to the bump2d node.

# this script creates an attribute inside the bump2d node to scale normal map values
# select all normal map file textures and run the script
import pymel.core as pm

normal_nodes = = True)

for each_normal_node in normal_nodes:
    bump_node = pm.listConnections(each_normal_node, type = "bump2d")
    pm.addAttr(bump_node[0], ln = "normalmapScale", at = "float", dv = 0, min = 0, max = 10 )

    for each_color in ["R", "G"]:    

        pm.setDrivenKeyframe("%s.colorGain.colorGain%s" % (each_normal_node, each_color), cd = "%s.normalmapScale" % bump_node[0], dv = 0, v = 1, itt = "linear", ott = "linear")
        pm.setDrivenKeyframe("%s.colorGain.colorGain%s" % (each_normal_node, each_color), cd = "%s.normalmapScale" % bump_node[0], dv = 10, v = 11, itt = "linear", ott = "linear")
        pm.setDrivenKeyframe("%s.colorOffset.colorOffset%s" % (each_normal_node, each_color), cd = "%s.normalmapScale" % bump_node[0], dv = 0, v = 0, itt = "linear", ott = "linear")
        pm.setDrivenKeyframe("%s.colorOffset.colorOffset%s" % (each_normal_node, each_color), cd = "%s.normalmapScale" % bump_node[0], dv = 10, v = -5, itt = "linear", ott = "linear")