[FFmpeg-trac] #10203(avformat:new): ASS encoder inserts null character into middle of output
FFmpeg
trac at avcodec.org
Fri Feb 17 23:42:17 EET 2023
#10203: ASS encoder inserts null character into middle of output
-------------------------------------+-------------------------------------
Reporter: Tim Angus | Type: defect
Status: new | Priority: normal
Component: avformat | Version:
| unspecified
Keywords: ass assenc | Blocked By:
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
-------------------------------------+-------------------------------------
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.
--
Ticket URL: <https://trac.ffmpeg.org/ticket/10203>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list