mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
srtenc: Add timing-less "subrip" encoder.
Unsurprisingly, if a timing-less subrip decoder is desireable, an encoder is as well. With this in place, we can move on to remove the use of the old encoder/decoder with embedded timing and move all timing handling the (de)muxer where they belong. Signed-off-by: Philip Langdale <philipl@overt.org>
This commit is contained in:
parent
6af680fa07
commit
6057de19b5
@ -46,6 +46,7 @@ version next:
|
|||||||
- asetpts filter
|
- asetpts filter
|
||||||
- hue filter
|
- hue filter
|
||||||
- ICO muxer
|
- ICO muxer
|
||||||
|
- SubRip encoder and decoder without embedded timing
|
||||||
|
|
||||||
|
|
||||||
version 0.11:
|
version 0.11:
|
||||||
|
@ -409,6 +409,7 @@ OBJS-$(CONFIG_SP5X_DECODER) += sp5xdec.o mjpegdec.o mjpeg.o
|
|||||||
OBJS-$(CONFIG_SRT_DECODER) += srtdec.o ass.o
|
OBJS-$(CONFIG_SRT_DECODER) += srtdec.o ass.o
|
||||||
OBJS-$(CONFIG_SRT_ENCODER) += srtenc.o ass_split.o
|
OBJS-$(CONFIG_SRT_ENCODER) += srtenc.o ass_split.o
|
||||||
OBJS-$(CONFIG_SUBRIP_DECODER) += srtdec.o ass.o
|
OBJS-$(CONFIG_SUBRIP_DECODER) += srtdec.o ass.o
|
||||||
|
OBJS-$(CONFIG_SUBRIP_ENCODER) += srtenc.o ass_split.o
|
||||||
OBJS-$(CONFIG_SUBVIEWER_DECODER) += subviewerdec.o ass.o
|
OBJS-$(CONFIG_SUBVIEWER_DECODER) += subviewerdec.o ass.o
|
||||||
OBJS-$(CONFIG_SUNRAST_DECODER) += sunrast.o
|
OBJS-$(CONFIG_SUNRAST_DECODER) += sunrast.o
|
||||||
OBJS-$(CONFIG_SUNRAST_ENCODER) += sunrastenc.o
|
OBJS-$(CONFIG_SUNRAST_ENCODER) += sunrastenc.o
|
||||||
|
@ -415,7 +415,7 @@ void avcodec_register_all(void)
|
|||||||
REGISTER_DECODER (REALTEXT, realtext);
|
REGISTER_DECODER (REALTEXT, realtext);
|
||||||
REGISTER_DECODER (SAMI, sami);
|
REGISTER_DECODER (SAMI, sami);
|
||||||
REGISTER_ENCDEC (SRT, srt);
|
REGISTER_ENCDEC (SRT, srt);
|
||||||
REGISTER_DECODER (SUBRIP, subrip);
|
REGISTER_ENCDEC (SUBRIP, subrip);
|
||||||
REGISTER_DECODER (SUBVIEWER, subviewer);
|
REGISTER_DECODER (SUBVIEWER, subviewer);
|
||||||
REGISTER_ENCDEC (XSUB, xsub);
|
REGISTER_ENCDEC (XSUB, xsub);
|
||||||
|
|
||||||
|
@ -252,16 +252,18 @@ static int srt_encode_frame(AVCodecContext *avctx,
|
|||||||
|
|
||||||
dialog = ff_ass_split_dialog(s->ass_ctx, sub->rects[i]->ass, 0, &num);
|
dialog = ff_ass_split_dialog(s->ass_ctx, sub->rects[i]->ass, 0, &num);
|
||||||
for (; dialog && num--; dialog++) {
|
for (; dialog && num--; dialog++) {
|
||||||
int sh, sm, ss, sc = 10 * dialog->start;
|
if (avctx->codec->id == CODEC_ID_SRT) {
|
||||||
int eh, em, es, ec = 10 * dialog->end;
|
int sh, sm, ss, sc = 10 * dialog->start;
|
||||||
sh = sc/3600000; sc -= 3600000*sh;
|
int eh, em, es, ec = 10 * dialog->end;
|
||||||
sm = sc/ 60000; sc -= 60000*sm;
|
sh = sc/3600000; sc -= 3600000*sh;
|
||||||
ss = sc/ 1000; sc -= 1000*ss;
|
sm = sc/ 60000; sc -= 60000*sm;
|
||||||
eh = ec/3600000; ec -= 3600000*eh;
|
ss = sc/ 1000; sc -= 1000*ss;
|
||||||
em = ec/ 60000; ec -= 60000*em;
|
eh = ec/3600000; ec -= 3600000*eh;
|
||||||
es = ec/ 1000; ec -= 1000*es;
|
em = ec/ 60000; ec -= 60000*em;
|
||||||
srt_print(s,"%d\r\n%02d:%02d:%02d,%03d --> %02d:%02d:%02d,%03d\r\n",
|
es = ec/ 1000; ec -= 1000*es;
|
||||||
++s->count, sh, sm, ss, sc, eh, em, es, ec);
|
srt_print(s,"%d\r\n%02d:%02d:%02d,%03d --> %02d:%02d:%02d,%03d\r\n",
|
||||||
|
++s->count, sh, sm, ss, sc, eh, em, es, ec);
|
||||||
|
}
|
||||||
s->alignment_applied = 0;
|
s->alignment_applied = 0;
|
||||||
s->dialog_start = s->ptr - 2;
|
s->dialog_start = s->ptr - 2;
|
||||||
srt_style_apply(s, dialog->style);
|
srt_style_apply(s, dialog->style);
|
||||||
@ -289,9 +291,10 @@ static int srt_encode_close(AVCodecContext *avctx)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if CONFIG_SRT_ENCODER
|
||||||
AVCodec ff_srt_encoder = {
|
AVCodec ff_srt_encoder = {
|
||||||
.name = "srt",
|
.name = "srt",
|
||||||
.long_name = NULL_IF_CONFIG_SMALL("SubRip subtitle"),
|
.long_name = NULL_IF_CONFIG_SMALL("SubRip subtitle with embedded timing"),
|
||||||
.type = AVMEDIA_TYPE_SUBTITLE,
|
.type = AVMEDIA_TYPE_SUBTITLE,
|
||||||
.id = AV_CODEC_ID_SRT,
|
.id = AV_CODEC_ID_SRT,
|
||||||
.priv_data_size = sizeof(SRTContext),
|
.priv_data_size = sizeof(SRTContext),
|
||||||
@ -299,3 +302,17 @@ AVCodec ff_srt_encoder = {
|
|||||||
.encode = srt_encode_frame,
|
.encode = srt_encode_frame,
|
||||||
.close = srt_encode_close,
|
.close = srt_encode_close,
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if CONFIG_SUBRIP_ENCODER
|
||||||
|
AVCodec ff_subrip_encoder = {
|
||||||
|
.name = "subrip",
|
||||||
|
.long_name = NULL_IF_CONFIG_SMALL("SubRip subtitle"),
|
||||||
|
.type = AVMEDIA_TYPE_SUBTITLE,
|
||||||
|
.id = AV_CODEC_ID_SUBRIP,
|
||||||
|
.priv_data_size = sizeof(SRTContext),
|
||||||
|
.init = srt_encode_init,
|
||||||
|
.encode = srt_encode_frame,
|
||||||
|
.close = srt_encode_close,
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_MAJOR 54
|
#define LIBAVCODEC_VERSION_MAJOR 54
|
||||||
#define LIBAVCODEC_VERSION_MINOR 52
|
#define LIBAVCODEC_VERSION_MINOR 53
|
||||||
#define LIBAVCODEC_VERSION_MICRO 100
|
#define LIBAVCODEC_VERSION_MICRO 100
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
||||||
|
@ -42,6 +42,7 @@ static int srt_write_header(AVFormatContext *avf)
|
|||||||
return AVERROR(EINVAL);
|
return AVERROR(EINVAL);
|
||||||
}
|
}
|
||||||
if (avf->streams[0]->codec->codec_id != AV_CODEC_ID_TEXT &&
|
if (avf->streams[0]->codec->codec_id != AV_CODEC_ID_TEXT &&
|
||||||
|
avf->streams[0]->codec->codec_id != AV_CODEC_ID_SUBRIP &&
|
||||||
avf->streams[0]->codec->codec_id != AV_CODEC_ID_SRT) {
|
avf->streams[0]->codec->codec_id != AV_CODEC_ID_SRT) {
|
||||||
av_log(avf, AV_LOG_ERROR,
|
av_log(avf, AV_LOG_ERROR,
|
||||||
"Unsupported subtitles codec: %s\n",
|
"Unsupported subtitles codec: %s\n",
|
||||||
|
@ -19,6 +19,9 @@ fate-sub-sami: CMD = md5 -i $(SAMPLES)/sub/SAMI_capability_tester.smi -f ass
|
|||||||
FATE_SUBTITLES += fate-sub-srt
|
FATE_SUBTITLES += fate-sub-srt
|
||||||
fate-sub-srt: CMD = md5 -i $(SAMPLES)/sub/SubRip_capability_tester.srt -f ass
|
fate-sub-srt: CMD = md5 -i $(SAMPLES)/sub/SubRip_capability_tester.srt -f ass
|
||||||
|
|
||||||
|
FATE_SUBTITLES += fate-sub-subripenc
|
||||||
|
fate-sub-subripenc: CMD = md5 -i $(SAMPLES)/sub/MovText_capability_tester.mp4 -scodec subrip -f srt
|
||||||
|
|
||||||
FATE_SUBTITLES += fate-sub-subviewer
|
FATE_SUBTITLES += fate-sub-subviewer
|
||||||
fate-sub-subviewer: CMD = md5 -i $(SAMPLES)/sub/SubViewer_capability_tester.sub -f ass
|
fate-sub-subviewer: CMD = md5 -i $(SAMPLES)/sub/SubViewer_capability_tester.sub -f ass
|
||||||
|
|
||||||
|
1
tests/ref/fate/sub-subripenc
Normal file
1
tests/ref/fate/sub-subripenc
Normal file
@ -0,0 +1 @@
|
|||||||
|
bd520f85238abf9df292374aed54681a
|
Loading…
Reference in New Issue
Block a user