{ "info": { "author": "Laurent Bachelier", "author_email": "laurent@bachelier.name", "bugtrack_url": null, "classifiers": [ "Environment :: Console", "License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)", "Operating System :: POSIX", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Topic :: Multimedia :: Sound/Audio :: Conversion" ], "description": "======\nbrutha\n======\n\nDescription\n-----------\n\n*brutha* is an answer to the utter failure of sound conversion tools.\n\nIt will flawlessly transcode lossless files or copy lossy files,\nto a provided directory, with a \"synchronization\" behavior.\n\nBy carefully keeping the files' timestamps, it also allows that destination\nto be easily rsynced elsewhere, and thus avoid any useless transfers.\n\nDue to the usage of formats with Ogg containers, no tags are lost in the process of converting FLAC to Ogg Vorbis.\n\nSince transcoding requires a lot of CPU time, it is useful to run\nas many jobs as possible in parallel. `brutha` will try to make use of\npowerful, time-tested tools (either `GNU make`, `GNU parallel`,\nor similar implementations) to do so.\nIt's not perfect but good enough while keeping it simple.\n\n\nTo our knowledge, no other solution can fully:\n\n* avoid encoding again files that were already processed at an earlier run\n* convert only lossless files (no lossy to lossy)\n* keep the directory structure\n* handle a huge number of files\n* handle parallel job execution (and not crash)\n* use the proper Ogg Vorbis settings (setting quality and not average bitrate)\n* guarantee usage of the highest quality resampling algorithms\n* save space for lossy files by using hardlinks or reflinks\n* not be an annoying GUI\n\nTo sum up, `brutha` is a music converter tailored to audiophiles,\nwho want to convert their huge collections to more portable destinations,\nwith the highest quality/size ratio in mind.\n\n`brutha` is very simple and rests on the shoulders on giants:\nFLAC, Ogg Vorbis, sox, Python, mutagen, GNU Make, GNU Parallel, Bash, etc.\n\n\nRequirements\n------------\n\nThe first one is space. Since you can store locally all the source files, we suppose you\nalso can store the smaller destination files locally. Alternatively,\nyou will be able to sync to a portable player, a remote filesystem (NFS, sshfs, etc.)\nwithout issues except lower performance.\n\nSoftware requirements\n~~~~~~~~~~~~~~~~~~~~~\n\n* Python 2 (2.6 or later)\n* python-argparse (or Python 2.7 or later)\n* `python-mutagen `_\n* `sox `_\n* for parallel runs, either `GNU make `_\n or `GNU parallel `_, or a similar implementation\n\nOptional :\n\n* `vorbisgain `_ for ``--gain``\n\n\nUsage\n-----\n\n::\n\n brutha [options] SOURCE DESTINATION\n\n``brutha -h`` provides help for all available options.\n\nYou can run ``python -m brutha`` to use it without installing.\n\nDefault values\n~~~~~~~~~~~~~~\n`brutha` tries to detect how many cores you have\n(run ``brutha -h`` to check the default for ``-j``).\nIt also tries to use a parallel method\n(``make`` or ``parallel`` instead of ``sh``) if available.\n\nBy default, it does not run or delete anything; when you are experienced\nwith its usage, you will likely call it with ``-x`` (execute) and ``-d`` (delete).\n\nExamples\n~~~~~~~~\n\nA typical use would be::\n\n brutha -d -x -q6 -R44100 -B16 ~/Music /mnt/portable_music_player/Music\n\nThis downsamples music to 16/44 as most portable players don't handle\n24/96 well (-R44100 -B16), encodes FLAC to Ogg at a reasonable quality (-q6),\ndeletes old unwanted files (-d), and executes the commands right away (-x).\n\nRecommendations\n~~~~~~~~~~~~~~~\nSince encoding eats a lot of CPU, you should start it at a low priority.\nThe simplest way is to run ``nice -n19 brutha`` instead of only ``brutha``.\n\n\nChanges\n-------\n\n+ 1.1.1\n\n - Fix some corner cases with directory walking.\n\n+ 1.1.0\n\n - Add sox option to guard against clipping.\n - Add options to create hardlinks or reflinks.\n - Make parallel the default if available.\n - Code and documentation improvements.\n - Support for newer parallel versions.\n\n+ 1.0.2\n\n - Code improvements.\n - Show defaults in command-line help.\n\n+ 1.0.1\n\n - Bugfixes.\n\n\n\nFuture\n------\n\n`brutha` is considered feature-complete.\nPython 3 support is waiting for mutagen.\n\nIf you want to help, here are some possibilities:\n\n* Support other formats (currently only FLAC to Ogg Vorbis, with Ogg Vorbis and MP3 as exact copies).\n* Make mutagen optional (only required for frequency / bit depth checks).\n* Port mutagen to Python 3\n* Support downmixing (5.1 to 2.0 for instance)\n\nContributions can be sent in the form of git patches, to laurent@bachelier.name.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://git.p.engu.in/laurentb/brutha/", "keywords": null, "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "brutha", "package_url": "https://pypi.org/project/brutha/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/brutha/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://git.p.engu.in/laurentb/brutha/" }, "release_url": "https://pypi.org/project/brutha/1.1.1/", "requires_dist": null, "requires_python": null, "summary": "Sync FLAC music files to Ogg Vorbis (or keep lossy as-is)", "version": "1.1.1" }, "last_serial": 2279170, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "474047cfa7bff15c0f814f1d885256a6", "sha256": "e0dd8a0fe04fe138ca33909f7af738bfe198a4b1553843a9411fe8b3a6215cb3" }, "downloads": -1, "filename": "brutha-1.0.0.tar.gz", "has_sig": false, "md5_digest": "474047cfa7bff15c0f814f1d885256a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8227, "upload_time": "2013-01-12T23:42:25", "url": "https://files.pythonhosted.org/packages/ec/9e/02eb402f60fa379481e76935034081695303d5c6cde69c71b755c62389f9/brutha-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "528bd1eef6a8152c496497ed2afa69a0", "sha256": "aa6b3aecb4cf59e535b719392cad9299ecc5cf7a5027f5f380cd0bbf16003af7" }, "downloads": -1, "filename": "brutha-1.0.1.tar.gz", "has_sig": false, "md5_digest": "528bd1eef6a8152c496497ed2afa69a0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8341, "upload_time": "2013-06-26T22:11:02", "url": "https://files.pythonhosted.org/packages/46/a6/75d05842afa27c5e4af615f4e0b23f8254d49ad3425a43d069ba1e1397a1/brutha-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "704fa20f275b6ab407866c816d0865fc", "sha256": "1ba6959747531984723b2feadecc02c6c54746c1f5facb4f2b9c62e609a668d2" }, "downloads": -1, "filename": "brutha-1.0.2.tar.gz", "has_sig": false, "md5_digest": "704fa20f275b6ab407866c816d0865fc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8459, "upload_time": "2014-08-24T13:50:26", "url": "https://files.pythonhosted.org/packages/78/65/f25b0d20763609b540eebea43c9efaf0def63958202f43b408b6c5089cef/brutha-1.0.2.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "483cc2d3ea2aa12bcb9df1fce17a9182", "sha256": "dc04956053d65c706ad71d7e9f4b635d94b9afa94ef32bcecac3ccfffcbe9d71" }, "downloads": -1, "filename": "brutha-1.1.0.tar.gz", "has_sig": false, "md5_digest": "483cc2d3ea2aa12bcb9df1fce17a9182", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8892, "upload_time": "2016-03-25T23:40:06", "url": "https://files.pythonhosted.org/packages/63/b6/17108f78ba0d7cf097480f0536bdc89375edd56947bce895e94002fd295e/brutha-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "4b25964d8e1b368d6f04facf471fca87", "sha256": "9a2daad8f27e251aed2ad71006ae1f537f81bfd59678966dbae7d97687d35512" }, "downloads": -1, "filename": "brutha-1.1.1.tar.gz", "has_sig": false, "md5_digest": "4b25964d8e1b368d6f04facf471fca87", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8957, "upload_time": "2016-08-12T23:19:47", "url": "https://files.pythonhosted.org/packages/28/a0/5e604f8ff19f4bfd0972c963e170f8690629733fa584f16e44cde38b5364/brutha-1.1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4b25964d8e1b368d6f04facf471fca87", "sha256": "9a2daad8f27e251aed2ad71006ae1f537f81bfd59678966dbae7d97687d35512" }, "downloads": -1, "filename": "brutha-1.1.1.tar.gz", "has_sig": false, "md5_digest": "4b25964d8e1b368d6f04facf471fca87", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8957, "upload_time": "2016-08-12T23:19:47", "url": "https://files.pythonhosted.org/packages/28/a0/5e604f8ff19f4bfd0972c963e170f8690629733fa584f16e44cde38b5364/brutha-1.1.1.tar.gz" } ] }