diff --git a/beetsplug/convert.py b/beetsplug/convert.py index 36cfd0ee9..2ce68b2cd 100644 --- a/beetsplug/convert.py +++ b/beetsplug/convert.py @@ -206,8 +206,15 @@ class ConvertPlugin(BeetsPlugin): source = decode_commandline_path(source) dest = decode_commandline_path(dest) + # Split the command using shell syntax. We need to pass the + # string through a `str` because, at least on some Python + # versions, shlex.split does not support bytes. + args = [ + a.encode('utf8', 'surrogateescape') + for a in shlex.split(command.decode('utf8', 'surrogateescape')) + ] + # Substitute $source and $dest in the argument list. - args = shlex.split(command) encode_cmd = [] for i, arg in enumerate(args): args[i] = Template(arg).safe_substitute({