Running into problems setting cover art for MP4 files using Python and Mutagen












2















Following multiple suggestions from other StackOverflow questions and the mutagen documentation, I was able to come up with code to get and set every ID3 tag in both MP3 and MP4 files. The issue I have is with setting the cover art for M4B files.



I have reproduced the code exactly like it is laid out in this answer:



Embedding album cover in MP4 file using Mutagen



But I am still receiving errors when I attempt to run the code. If I run the code with the 'albumart' value by itself I receive the error:



MP4file.tags['covr'] = albumart



Exception has occurred: TypeError
can't concat int to bytes




However, if I surround the albumart variable with brackets like is shown in the aforementioned StackOverflow question I get this output:



MP4file.tags['covr'] = [albumart]



Exception has occurred: struct.error
required argument is not an integer




Here is the function in it's entirety. The MP3 section works without any problems.



from mutagen.mp3 import MP3
from mutagen.mp4 import MP4, MP4Cover


def set_cover(filename, cover):
r = requests.get(cover)
with open('C:/temp/cover.jpg', 'wb') as q:
q.write(r.content)
if(filename.endswith(".mp3")):
MP3file = MP3(filename, ID3=ID3)
if cover.endswith('.jpg') or cover.endswith('.jpeg'):
mime = 'image/jpg'
else:
mime = 'image/png'
with open('C:/temp/cover.jpg', 'rb') as albumart:
MP3file.tags.add(APIC(encoding=3, mime=mime, type=3, desc=u'Cover', data=albumart.read()))
MP3file.save(filename)
else:
MP4file = MP4(filename)
if cover.endswith('.jpg') or cover.endswith('.jpeg'):
cover_format = 'MP4Cover.FORMAT_JPEG'
else:
cover_format = 'MP4Cover.FORMAT_PNG'
with open('C:/temp/cover.jpg', 'rb') as f:
albumart = MP4Cover(f.read(), imageformat=cover_format)
MP4file.tags['covr'] = [albumart]


I have been trying to figure out what I am doing wrong for two days now. If anyone can help me spot the problem I would be in your debt.



Thanks!










share|improve this question



























    2















    Following multiple suggestions from other StackOverflow questions and the mutagen documentation, I was able to come up with code to get and set every ID3 tag in both MP3 and MP4 files. The issue I have is with setting the cover art for M4B files.



    I have reproduced the code exactly like it is laid out in this answer:



    Embedding album cover in MP4 file using Mutagen



    But I am still receiving errors when I attempt to run the code. If I run the code with the 'albumart' value by itself I receive the error:



    MP4file.tags['covr'] = albumart



    Exception has occurred: TypeError
    can't concat int to bytes




    However, if I surround the albumart variable with brackets like is shown in the aforementioned StackOverflow question I get this output:



    MP4file.tags['covr'] = [albumart]



    Exception has occurred: struct.error
    required argument is not an integer




    Here is the function in it's entirety. The MP3 section works without any problems.



    from mutagen.mp3 import MP3
    from mutagen.mp4 import MP4, MP4Cover


    def set_cover(filename, cover):
    r = requests.get(cover)
    with open('C:/temp/cover.jpg', 'wb') as q:
    q.write(r.content)
    if(filename.endswith(".mp3")):
    MP3file = MP3(filename, ID3=ID3)
    if cover.endswith('.jpg') or cover.endswith('.jpeg'):
    mime = 'image/jpg'
    else:
    mime = 'image/png'
    with open('C:/temp/cover.jpg', 'rb') as albumart:
    MP3file.tags.add(APIC(encoding=3, mime=mime, type=3, desc=u'Cover', data=albumart.read()))
    MP3file.save(filename)
    else:
    MP4file = MP4(filename)
    if cover.endswith('.jpg') or cover.endswith('.jpeg'):
    cover_format = 'MP4Cover.FORMAT_JPEG'
    else:
    cover_format = 'MP4Cover.FORMAT_PNG'
    with open('C:/temp/cover.jpg', 'rb') as f:
    albumart = MP4Cover(f.read(), imageformat=cover_format)
    MP4file.tags['covr'] = [albumart]


    I have been trying to figure out what I am doing wrong for two days now. If anyone can help me spot the problem I would be in your debt.



    Thanks!










    share|improve this question

























      2












      2








      2








      Following multiple suggestions from other StackOverflow questions and the mutagen documentation, I was able to come up with code to get and set every ID3 tag in both MP3 and MP4 files. The issue I have is with setting the cover art for M4B files.



      I have reproduced the code exactly like it is laid out in this answer:



      Embedding album cover in MP4 file using Mutagen



      But I am still receiving errors when I attempt to run the code. If I run the code with the 'albumart' value by itself I receive the error:



      MP4file.tags['covr'] = albumart



      Exception has occurred: TypeError
      can't concat int to bytes




      However, if I surround the albumart variable with brackets like is shown in the aforementioned StackOverflow question I get this output:



      MP4file.tags['covr'] = [albumart]



      Exception has occurred: struct.error
      required argument is not an integer




      Here is the function in it's entirety. The MP3 section works without any problems.



      from mutagen.mp3 import MP3
      from mutagen.mp4 import MP4, MP4Cover


      def set_cover(filename, cover):
      r = requests.get(cover)
      with open('C:/temp/cover.jpg', 'wb') as q:
      q.write(r.content)
      if(filename.endswith(".mp3")):
      MP3file = MP3(filename, ID3=ID3)
      if cover.endswith('.jpg') or cover.endswith('.jpeg'):
      mime = 'image/jpg'
      else:
      mime = 'image/png'
      with open('C:/temp/cover.jpg', 'rb') as albumart:
      MP3file.tags.add(APIC(encoding=3, mime=mime, type=3, desc=u'Cover', data=albumart.read()))
      MP3file.save(filename)
      else:
      MP4file = MP4(filename)
      if cover.endswith('.jpg') or cover.endswith('.jpeg'):
      cover_format = 'MP4Cover.FORMAT_JPEG'
      else:
      cover_format = 'MP4Cover.FORMAT_PNG'
      with open('C:/temp/cover.jpg', 'rb') as f:
      albumart = MP4Cover(f.read(), imageformat=cover_format)
      MP4file.tags['covr'] = [albumart]


      I have been trying to figure out what I am doing wrong for two days now. If anyone can help me spot the problem I would be in your debt.



      Thanks!










      share|improve this question














      Following multiple suggestions from other StackOverflow questions and the mutagen documentation, I was able to come up with code to get and set every ID3 tag in both MP3 and MP4 files. The issue I have is with setting the cover art for M4B files.



      I have reproduced the code exactly like it is laid out in this answer:



      Embedding album cover in MP4 file using Mutagen



      But I am still receiving errors when I attempt to run the code. If I run the code with the 'albumart' value by itself I receive the error:



      MP4file.tags['covr'] = albumart



      Exception has occurred: TypeError
      can't concat int to bytes




      However, if I surround the albumart variable with brackets like is shown in the aforementioned StackOverflow question I get this output:



      MP4file.tags['covr'] = [albumart]



      Exception has occurred: struct.error
      required argument is not an integer




      Here is the function in it's entirety. The MP3 section works without any problems.



      from mutagen.mp3 import MP3
      from mutagen.mp4 import MP4, MP4Cover


      def set_cover(filename, cover):
      r = requests.get(cover)
      with open('C:/temp/cover.jpg', 'wb') as q:
      q.write(r.content)
      if(filename.endswith(".mp3")):
      MP3file = MP3(filename, ID3=ID3)
      if cover.endswith('.jpg') or cover.endswith('.jpeg'):
      mime = 'image/jpg'
      else:
      mime = 'image/png'
      with open('C:/temp/cover.jpg', 'rb') as albumart:
      MP3file.tags.add(APIC(encoding=3, mime=mime, type=3, desc=u'Cover', data=albumart.read()))
      MP3file.save(filename)
      else:
      MP4file = MP4(filename)
      if cover.endswith('.jpg') or cover.endswith('.jpeg'):
      cover_format = 'MP4Cover.FORMAT_JPEG'
      else:
      cover_format = 'MP4Cover.FORMAT_PNG'
      with open('C:/temp/cover.jpg', 'rb') as f:
      albumart = MP4Cover(f.read(), imageformat=cover_format)
      MP4file.tags['covr'] = [albumart]


      I have been trying to figure out what I am doing wrong for two days now. If anyone can help me spot the problem I would be in your debt.



      Thanks!







      python mp3 mp4 mutagen






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Jan 1 at 19:37









      DarthDobberDarthDobber

      183




      183
























          0






          active

          oldest

          votes











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53998371%2frunning-into-problems-setting-cover-art-for-mp4-files-using-python-and-mutagen%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53998371%2frunning-into-problems-setting-cover-art-for-mp4-files-using-python-and-mutagen%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          'app-layout' is not a known element: how to share Component with different Modules

          android studio warns about leanback feature tag usage required on manifest while using Unity exported app?

          WPF add header to Image with URL pettitions [duplicate]