mirror of
https://github.com/beetbox/beets.git
synced 2026-02-18 13:25:06 +01:00
convert: Simplify format configuration.
We don't have to specify the extension. By default it is the same as the format name.
This commit is contained in:
parent
c2822a5b90
commit
29e4fde571
3 changed files with 40 additions and 56 deletions
|
|
@ -25,6 +25,7 @@ import pipes
|
|||
from beets import ui, util, plugins, config
|
||||
from beets.plugins import BeetsPlugin
|
||||
from beetsplug.embedart import embed_item
|
||||
from beets.util.confit import ConfigTypeError
|
||||
|
||||
log = logging.getLogger('beets')
|
||||
_fs_lock = threading.Lock()
|
||||
|
|
@ -51,32 +52,33 @@ def get_format(format=None):
|
|||
if not format:
|
||||
format = config['convert']['format'].get(unicode).lower()
|
||||
format = ALIASES.get(format, format)
|
||||
# TODO extension may default to format so this doesn't have to be a
|
||||
# dictionary
|
||||
format_info = config['convert']['formats'][format].get(dict)
|
||||
|
||||
# Convenience and backwards-compatibility shortcuts.
|
||||
keys = config['convert'].keys()
|
||||
if 'command' in keys:
|
||||
format_info['command'] = config['convert']['command'].get(unicode)
|
||||
elif 'opts' in keys:
|
||||
# Undocumented option for backwards compatibility with < 1.3.1.
|
||||
format_info['command'] = u'ffmpeg -i $source -y {0} $dest'.format(
|
||||
config['convert']['opts'].get(unicode)
|
||||
)
|
||||
if 'extension' in keys:
|
||||
format_info['extension'] = config['convert']['extension'].get(unicode)
|
||||
|
||||
try:
|
||||
return (
|
||||
format_info['command'].encode('utf8'),
|
||||
format_info['extension'].encode('utf8'),
|
||||
)
|
||||
format_info = config['convert']['formats'][format].get(dict)
|
||||
command = format_info['command']
|
||||
extension = format_info['extension']
|
||||
except KeyError:
|
||||
raise ui.UserError(
|
||||
u'convert: format {0} needs "command" and "extension" fields'
|
||||
.format(format)
|
||||
)
|
||||
except ConfigTypeError:
|
||||
command = config['convert']['formats'][format].get(str)
|
||||
extension = format
|
||||
|
||||
# Convenience and backwards-compatibility shortcuts.
|
||||
keys = config['convert'].keys()
|
||||
if 'command' in keys:
|
||||
command = config['convert']['command'].get(unicode)
|
||||
elif 'opts' in keys:
|
||||
# Undocumented option for backwards compatibility with < 1.3.1.
|
||||
command = u'ffmpeg -i $source -y {0} $dest'.format(
|
||||
config['convert']['opts'].get(unicode)
|
||||
)
|
||||
if 'extension' in keys:
|
||||
extension = config['convert']['extension'].get(unicode)
|
||||
|
||||
return (command.encode('utf8'), extension.encode('utf8'))
|
||||
|
||||
|
||||
def encode(command, source, dest):
|
||||
|
|
@ -263,29 +265,14 @@ class ConvertPlugin(BeetsPlugin):
|
|||
u'command': u'ffmpeg -i $source -y -vn -acodec alac $dest',
|
||||
u'extension': u'm4a',
|
||||
},
|
||||
u'flac': {
|
||||
u'command': u'ffmpeg -i $source -y -vn -acodec flac $dest',
|
||||
u'extension': u'flac',
|
||||
},
|
||||
u'mp3': {
|
||||
u'command': u'ffmpeg -i $source -y -vn -aq 2 $dest',
|
||||
u'extension': u'mp3',
|
||||
},
|
||||
u'opus': {
|
||||
u'command': u'ffmpeg -i $source -y -vn -acodec libopus '
|
||||
u'-ab 96k $dest',
|
||||
u'extension': u'opus',
|
||||
},
|
||||
u'ogg': {
|
||||
u'command': u'ffmpeg -i $source -y -vn -acodec libvorbis '
|
||||
u'-aq 2 $dest',
|
||||
u'extension': u'ogg',
|
||||
},
|
||||
u'windows media': {
|
||||
u'command': u'ffmpeg -i $source -y -vn -acodec wmav2 '
|
||||
u'-vn $dest',
|
||||
u'extension': u'wma',
|
||||
},
|
||||
u'flac': u'ffmpeg -i $source -y -vn -acodec flac $dest',
|
||||
u'mp3': u'ffmpeg -i $source -y -vn -aq 2 $dest',
|
||||
u'opus':
|
||||
u'ffmpeg -i $source -y -vn -acodec libopus -ab 96k $dest',
|
||||
u'ogg':
|
||||
u'ffmpeg -i $source -y -vn -acodec libvorbis -aq 2 $dest',
|
||||
u'wma':
|
||||
u'ffmpeg -i $source -y -vn -acodec wmav2 -vn $dest',
|
||||
},
|
||||
u'max_bitrate': 500,
|
||||
u'auto': False,
|
||||
|
|
|
|||
|
|
@ -89,19 +89,19 @@ and select a command with the ``--format`` command-line option or the
|
|||
speex:
|
||||
command: ffmpeg -i $source -y -acodec speex $dest
|
||||
extension: spx
|
||||
wav:
|
||||
command: ffmpeg -i $source -y -acodec pcm_s16le $dest
|
||||
extension: wav
|
||||
wav: ffmpeg -i $source -y -acodec pcm_s16le $dest
|
||||
|
||||
In this example ``beet convert`` will use the *speex* command by
|
||||
default. To convert the audio to `wav`, run ``beet convert -f wav``.
|
||||
This will also use the format key (`wav`) as the file extension.
|
||||
|
||||
Each entry in the ``formats`` map consists of a key (the name of the
|
||||
format) as well as the command and the extension. ``extension`` is the
|
||||
filename extension to be used for newly transcoded files.
|
||||
``command`` is the command-line to use to transcode audio. The tokens
|
||||
``$source`` and ``$dest`` in the command are replaced with the paths to
|
||||
the existing and new file.
|
||||
format) as well as the command and the possibly the file extension.
|
||||
``extension`` is the filename extension to be used for newly transcoded
|
||||
files. If only the command is given as a string, the file extension
|
||||
defaults to the format’s name. ``command`` is the command-line to use
|
||||
to transcode audio. The tokens ``$source`` and ``$dest`` in the command
|
||||
are replaced with the paths to the existing and new file.
|
||||
|
||||
The plugin in comes with default commands for the most common audio
|
||||
formats: `mp3`, `alac`, `flac`, `aac`, `opus`, `ogg`, `wmv`. For
|
||||
|
|
|
|||
|
|
@ -77,13 +77,10 @@ class ConvertCliTest(unittest.TestCase, TestHelper):
|
|||
'paths': {'default': 'converted'},
|
||||
'format': 'mp3',
|
||||
'formats': {
|
||||
'mp3': {
|
||||
'command': 'cp $source $dest',
|
||||
'extension': 'mp3',
|
||||
},
|
||||
'mp3': 'cp $source $dest',
|
||||
'opus': {
|
||||
'command': 'cp $source $dest',
|
||||
'extension': 'opus',
|
||||
'extension': 'ops',
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -110,7 +107,7 @@ class ConvertCliTest(unittest.TestCase, TestHelper):
|
|||
def test_format_option(self):
|
||||
with control_stdin('y'):
|
||||
self.run_command('convert', '--format', 'opus', self.item.path)
|
||||
converted = os.path.join(self.convert_dest, 'converted.opus')
|
||||
converted = os.path.join(self.convert_dest, 'converted.ops')
|
||||
self.assertTrue(os.path.isfile(converted))
|
||||
|
||||
def test_embed_album_art(self):
|
||||
|
|
|
|||
Loading…
Reference in a new issue