[FFmpeg-devel] [PATCH] libavformat/hlsenc: add AVFMT_VARIABLE_FPS flag to mimic mpegtsenc
Aman Gupta
ffmpeg at tmm1.net
Fri Dec 8 02:14:40 EET 2017
From: Aman Gupta <aman at tmm1.net>
Previously, using a filter that changed frame_rate/time_base would work
as expected with mpegtsenc, but duplicate frames when used with hlsenc
(which uses mpegtsenc underneath).
For instance, using https://tmm1.s3.amazonaws.com/720p.ts:
$ ffmpeg -i 720p.ts -c:v libx264 -an -filter:v "yadif=mode=send_field:deint=interlaced" -f mpegts -y single.ts
$ ffmpeg -i 720p.ts -c:v libx264 -an -filter:v "yadif=mode=send_field:deint=interlaced" -f hls -hls_time 30 -y segment.m3u8
One would expect single.ts and segment0.ts to be identical, however comparing them shows:
single.ts: 120 fps, 59.94 tbr, 90k tbn, 239.76 tbc
segment0.ts: 120 fps, 119.88 tbr, 90k tbn, 239.76 tbc
Without AVFMT_VARIABLE_FPS set, ffmpeg.c was duplicating frames in the hlsenc
case and generating segments with double the r_frame_rate.
After this commit, the two muxers generate identical output.
---
libavformat/hlsenc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
index 7dc8f4237b..d256498244 100644
--- a/libavformat/hlsenc.c
+++ b/libavformat/hlsenc.c
@@ -2335,7 +2335,7 @@ AVOutputFormat ff_hls_muxer = {
.audio_codec = AV_CODEC_ID_AAC,
.video_codec = AV_CODEC_ID_H264,
.subtitle_codec = AV_CODEC_ID_WEBVTT,
- .flags = AVFMT_NOFILE | AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH,
+ .flags = AVFMT_NOFILE | AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS | AVFMT_ALLOW_FLUSH,
.write_header = hls_write_header,
.write_packet = hls_write_packet,
.write_trailer = hls_write_trailer,
--
2.14.2
More information about the ffmpeg-devel
mailing list