summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ffmpeg.c13
-rw-r--r--libavformat/flvenc.c2
2 files changed, 14 insertions, 1 deletions
diff --git a/ffmpeg.c b/ffmpeg.c
index 3ffd596c09..720e11a1c2 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -2104,6 +2104,19 @@ static int av_encode(AVFormatContext **output_files,
ist->is_start = 1;
}
+ /* set the duration of the output to the duration of the input
+ * if the output ends up being different, it'll be corrected later */
+ for (i=0;i<nb_output_files;i++) {
+ AVFormatContext *out_file = output_files[i];
+ AVFormatContext *in_file = input_files[i];
+
+ if (recording_time != INT64_MAX) {
+ out_file->duration = recording_time / 1000000 * AV_TIME_BASE;
+ } else {
+ out_file->duration = in_file->duration;
+ }
+ }
+
/* set meta data information from input file if required */
for (i=0;i<nb_meta_data_maps;i++) {
AVFormatContext *out_file;
diff --git a/libavformat/flvenc.c b/libavformat/flvenc.c
index c255ff0512..cf6b1c566f 100644
--- a/libavformat/flvenc.c
+++ b/libavformat/flvenc.c
@@ -221,7 +221,7 @@ static int flv_write_header(AVFormatContext *s)
put_amf_string(pb, "duration");
flv->duration_offset= url_ftell(pb);
- put_amf_double(pb, 0); // delayed write
+ put_amf_double(pb, s->duration / AV_TIME_BASE); // fill in the guessed duration, it'll be corrected later if incorrect
if(video_enc){
put_amf_string(pb, "width");