[FFmpeg-devel] [PATCH] avformat/img2enc: add frame_pts option for make output filename

Steven Liu lingjiujianke at gmail.com
Fri Nov 10 01:09:16 EET 2017


2017-10-31 23:47 GMT+08:00 Steven Liu <lq at chinaffmpeg.org>:
> when use frame_pts option, the output image name can be set with PTS
> of current frame.
>
> Signed-off-by: Steven Liu <lq at chinaffmpeg.org>
> ---
>  doc/muxers.texi       | 9 +++++++++
>  libavformat/img2enc.c | 7 +++++++
>  2 files changed, 16 insertions(+)
>
> diff --git a/doc/muxers.texi b/doc/muxers.texi
> index 91bbe673c5..af5349e683 100644
> --- a/doc/muxers.texi
> +++ b/doc/muxers.texi
> @@ -894,9 +894,18 @@ can be used:
>  ffmpeg -f v4l2 -r 1 -i /dev/video0 -f image2 -strftime 1 "%Y-%m-%d_%H-%M-%S.jpg"
>  @end example
>
> +You can set the file name with current frame's PTS:
> + at example
> +ffmpeg -f v4l2 -r 1 -i /dev/video0 -copyts -f image2 -frame_pts true %d.jpg"
> + at end example
> +
>  @subsection Options
>
>  @table @option
> + at item frame_pts
> +If set to 1, expand the filename with pts from pkt->pts.
> +Default value is 0.
> +
>  @item start_number
>  Start the sequence from the specified number. Default value is 1.
>
> diff --git a/libavformat/img2enc.c b/libavformat/img2enc.c
> index d793807b33..be87435b83 100644
> --- a/libavformat/img2enc.c
> +++ b/libavformat/img2enc.c
> @@ -42,6 +42,7 @@ typedef struct VideoMuxData {
>      char target[4][1024];
>      int update;
>      int use_strftime;
> +    int frame_pts;
>      const char *muxer;
>      int use_rename;
>  } VideoMuxData;
> @@ -99,6 +100,11 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt)
>                  av_log(s, AV_LOG_ERROR, "Could not get frame filename with strftime\n");
>                  return AVERROR(EINVAL);
>              }
> +        } else if (img->frame_pts) {
> +            if (av_get_frame_filename2(filename, sizeof(filename), img->path, pkt->pts, AV_FRAME_FILENAME_FLAGS_MULTIPLE) < 0) {
> +                av_log(s, AV_LOG_ERROR, "Cannot write filename by pts of the frames.");
> +                return AVERROR(EINVAL);
> +            }
>          } else if (av_get_frame_filename2(filename, sizeof(filename), img->path,
>                                            img->img_number,
>                                            AV_FRAME_FILENAME_FLAGS_MULTIPLE) < 0 &&
> @@ -207,6 +213,7 @@ static const AVOption muxoptions[] = {
>      { "update",       "continuously overwrite one file", OFFSET(update),  AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0,       1, ENC },
>      { "start_number", "set first number in the sequence", OFFSET(img_number), AV_OPT_TYPE_INT,  { .i64 = 1 }, 0, INT_MAX, ENC },
>      { "strftime",     "use strftime for filename", OFFSET(use_strftime),  AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, ENC },
> +    { "frame_pts",    "use current frame pts for filename", OFFSET(frame_pts),  AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, ENC },
>      { "atomic_writing", "write files atomically (using temporary files and renames)", OFFSET(use_rename), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, ENC },
>      { NULL },
>  };
> --
> 2.11.0 (Apple Git-81)
>
>
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

ping?


More information about the ffmpeg-devel mailing list