Source code for eyed3.plugins.extract

import sys
import binascii
from pathlib import Path

import eyed3.id3
import eyed3.plugins
from eyed3.utils.log import getLogger

log = getLogger(__name__)


[docs]class ExtractPlugin(eyed3.plugins.LoaderPlugin): NAMES = ["extract"] SUMMARY = "Extract tags from audio files." def __init__(self, arg_parser): super().__init__(arg_parser, cache_files=True, track_images=False) self.arg_group.add_argument("-o", "--output-file", help="The the tag is written to this file in native format.") self.arg_group.add_argument("-H", "--hex", action="store_true", help="Output hexadecimal format.") self.arg_group.add_argument("--strip-padding", action="store_true", help="Exclude tag padding, if any.")
[docs] def handleFile(self, f, *args, **kwargs): super().handleFile(f) if self.audio_file is None or self.audio_file.tag is None: return tag = self.audio_file.tag if not isinstance(tag, eyed3.id3.Tag): print("Only ID3 tags can be extracted currently.", file=sys.stderr) return 1 with open(tag.file_info.name, "rb") as tag_file: if tag.version[0] != 1: # info.tag_size includes padding. tag_data = tag_file.read(tag.file_info.tag_size) if self.args.strip_padding and tag.file_info.tag_padding_size: # --strip-padding tag_data = tag_data[:-tag.file_info.tag_padding_size] else: # ID3 v1.x tag_data = tag_file.read()[-128:] if self.args.output_file: # --output-file if Path(tag.file_info.name).resolve() == Path(self.args.output_file).resolve(): print("Input file overwriting not allowed, choose a different -o/--output-file", file=sys.stderr) return 1 with open(self.args.output_file, "wb") as out_file: out_file.write(tag_data) else: if self.args.hex: # --hex tag_data = str(binascii.hexlify(tag_data), "ascii") print(tag_data)