Opened 14 months ago
Closed 13 months ago
#10203 closed defect (fixed)
ASS encoder inserts null character into middle of output
Reported by: | Tim Angus | Owned by: | |
---|---|---|---|
Priority: | normal | Component: | avformat |
Version: | git-master | Keywords: | ass assenc |
Cc: | Tim Angus, Marton Balint | Blocked By: | |
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | no |
Description
Summary of the bug:
Some matroska files embed ASS format subtitles. The header for said subtitles include the header for the subtitle stream in the "codec private data" section. It's not clear whether the last byte of this data is supposed to be 0, i.e. a null terminator for the string data. Among other tools, older versions of Handbrake do include the null terminator and there are many files out in the wild created using Handbrake. Using ffmpeg to extract subtitles for such a file, this header is copied directly to the output file, including the null terminator, if it was present. This results in a file in which there is a null terminator after the header, but preceeding the actual content of the subtitle file. Obviously this is not correct.
As a data point, of the ~600 mkvs I have locally, 22 of them have ASS subtitles, and of them 20 include the null terminator, so it doesn't appear to be a rare phenomenon.
As another data point, the tool mkvextract from mkvtoolnix avoids the ambiguity by first assuming that the source buffer is *not* null terminated, and then manually adding a (possibly second) null terminator. The buffer is then interpreted as a null terminated string and processed that way.
(https://gitlab.com/mbunkus/mkvtoolnix/-/blob/main/src/extract/xtr_textsubs.cpp#L117)
A small test file that exhibits the problem may be found here:
https://0x0.st/oFTT.mkv
Patch available here, that essentially replicates how mkvtoolnix does things: http://ffmpeg.org/pipermail/ffmpeg-devel/2023-January/306017.html
How to reproduce:
% ffmpeg -y -i oFTT.mkv -copyts -an -vn -c:s copy out.ass
Use xxd or a text viewer that shows special characters, and observe the '\0' between the end of the [V4+ Styles] section and the start of the [Events] section.
Change History (3)
comment:1 by , 14 months ago
Cc: | added |
---|---|
Version: | unspecified → git-master |
comment:2 by , 13 months ago
Cc: | added |
---|---|
Status: | new → open |
comment:3 by , 13 months ago
Resolution: | → fixed |
---|---|
Status: | open → closed |
Fixed in 5f92a192315fc9349e7c9bdc923666f79d5c5e8d.
Sent an alternate patch, please test if you can
http://mplayerhq.hu/pipermail/ffmpeg-devel/2023-March/307948.html