I used eye3D from the command-line to fix a series of tags in a batch. Some of them were m4a with aac audio. It is far from obvious from eye3D's description that this kind of file is not supported. More importantly, eye3D does not simply fail to operate. Instead, the file is damaged so the contents cannot be played any more. This should never ever happen. I suggest displaying an error message instead.
$ eye3D -l debug --artist='Das Flug' --title='Alles musz in Flammen stehen (B-17 Edit)' 'Das Flug - Alles musz in Flammen stehen (B-17 Edit).m4a'
eyed3:DEBUG: command line args: Namespace(album=None, album_artist=None, artist='Das Flug', backup=False, bpm=None, comments=[], config=None, convert_version=None, debug_pdb=False, debug_profile=False, disc_num=None, disc_total=None, encoding_date=None, excludes=None, force_update=False, fs_encoding='utf-8', genre=None, images=[], list_plugins=False, log_level=[['debug']], lyrics=[], max_padding=True, no_color=False, no_config=False, non_std_genres=False, objects=[], orig_release_date=None, paths=['Das Flug - Alles musz in Flammen stehen (B-17 Edit).m4a'], play_count=None, plugin=<classic.ClassicPlugin object at 0x7fd65f68fcc0>, popularities=[], preserve_file_time=False, publisher=None, quiet=False, recording_date=None, release_date=None, release_year=None, remove_all=False, remove_all_comments=False, remove_all_images=False, remove_all_lyrics=False, remove_all_objects=False, remove_comment=[], remove_fids=[], remove_image=[], remove_lyrics=[], remove_object=[], remove_popularity=[], remove_v1=False, remove_v2=False, rename_pattern=None, simple_comment=None, tag_version=(3, None, None), tagging_date=None, text_encoding=None, text_frames=[], title='Alles musz in Flammen stehen (B-17 Edit)', track=None, track_offset=None, track_total=None, unique_file_ids=[], url_frames=[], user_text_frames=[], user_url_frames=[], verbose=False, write_images_dir=None, write_objects_dir=None)
eyed3:DEBUG: plugin is: <classic.ClassicPlugin object at 0x7fd65f68fcc0>
eyed3.core:DEBUG: Loading file: Das Flug - Alles musz in Flammen stehen (B-17 Edit).m4a
eyed3.core:DEBUG: File mime-type: audio/mpeg
eyed3.mp3:DEBUG: mp3 header search starting @ 0
eyed3.mp3.headers:DEBUG: invalid mpeg layer
eyed3.mp3.headers:DEBUG: invalid mpeg version
eyed3.mp3.headers:DEBUG: invalid mpeg layer
eyed3.mp3.headers:DEBUG: invalid mpeg version
eyed3.mp3.headers:DEBUG: invalid mpeg version
eyed3.mp3.headers:DEBUG: invalid mpeg bitrate
eyed3.mp3.headers:DEBUG: invalid mpeg bitrate
eyed3.mp3.headers:DEBUG: invalid mpeg layer
eyed3.mp3.headers:DEBUG: invalid mpeg bitrate
eyed3.mp3.headers:DEBUG: invalid mpeg sample rate
eyed3.mp3.headers:DEBUG: invalid mpeg sample rate
eyed3.mp3.headers:DEBUG: invalid mpeg sample rate
eyed3.mp3.headers:DEBUG: MPEG audio version: 1.0
eyed3.mp3.headers:DEBUG: MPEG audio layer: I
eyed3.mp3.headers:DEBUG: MPEG sampling frequency: 48000
eyed3.mp3.headers:DEBUG: MPEG bit rate: 352
eyed3.mp3.headers:DEBUG: MPEG channel mode: Joint stereo
eyed3.mp3.headers:DEBUG: MPEG channel mode extension: 1
eyed3.mp3.headers:DEBUG: MPEG CRC error protection: False
eyed3.mp3.headers:DEBUG: MPEG original: 1
eyed3.mp3.headers:DEBUG: MPEG copyright: 0
eyed3.mp3.headers:DEBUG: MPEG private bit: 1
eyed3.mp3.headers:DEBUG: MPEG padding: 1
eyed3.mp3.headers:DEBUG: MPEG emphasis: 50/15 ms
eyed3.mp3.headers:DEBUG: MPEG frame length: 368
eyed3.mp3:DEBUG: mp3 header ffffb755 found at position: 0x3405
/media/ssd/Das Flug - Alles musz in Flammen stehen (B-17 Edit).m4a [ 6.03 MB ]
-------------------------------------------------------------------------------
Setting artist: Das Flug
Setting title: Alles musz in Flammen stehen (B-17 Edit)
Time: 02:17 MPEG1, Layer I [ 352 kb/s @ 48000 Hz - Joint stereo ]
-------------------------------------------------------------------------------
ID3 v2.4:
title: Alles musz in Flammen stehen (B-17 Edit)
artist: Das Flug
album:
album artist: None
track:
Writing ID3 version v2.4
eyed3.id3.tag:DEBUG: Rendering tag version: v2.4
eyed3.id3.tag:DEBUG: Rendering frame: b'TIT2'
eyed3.id3.tag:DEBUG: Rendered 51 bytes
eyed3.id3.tag:DEBUG: Rendering frame: b'TPE1'
eyed3.id3.tag:DEBUG: Rendered 19 bytes
eyed3.id3.tag:DEBUG: Rendered 70 total frame bytes
eyed3.id3.tag:DEBUG: Using 256 bytes of padding
eyed3.id3.tag:DEBUG: Rendering v2.4 tag header with size 326
eyed3.id3.headers:DEBUG: Setting tag size to 326
eyed3.id3.headers:DEBUG: TagHeader rendered 10 bytes
eyed3.id3.tag:DEBUG: Writing 80 bytes of tag data and 256 bytes of padding
eyed3.id3.tag:DEBUG: Seeking to beginning of audio data, byte 0 (0)
eyed3.id3.tag:DEBUG: Tag write complete. Updating FileInfo state.
-------------------------------------------------------------------------------