Replace taglib-ruby with ffmpeg for metadata operations#54
Merged
Conversation
1769785 to
736d767
Compare
BPM reading now uses ffprobe format tags instead of taglib file handles. BPM writing and tag transliteration use ffmpeg stream copy with -metadata flags. For MP3 conversion targets, transliterated tag changes are folded into the transcode ffmpeg call, eliminating the second subprocess that previously re-muxed the transcoded file just to apply transliteration. This removes taglib-ruby as a native dependency.
736d767 to
f2c5a16
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
copy_streams,map_metadata, andmetadatabuilder methods toFFMPEGfor stream-copy metadata writestagsmethod toFFMPEG::Probeexposingformat.tagsfrom ffprobe JSON outputHow it works
Reading BPM:
FFMPEG::Probe#tagsreturns the format tags hash from ffprobe.bpm_from_mp3/aiff/wavlook for theTBPMkey;bpm_from_m4alooks forBPM(ffprobe's name for thetmpoatom) and converts to Integer.Writing BPM / transliterating tags: Uses
ffmpeg -i input -c copy -map_metadata 0 -metadata KEY=VALUE output, which copies all existing metadata and overrides specific keys. The original file is replaced with the rewritten output.Tag transliteration:
transliterate_tagsreads current tags via ffprobe, identifies which ones changed after NFD normalization, then writes only the changed tags back using ffmpeg's stream-copy metadata path. Unchanged tags survive via-map_metadata 0.