diff mbox

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

Message ID 20171031071443.27319-1-lq@chinaffmpeg.org
State Superseded
Headers show

Commit Message

Liu Steven Oct. 31, 2017, 7:14 a.m. UTC
when use frame_pts option, the output image name can be set with PTS
of current frame.

Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
---
 doc/muxers.texi       | 9 +++++++++
 libavformat/img2enc.c | 8 ++++++++
 2 files changed, 17 insertions(+)

Comments

Carl Eugen Hoyos Nov. 12, 2017, 1:44 a.m. UTC | #1
2017-10-31 8:14 GMT+01:00 Steven Liu <lq@chinaffmpeg.org>:
> when use frame_pts option, the output image name can be set
> with PTS of current frame.

If this fixes ticket #1452, please mention it in the commit message.

Thank you, Carl Eugen
Steven Liu Nov. 13, 2017, 2:54 a.m. UTC | #2
2017-11-12 9:44 GMT+08:00 Carl Eugen Hoyos <ceffmpeg@gmail.com>:
> 2017-10-31 8:14 GMT+01:00 Steven Liu <lq@chinaffmpeg.org>:
>> when use frame_pts option, the output image name can be set
>> with PTS of current frame.
>
> If this fixes ticket #1452, please mention it in the commit message.
>
> Thank you, Carl Eugen
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

pushed and modifed with Carl suggestion.


Thanks
diff mbox

Patch

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:
+@example
+ffmpeg -f v4l2 -r 1 -i /dev/video0 -copyts -f image2 -frame_pts true %d.jpg"
+@end example
+
 @subsection Options
 
 @table @option
+@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..de2634119a 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,12 @@  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) {
+            av_log(s, AV_LOG_ERROR, "%"PRId64"\n", pkt->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 +214,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 },
 };