tone: Dump is writing errors to stdout
This is how I was writing custom metadata to m4b files using ffmpeg, which I found out was NOT a good idea.
I will outline it here to show how tone dumps the file, I am not expecting tone to correctly parse this.
First writing a custom tag to the sample m4b here
ffmpeg -i .\samples\test_m4b.m4b -metadata ASIN="1337" -movflags use_metadata_tags .\samples\output_m4b.m4b
Ffprobe format output:
ffprobe -i .\samples\output_m4b.m4b -show_format -print_format json
"format": {
"filename": ".\\samples\\output_m4b.m4b",
"nb_streams": 2,
"nb_programs": 0,
"format_name": "mov,mp4,m4a,3gp,3g2,mj2",
"format_long_name": "QuickTime / MOV",
"start_time": "0.000000",
"duration": "211.302000",
"size": "1934997",
"bit_rate": "73259",
"probe_score": 100,
"tags": {
"minor_version": "0",
"major_brand": "mp42",
"compatible_brands": "mp42isomndia",
"gapless_playback": "1",
"track": "5",
"genre": "abs",
"artist": "advplyr",
"title": "Test 5",
"album": "node-tone",
"comment": "testing out tone metadata",
"album_artist": "advplyr",
"composer": "Composer 5",
"date": "2022-09-10",
"ASIN": "1337",
"compilation": "0",
"media_type": "2",
"encoder": "Lavf58.73.100"
}
}
Now tone dump
tone dump .\samples\output_m4b.m4b --format json
Output:
Unrecognized metadata format
at ATL.AudioData.IO.MP4.readTag(BinaryReader source, ReadTagParams readTagParams)
at ATL.AudioData.IO.MP4.readUserData(BinaryReader source, ReadTagParams readTagParams, Int64 moovPosition, UInt32 moovSize)
at ATL.AudioData.IO.MP4.readMP4(BinaryReader source, ReadTagParams readTagParams)
at ATL.AudioData.IO.MP4.read(BinaryReader source, ReadTagParams readTagParams)
at ATL.AudioData.IO.MP4.Read(BinaryReader source, SizeInfo sizeInfo, ReadTagParams readTagParams)
at ATL.AudioData.AudioDataManager.read(BinaryReader source, ReadTagParams readTagParams)
at ATL.AudioData.AudioDataManager.read(BinaryReader source, Boolean readEmbeddedPictures, Boolean readAllMetaFrames, Boolean prepareForWriting)
at ATL.AudioData.AudioDataManager.ReadFromFile(Boolean readEmbeddedPictures, Boolean readAllMetaFrames)
Unrecognized metadata format
at ATL.AudioData.IO.MP4.readTag(BinaryReader source, ReadTagParams readTagParams)
at ATL.AudioData.IO.MP4.readUserData(BinaryReader source, ReadTagParams readTagParams, Int64 moovPosition, UInt32 moovSize)
at ATL.AudioData.IO.MP4.readMP4(BinaryReader source, ReadTagParams readTagParams)
at ATL.AudioData.IO.MP4.read(BinaryReader source, ReadTagParams readTagParams)
at ATL.AudioData.IO.MP4.Read(BinaryReader source, SizeInfo sizeInfo, ReadTagParams readTagParams)
at ATL.AudioData.AudioDataManager.read(BinaryReader source, ReadTagParams readTagParams)
at ATL.AudioData.AudioDataManager.read(BinaryReader source, Boolean readEmbeddedPictures, Boolean readAllMetaFrames, Boolean prepareForWriting)
at ATL.AudioData.AudioDataManager.ReadFromFile(Boolean readEmbeddedPictures, Boolean readAllMetaFrames)
{
"audio": {
"format": "Unknown",
"formatShort": "Unknown",
"channels": {
"description": "Unknown"
},
"frames": {},
"metaFormat": []
},
"meta": {
"title": "output_m4b"
},
"file": {
"size": 1934997,
"created": "2022-09-18T16:20:03.2173223-05:00",
"modified": "2022-09-18T16:21:28.9052672-05:00",
"accessed": "2022-09-18T16:26:33.0977549-05:00",
"path": "\\NodeProjects\\node-tone\\samples",
"name": "output_m4b.m4b"
}
}
The issue is that tone is outputting all of this to stdout so node-tone is unable parse the JSON of the metadata that was found. It is okay that tone didn’t pull the ASIN tag, but I still want to get the rest of the output.
About this issue
- Original URL
- State: closed
- Created 2 years ago
- Comments: 20 (13 by maintainers)
Commits related to this issue
- Added try catch for tag and dump command to prevent exceptions in stdout (#26) — committed to sandreas/tone by sandreas 2 years ago
- added #26 to release notes — committed to sandreas/tone by sandreas 2 years ago
- fix / workaround #26 - no longer dump exceptions to stdout — committed to sandreas/tone by sandreas 2 years ago
Ok, since there was no release of
atldotnetyet, I decided to give0.1.1a go… Could you please try if this fixed your issue?Explanation:
--debug,--log-leveland--log-file(which has to be documented in the near future)Using
--debugshould create a logfile inYOURTMPPATH/tone.logor you specify the location e.g. via--log-file=/home/sandreas/tone.log. You can also use--log-level=debug, but the--log-leveloption is more meant for future usage.I think you might be right… (see https://github.com/mifi/lossless-cut/issues/402).
Basically this is why I wrote
tone… becauseffmpegjust can’t handle some metadata. Therefore, inm4b-toolI manage all metadata by myself including the following steps:tonebut in the past I used a combination of a PHP class andffmpeg)ffmpegignoring all source metadatatoneormp4tags)This is a huge effort but it is accurate, while
ffmpegproduces bogus files every now and then… (e.g. concat filter produces an empty file, if the listing.txt contains only one file…)So to conclue this issue, my todo:
tonefrom pollutingstdout/stderrwith error messages from invalid filesOk, I found a problem in
atldotnet- the audio lib oftone. Usually the repo owner is very polite and quick with fixes, so I would like to wait until it is gonna fixed “the right way”, but I also already commited a workaround to prevent this. If the lib cannot be fixed in an acceptable time period, I’ll go for the workaround inv0.1.1.Thank you, reproduced. I’ll try what I can 😃