Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FFmpegMetadata] Store release_year in the metadata #32310

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

unkernet
Copy link
Contributor

Before submitting a pull request make sure you have:

In order to be accepted and merged into youtube-dl each piece of code must be in public domain or released under Unlicense. Check one of the following options:

  • I am the original author of this code and I am willing to release it under Unlicense
  • I am not the original author of this code but it is in public domain or released under Unlicense (provide reliable evidence)

What is the purpose of your pull request?

  • Bug fix
  • Improvement
  • New extractor
  • New feature

Description of your pull request and other information

Many music extractors returns only release_year field, and it is not stored in the metadata.

@dirkf
Copy link
Contributor

dirkf commented Jul 18, 2023

According to https://kodi.wiki/view/Video_file_tagging as quoted in the source, ffmpeg knows of a year metadata item. Wouldn't that be a more appropriate place for this, seeing that release_year is rather broad as date? But then the next source says that no such item exists ...

@unkernet
Copy link
Contributor Author

The correct field is date, not year.

Lets add both and check with the iTunes.

% ffmpeg -i 1.mp3 -codec copy -metadata year=2021 -metadata date=2022 2.mp3
% ffmpeg -i 2.mp3 -f ffmetadata 2.txt
% cat 2.txt
;FFMETADATA1
title=Grow in Japan
artist=Geju
album=Sad Elements
genre=electronics
track=1
album_artist=Geju
disc=1
date=2022
composer=Leveldva
year=2021
image

@@ -451,7 +451,7 @@ def add(meta_list, info_list=None):
# 4. http://atomicparsley.sourceforge.net/mpeg-4files.html

add('title', ('track', 'title'))
add('date', 'upload_date')
add('date', ('release_year', 'upload_date'))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will set a year rather than the yyyymmdd value if both items are available. Shouldn't they be reversed?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think not. This field called "Year" in most media players.

@@ -451,7 +451,7 @@ def add(meta_list, info_list=None):
# 4. http://atomicparsley.sourceforge.net/mpeg-4files.html
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The add() function above could be improved based on yt-dlp (import T(), traverse_obj(), txt_or_none(), variadic() from ..utils):

        def add(meta_list, info_list=None):
            if not meta_list:
                return
            meta_list = variadic(meta_list)
            info_list = variadic(info_list) if info_list else meta_list
            value = traverse_obj(info, (info_list, T(txt_or_none), any))
            if value not in (None, ''):
                value = value.replace('\0', '') # nul character cannot be passed in command line
                metadata.update((meta_f, value) for meta_f in meta_list)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants