Thursday, May 30, 2013

Google Music MP3s and The Hidden ID3 tag

I have been purchasing MP3s from a few select online retailers for a few years now. I am a strong believer in the terms of service and security of my accounts -- meaning that I do not share accounts among family members. Instead, we each have our own account. However, this does not mean we should have to each buy our own copy of the same MP3. The retailers I have selected provide me with the ability to download the files so that I can install them on my offline devices. Or at least, so I thought.

It turns out that recently Google has made a change to the MP3s sold on Google Music. When I was syncing my music folder I saw that Google Music Manager failed to upload a few hundred tracks. A closer look at the log reveals something unexpected:

Song was purchased with another Google Play account
This came as a shock to me as this has not happened in the past. I noticed that a few albums that had been purchased recently all seemed to fall victim to this error. Needless to say, I was pissed!

After a few minutes however, I found my resolution thanks to a post in a Google forum. The suggestion from Jay LaCroix was to use a little Python script called eyeD3 to strip a private ID3 tag frame called PRIV from the MP3. In his original post he was using eyeD3 to strip all the tags but a later post by Keerthi Madapusi Pera suggested to use eyeD3's --remove-frame command-line argument to remove the PRIV frame from the "infected" file. Sure enough, it took care of my little problem. In the end I was able to use the utility on the albums that fell victim to this pro-piracy tactic by executing the following from the command-line:

cd ~/Music/<artist>/<album>
eyeD3 --remove-frame PRIV ./
I could have run the command from my Music folder as it is recursive. However, I wanted to limit the command to the albums I knew were impacted. It's also worth noting that the --remove-frame command-line argument seems to have been added in a recent version of the utility. The version in your package repository may not be new enough. In my case I used 0.7.1-final.

In the future I will need to remember to make this an automatic part of my music download process. I am not sure who is to blame for wasting more of my time. Is it Google? The music industry? The people who illegally pirate content without paying? Or the users who legally purchase content and think its their right to share it with the rest of the world? I am sure the answer is a combination of all the above but content providers really need to watch themselves as these kind of tactics are how pirates are born and in my opinion have a negative impact on their revenue as I will move my business to Amazon.

15 comments:

Nick W said...

Larry, thanks for your summary of this method. I have the same situation, wanting to share purchased mp3s with my wife. I came across the same post you mention, but looked for alternative solutions since I have no experience with Python.

Sooo... didn't find any alternatives to scrub that PRIV tag... So I took a personal crash course in Python, et al, and figured out enough to install Python, pip, and eyeD3. I got to "Successfully installed eyeD3".

Now I navigate in the cmd prompt to my music folder, but when I try to run the "--remove-frame PRIV ./" command in my Blues Traveler folder, for example, I get the message, "'eyeD3' is not recognized as an internal or external command, operable program or batch file."

I get the feeling I'm close and maybe just missing some basic command protocol or syntax... Wondering if you see something here and could help me finish the race! :)

thanks, Nick

Nick W said...

Other python commands seem to work as expected, just not eyeD3, so it seems that the command is not finding its way to the eyeD3 package on the other end.

Checked environment variables - got paths to python27, scripts folder, and lib>site-packages folder.

Uninstalled and reinstalled eyed3 with pip.

After install, I have: one file in scripts named eyeD3 with no file extension; two folders in 'site-packages' folder named eyed3 and 'eyeD3-0.7.3-py2.7.egg-info'.

Not sure what the eyeD3 command should be finding in any of those folders, just trying to think it through...

Still same result as before: "'eyeD3' is not recognized as an internal or external command, operable program or batch file."

Unknown said...

Nick, is sounds like you are running on Windows. A quick search of Google provided my a link to Justin Wishart's blog post Python: eyeD3 Installation on Windows. I am not sure if this is still relevant but hopefully it is and will work for you.

The error you are receiving indicates that the command, eyeD3, is not in the current directory, system path, or is not executable. By default, Python should have registered the .py file extension with the Python interpreter. This would mean that the Python script would have to end with .py. For example, eyeD3.py.

Hopefully one of these gets you going.

Anonymous said...

Nick, Did you ever get this working? I am having the same problem.

Anonymous said...

Nick, Did you ever get this working? I am having the same problem.

Nick W said...

I did not, despite not wanting to give up on it.:) I ended up just clearing the whole tag and regenerating with Picard. Not ideal, but quick enough - probably less time in total than I spent trying to make this work. With economy of scale, I suppose working it out could be worth the time, but it wasn't for me.

Anonymous said...

I found the answer.

python -m eyed3.main --remove-frame PRIV ./

Found the answer in the comments of this page.

http://stuff-i-blog-for-remembering.blogspot.com/2013/09/remove-google-play-store-mp3-tags.html

yukonzach said...

For those who just want a Windows solution and not have to go through installing Python, this is best solution for getting rid of PRIV tags on music you already paid for: http://invertedsky.net/?p=471

"iDessicate" made all of my Google Play Music truly DRM free, as promised. Should do the same for Amazon MP3s also.

Unknown said...

eyed3 installs a Unix shell script named just "eyed3" (instead of eyed3.sh) in the Python27/Scripts directory. For people on Unix systems, when they type "eyed3 " it runs that shell script, which in turn runs the actual eyed3 module.

On Windows systems, you need to write an eye.bat file to launch it. Here is a simple one that I use. Put it on your path so that Windows can find it.

@echo off
rem Invokes the eyed3 Python module, passes command-line parameters
rem for use in Windows cmd.exe shell.
rem Usage: eyeD3 option1 option2 option3 sourcedirectory
rem to do something to every file in sourcedirectory
rem It doesn't switch drives, so be on the drive where your files are.
rem Usage: To display help, type: eyed3 -h | more

if "%1"=="" goto usage

python -m eyed3.main --no-color %1 %2 %3 %4 %5 %6 %7 %8 %9
goto end

:usage
echo Usage: eyeD3 option1 option2 option3 option4 directory
echo Like: eyeD3 --write-images targetdirectory sourcedirectory
echo Like: eyeD3 --remove-all-images sourcedirectory
echo Like: eyeD3 --add-image path/to/image.jpg:FRONT_COVER:cover directory
echo To display tag info: eyeD3 directory
echo To display lame info: eyeD3 --plugin=lameinfo directory
echo To display help: eyeD3 -h

:end

Unknown said...

The blogger software ate some of the code in my original post, so I reposted it. The reposted code is correct, but I said to name the batch file "eye.bat" and should have said to same it "eyed3.bat". You actually can name it anything you like.

I create a C:\contrib\batch folder and keep my batch files in there. Then add that folder to your path. Put in on your path after the directories related to Windows (like "Program Files," "Windows" and "Windows\System32," so that if the name of your batch file conflicts with a Windows command, the system will run the Windows command instead. Put it on your path BEFORE the Python27\Scripts folder, so that when you write batch files like this one to launch Python modules, it will find your batch file before it finds anything in the Python27 hierarchy.

Unknown said...

Thanks for this @JackMcNac. I'm sure Windows users will find it very helpful.

Unknown said...

I tried the Python route. I found it very complicated, and couldn't get it to work.
MUCH easier solution: use the Android app "Music Mate": https://play.google.com/store/apps/details?id=com.sapien.android.musicmate.

Unknown said...

@Unknown, not sure how this is relevant. This post is about MP3 files and their related MP3 tags. The app you mention has nothing to do with MP3 files nor does it handle tag management for music files. It is simply a music player that uses the Google Music app to make music temporarily available to other music players running locally on Android and does not help with playing MP3 files on a computer, music player, media center, etc.

Seems like SPAM to me and for that, I have down voted the mentioned app and hope others will find better alternatives.

utahman1971 said...

@yukonzach Thanks for this because I am uploading my mp3s to Google Play Music and got those errors and that helped a lot without doing a command line that I do not like using. So I appreciate that!

Unknown said...

Search for the music tag editor "kid3", download and install. (It's available free for multiple platforms). Open the software.
Open the music files that won't upload to Google play and select them all.
Tick the tags that relate to Google - the bottom three when I did it.
Click remove and save.
Google music manager should now upload the files - takes a few minutes!