Opened 12 years ago
Closed 9 years ago
#2161 closed defect (fixed)
Only one of two dvbsub streams decoded
Reported by: | Carl Eugen Hoyos | Owned by: | Anshul |
---|---|---|---|
Priority: | normal | Component: | avcodec |
Version: | git-master | Keywords: | videolan mpegts dvbsub |
Cc: | Michael Niedermayer | Blocked By: | |
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | yes |
Description
(videolan ticket 8054)
A vlc user provided a sample that contains two dvbsub subtitle streams that can be shown with mplayer -demuxer mpegts:
$ mplayer mentalist-1min-singleprogram.ts -demuxer mpegts -sid 0x96
$ mplayer mentalist-1min-singleprogram.ts -demuxer mpegts -sid 0x97
FFmpeg only decodes the first subtitle, the following command line produces a file with subtitles that can be shown with FFmpeg and MPlayer:
$ ffmpeg -i mentalist-1min-singleprogram.ts -qscale 2 -mbd 2 -map 0:0 -map 0:2 -map 0:5 -scodec dvdsub out.mpg
But the next command line produces an output file that shows no subtitles:
$ ffmpeg -i mentalist-1min-singleprogram.ts -qscale 2 -mbd 2 -map 0:0 -map 0:2 -map 0:6 -scodec dvdsub out.mpg ffmpeg version N-49059-gbc15fcb Copyright (c) 2000-2013 the FFmpeg developers built on Jan 20 2013 18:01:12 with gcc 4.7 (SUSE Linux) configuration: --enable-gpl --disable-indev=jack libavutil 52. 15.100 / 52. 15.100 libavcodec 54. 89.100 / 54. 89.100 libavformat 54. 61.101 / 54. 61.101 libavdevice 54. 3.102 / 54. 3.102 libavfilter 3. 32.101 / 3. 32.101 libswscale 2. 2.100 / 2. 2.100 libswresample 0. 17.102 / 0. 17.102 libpostproc 52. 2.100 / 52. 2.100 [mpeg2video @ 0x26bcea0] 0x0 is invalid Last message repeated 7 times [mpegts @ 0x2699060] max_analyze_duration 5000000 reached at 5016000 microseconds [mpegts @ 0x2699060] PES packet size mismatch Last message repeated 3 times Input #0, mpegts, from 'mentalist-1min-singleprogram.ts': Duration: 00:01:03.27, start: 74506.534033, bitrate: 2219 kb/s Program 1537 Stream #0:0[0x78]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p, 720x576 [SAR 64:45 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc Stream #0:1[0x82](fra): Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 192 kb/s Stream #0:2[0x83](eng): Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 128 kb/s Stream #0:3[0x85](qad): Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 128 kb/s Stream #0:4[0x8c](fra): Subtitle: dvb_teletext ([6][0][0][0] / 0x0006) Stream #0:5[0x96](fra): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006) (hearing impaired) Stream #0:6[0x97](eng): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006) Program 1538 Program 1539 Program 1540 Program 1541 Program 1542 Program 1543 Program 1790 Program 1791 Program 1792 Please use -q:a or -q:v, -qscale is ambiguous [mpeg @ 0x269b8e0] VBV buffer size not set, muxing may fail Output #0, mpeg, to 'out.mpg': Metadata: encoder : Lavf54.61.101 Stream #0:0: Video: mpeg1video (hq), yuv420p, 720x576 [SAR 64:45 DAR 16:9], q=2-31, 200 kb/s, 90k tbn, 25 tbc Stream #0:1(eng): Audio: mp2, 48000 Hz, stereo, s16, 128 kb/s Stream #0:2(eng): Subtitle: dvd_subtitle Stream mapping: Stream #0:0 -> #0:0 (mpeg2video -> mpeg1video) Stream #0:2 -> #0:1 (mp2 -> mp2) Stream #0:6 -> #0:2 (dvbsub -> dvdsub) Press [q] to stop, [?] for help Warning MVs not available size= 846kB time=00:00:25.08 bitrate= 276.3kbits/s dup=23 drop=0 [mpeg2video @ 0x26bcea0] concealing 15 DC, 15 AC, 15 MV errors in I frame PES packet size mismatch0 size= 5464kB time=00:00:49.72 bitrate= 900.3kbits/s dup=23 drop=0 [mpeg2video @ 0x26bcea0] ac-tex damaged at 1 18 [mpeg2video @ 0x26bcea0] Warning MVs not available [mpeg2video @ 0x26bcea0] concealing 810 DC, 810 AC, 810 MV errors in I frame [mp2 @ 0x26c1540] incomplete frame Error while decoding stream #0:2: Invalid data found when processing input frame= 1535 fps=616 q=2.0 Lsize= 11394kB time=00:01:01.36 bitrate=1521.2kbits/s dup=25 drop=0 video:10370kB audio:946kB subtitle:0 global headers:0kB muxing overhead 0.683155%
$ ffmpeg -i out.mpg ffmpeg version N-49059-gbc15fcb Copyright (c) 2000-2013 the FFmpeg developers built on Jan 20 2013 18:01:12 with gcc 4.7 (SUSE Linux) configuration: --enable-gpl --disable-indev=jack libavutil 52. 15.100 / 52. 15.100 libavcodec 54. 89.100 / 54. 89.100 libavformat 54. 61.101 / 54. 61.101 libavdevice 54. 3.102 / 54. 3.102 libavfilter 3. 32.101 / 3. 32.101 libswscale 2. 2.100 / 2. 2.100 libswresample 0. 17.102 / 0. 17.102 libpostproc 52. 2.100 / 52. 2.100 [mpeg @ 0x1e83460] max_analyze_duration 5000000 reached at 5000000 microseconds Input #0, mpeg, from 'out.mpg': Duration: 00:01:01.33, start: 0.529978, bitrate: 1521 kb/s Stream #0:0[0x1e0]: Video: mpeg1video, yuv420p, 720x576 [SAR 64:45 DAR 16:9], 104857 kb/s, 25 fps, 25 tbr, 90k tbn, 25 tbc Stream #0:1[0x1c0]: Audio: mp2, 48000 Hz, stereo, s16p, 128 kb/s At least one output file must be specified
Since mplayer -demuxer lavf -sid 2 shows no subtitles (-sid 1 works fine), this may be a demuxer issue.
Change History (18)
comment:1 by , 12 years ago
comment:2 by , 12 years ago
mplayer -demuxer lavf
shows a lot of video artifacts too, while mplayer -demuxer mpegts
does not, so there is definitely something fishy with the demuxer.
comment:3 by , 12 years ago
I see the same artefacts at 74538 with mplayer -demuxer mpegts and mplayer -demuxer lavf - which other artefacts do you see?
comment:4 by , 12 years ago
With -demuxer lavf
, I see nothing but artifacts. The first line of macroblocks keeps blinking, and that is only the least of them. All parts with motion are blured as if error concealment happens. I am surprised you do not see them.
comment:5 by , 12 years ago
No additional artefacts here with -demuxer lavf (you are not on vdpau, are you?)
comment:6 by , 12 years ago
I was about to ask the same question; no, pure [ffmpeg2] vfm: ffmpeg (FFmpeg MPEG-2)
, and I get a lot of artifacts. If I add the following line in vd_ffmpeg.c
after the call to avcodec_decode_video2
:
printf("decode packet size %d/%d\n", ret, pkt.size);
I get very different results depending on whether I use -demuxer lavf
or -demuxer mpegts
: 4553/4553, 4185/4185, 14116/14116, vs. 38035/38035, 2345/2345, 33803/33803, etc.
OTOH, the video decodes fines with avplay, so maybe this is a problem in MPlayer's use of the demuxer and here would not be the place to talk about it, but this whole thing is highly confusing.
comment:7 by , 12 years ago
Still works fine here with mplayer -demuxer lavf - could you confirm which MPlayer version you are using and that you are calling it with "-noconfig all"?
comment:8 by , 12 years ago
It is a fresh build of the SVN head + ffmpeg Git head. But I forgot the -noconfig all
, I do not have anything in it that usually causes problems. But in this particular case -vf pp=hb:c/vb:c
seems to be getting completely mad.
This is one problem solved, although I am still curious about the different packet sizes between the demuxers.
comment:9 by , 12 years ago
I should add that the artefact at 74538 that can be seen with -vc mpeg12 and -vc ffmpeg12 is not visible with vdpau although the hardware decoder usually is bad with error concealment, so there might still be something interesting about the sample.
comment:10 by , 10 years ago
I tested using gdb ffplay and wireshark.
and I find that page_id is equal to 1 of stream 6 and ancilary id = 0 and Composition ID is 0 for stream 6. so we never decode any segment in dvbsub decoder.
following is wireshark log for same file
Stream PID=0x0096
Stream type: ITU-T Rec. H.222.0 | ISO/IEC 13818-1 PES packets containing private data (0x06)
- .... .... .... = Reserved: 0x0007 ...0 0000 1001 0110 = Elementary PID: 0x0096 1111 .... .... .... = Reserved: 0x000f .... 0000 0000 1010 = ES Info Length: 0x000a Descriptor Tag=0x59
Descriptor Tag: Subtitling Descriptor (0x59)
Descriptor Length: 8
Language Code: fra
Subtitling Type: DVB subtitles (for the hard of hearing) with no monitor aspect ratio criticality (0x20)
Composition Page ID: 1
Ancillary Page ID: 0
Stream PID=0x0097
Stream type: ITU-T Rec. H.222.0 | ISO/IEC 13818-1 PES packets containing private data (0x06)
- .... .... .... = Reserved: 0x0007 ...0 0000 1001 0111 = Elementary PID: 0x0097 1111 .... .... .... = Reserved: 0x000f .... 0000 0000 1010 = ES Info Length: 0x000a Descriptor Tag=0x59
Descriptor Tag: Subtitling Descriptor (0x59)
Descriptor Length: 8
Language Code: eng
Subtitling Type: DVB subtitles (normal) with no monitor aspect ratio criticality (0x10)
Composition Page ID: 0
Ancillary Page ID: 0
my last git log 6d2df3c00a7899e9c06e3a460d64e4d0ccde0fae
following is br guide how i tested the value in ffplay(decoding)
(gdb) info br
Num Type Disp Enb Address What
1 breakpoint keep y 0x0831f95b in dvbsub_decode at libavcodec/dvbsubdec.c:1531
breakpoint already hit 244 times
silent
if (page_id == 1) && (ctx->composition_id == 0) && (ctx->ancillary_id == 0)
c
end
following is from dvbsub spec
page_id: The page_id identifies the subtitle service of the data contained in this subtitling_segment. Segments with a
page_id value signalled in the subtitling descriptor as the composition page id, carry subtitling data specific for one
subtitle service. Accordingly, segments with the page_id signalled in the subtitling descriptor as the ancillary page id,
carry data that may be shared by multiple subtitle services.
IMO If any sane player is able to show the second video, then only we should think it as defect.
This 0x6 can be extracted if we ignore page_id.
or Composition Page ID = 0 and Ancillary Page ID = 0 have special meaning (i did not found anything but i may have missed it in spec).
I have not tested with mplayer or vlc , please pardon me but i really did not find it worth since both of them were using ffmpeg.
As you said in discription it works in stream 5, it should since page_id match with composition ID.
comment:11 by , 10 years ago
Analyzed by developer: | set |
---|---|
Owner: | set to |
Status: | new → open |
comment:12 by , 10 years ago
I am not sure I understand everything you wrote: Did you understand that MPlayer is able to show two different subtitle streams while FFmpeg only shows one?
comment:13 by , 10 years ago
but I see ffmpeg show two dvbsub stream(above logs) but able to reencode only one of them.
in both log ffmpeg show 2( mentalist-1min-singleprogram.ts) or none(output).
is there some missing logs?
comment:15 by , 9 years ago
Resolution: | → fixed |
---|---|
Status: | open → closed |
follow-up: 17 comment:16 by , 9 years ago
Cc: | added |
---|---|
Component: | undetermined → avcodec |
Resolution: | fixed |
Status: | closed → reopened |
The given sample works fine with -dvb_substream -1
(the default), but both -dvb_substream 0
and -dvb_substream 1
fail (differently), I believe one of them is supposed to work.
comment:17 by , 9 years ago
Replying to cehoyos:
The given sample works fine with
-dvb_substream -1
(the default), but both-dvb_substream 0
and-dvb_substream 1
fail (differently), I believe one of them is supposed to work.
Please explain what you expect and why
the descriptors refer to a page id of 0 the stream contains a page id of 1. I failed to find any special case for 0, so displaying nothing when a substream is selected seems "correct"
comment:18 by , 9 years ago
Resolution: | → fixed |
---|---|
Status: | reopened → closed |
Thank you for the explanation!
Sample uploaded to http://samples.ffmpeg.org/ffmpeg-bugs/trac/ticket2161/