Merge commit '488a0fa68973d48e264d54f1722f7afb18afbea7'
* commit '488a0fa68973d48e264d54f1722f7afb18afbea7': avconv: support -t as an input option. Conflicts: Changelog ffmpeg.h Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
		
						commit
						b7fc2693c7
					
				@ -11,6 +11,8 @@ version <next>
 | 
			
		||||
- when transcoding with ffmpeg (i.e. not streamcopying), -ss is now accurate
 | 
			
		||||
  even when used as an input option. Previous behavior can be restored with
 | 
			
		||||
  the -noaccurate_seek option.
 | 
			
		||||
- ffmpeg -t option can now be used for inputs, to limit the duration of
 | 
			
		||||
  data read from an input file
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
version 2.0:
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										11
									
								
								ffmpeg.c
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								ffmpeg.c
									
									
									
									
									
								
							@ -1389,6 +1389,7 @@ static int check_output_constraints(InputStream *ist, OutputStream *ost)
 | 
			
		||||
static void do_streamcopy(InputStream *ist, OutputStream *ost, const AVPacket *pkt)
 | 
			
		||||
{
 | 
			
		||||
    OutputFile *of = output_files[ost->file_index];
 | 
			
		||||
    InputFile   *f = input_files [ist->file_index];
 | 
			
		||||
    int64_t start_time = (of->start_time == AV_NOPTS_VALUE) ? 0 : of->start_time;
 | 
			
		||||
    int64_t ost_tb_start_time = av_rescale_q(start_time, AV_TIME_BASE_Q, ost->st->time_base);
 | 
			
		||||
    int64_t ist_tb_start_time = av_rescale_q(start_time, AV_TIME_BASE_Q, ist->st->time_base);
 | 
			
		||||
@ -1417,6 +1418,16 @@ static void do_streamcopy(InputStream *ist, OutputStream *ost, const AVPacket *p
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (f->recording_time != INT64_MAX) {
 | 
			
		||||
        start_time = f->ctx->start_time;
 | 
			
		||||
        if (f->start_time != AV_NOPTS_VALUE)
 | 
			
		||||
            start_time += f->start_time;
 | 
			
		||||
        if (ist->pts >= f->recording_time + start_time) {
 | 
			
		||||
            close_output_stream(ost);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* force the input stream PTS */
 | 
			
		||||
    if (ost->st->codec->codec_type == AVMEDIA_TYPE_AUDIO)
 | 
			
		||||
        audio_size += pkt->size;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								ffmpeg.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								ffmpeg.h
									
									
									
									
									
								
							@ -284,6 +284,7 @@ typedef struct InputFile {
 | 
			
		||||
    int64_t ts_offset;
 | 
			
		||||
    int64_t last_ts;
 | 
			
		||||
    int64_t start_time;   /* user-specified start time in AV_TIME_BASE or AV_NOPTS_VALUE */
 | 
			
		||||
    int64_t recording_time;
 | 
			
		||||
    int nb_streams;       /* number of stream that ffmpeg is aware of; may be different
 | 
			
		||||
                             from ctx.nb_streams if new streams appear during av_read_frame() */
 | 
			
		||||
    int nb_streams_warn;  /* number of streams that the user was warned of */
 | 
			
		||||
 | 
			
		||||
@ -698,7 +698,7 @@ static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter,
 | 
			
		||||
    snprintf(name, sizeof(name), "trim for input stream %d:%d",
 | 
			
		||||
             ist->file_index, ist->st->index);
 | 
			
		||||
    ret = insert_trim(((f->start_time == AV_NOPTS_VALUE) || !f->accurate_seek) ?
 | 
			
		||||
                      AV_NOPTS_VALUE : 0, INT64_MAX, &last_filter, &pad_idx, name);
 | 
			
		||||
                      AV_NOPTS_VALUE : 0, f->recording_time, &last_filter, &pad_idx, name);
 | 
			
		||||
    if (ret < 0)
 | 
			
		||||
        return ret;
 | 
			
		||||
 | 
			
		||||
@ -795,7 +795,7 @@ static int configure_input_audio_filter(FilterGraph *fg, InputFilter *ifilter,
 | 
			
		||||
    snprintf(name, sizeof(name), "trim for input stream %d:%d",
 | 
			
		||||
             ist->file_index, ist->st->index);
 | 
			
		||||
    ret = insert_trim(((f->start_time == AV_NOPTS_VALUE) || !f->accurate_seek) ?
 | 
			
		||||
                      AV_NOPTS_VALUE : 0, INT64_MAX, &last_filter, &pad_idx, name);
 | 
			
		||||
                      AV_NOPTS_VALUE : 0, f->recording_time, &last_filter, &pad_idx, name);
 | 
			
		||||
    if (ret < 0)
 | 
			
		||||
        return ret;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -842,6 +842,7 @@ static int open_input_file(OptionsContext *o, const char *filename)
 | 
			
		||||
    f->ctx        = ic;
 | 
			
		||||
    f->ist_index  = nb_input_streams - ic->nb_streams;
 | 
			
		||||
    f->start_time = o->start_time;
 | 
			
		||||
    f->recording_time = o->recording_time;
 | 
			
		||||
    f->ts_offset  = o->input_ts_offset - (copy_ts ? 0 : timestamp);
 | 
			
		||||
    f->nb_streams = ic->nb_streams;
 | 
			
		||||
    f->rate_emu   = o->rate_emu;
 | 
			
		||||
@ -2599,7 +2600,8 @@ const OptionDef options[] = {
 | 
			
		||||
    { "map_chapters",   HAS_ARG | OPT_INT | OPT_EXPERT | OPT_OFFSET |
 | 
			
		||||
                        OPT_OUTPUT,                                  { .off = OFFSET(chapters_input_file) },
 | 
			
		||||
        "set chapters mapping", "input_file_index" },
 | 
			
		||||
    { "t",              HAS_ARG | OPT_TIME | OPT_OFFSET | OPT_OUTPUT, { .off = OFFSET(recording_time) },
 | 
			
		||||
    { "t",              HAS_ARG | OPT_TIME | OPT_OFFSET |
 | 
			
		||||
                        OPT_INPUT | OPT_OUTPUT,                      { .off = OFFSET(recording_time) },
 | 
			
		||||
        "record or transcode \"duration\" seconds of audio/video",
 | 
			
		||||
        "duration" },
 | 
			
		||||
    { "to",             HAS_ARG | OPT_TIME | OPT_OFFSET | OPT_OUTPUT,  { .off = OFFSET(stop_time) },
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user