Message ID | c3198550-d7ab-30ad-8e6f-5bb17c84e39e@escribe.co.uk |
---|---|
State | Superseded |
Headers | show |
On Tue, Dec 26, 2017 at 10:44:31PM +0000, Dr Alan Barclay wrote: > Hi All, > > Please would someone with an interest in img2enc take a look at my revised > patches for a minor feature addition and consider committing it to the main > line for me. > > Example: > ffmpeg -i ~/trailer.mp4 -strftime 1 -mkdir 1 %Y/%m/%d/out_%H-%M-%S.jpg > > Without the new mkdir option, this command will fail if the directory > hierarchy for the jpg files does not already exist, which can be difficult > to predict for time-stamped directories. > > This patch adds a mkdir option to img2enc which invites it to make whatever > directory hierarchy is necessary for each output file. When used in > conjunction with the strftime then the jpg files will be located in a newly > created (time-stamped) directory as processing progresses. > > My typical usage scenario is capturing a long-running live video feed > (perhaps time-lapsed) and storing the resulting images in a time-stamped > directory hierarchy fashion, rather than as a numbered sequence of files in > a single directory. > > If you look at the code you will see that only a half dozen lines of code > were required in img2enc. The function for creating directories already > existed in hlsenc.c but I've moved into utils.c as I presumed that was a > more generic location for it. > > All comments appreciated. > > Thanks ad Regards, > Alan. > > > On 17/12/17 22:46, Carl Eugen Hoyos wrote: > >2017-12-17 23:41 GMT+01:00 Dr Alan Barclay <alan@escribe.co.uk>: > > > >>Please would someone with an interest in img2enc take a look > >>at my minor feature addition and consider committing it to the > >>main line for me. > >To be acceptable, the patch has to be split in two and please > >move the definition into internal.h > > > >Carl Eugen > >_______________________________________________ > >ffmpeg-devel mailing list > >ffmpeg-devel@ffmpeg.org > >http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > hlsenc.c | 35 +---------------------------------- > internal.h | 7 +++++++ > utils.c | 33 +++++++++++++++++++++++++++++++++ > 3 files changed, 41 insertions(+), 34 deletions(-) > 9560fd03958f79f77b01c0e02c55d98e3dc7b937 0001-Move-mkdir_p-renamed-ff_mkdir_p-from-hlsenc.c-to-uti.patch > --- > libavformat/hlsenc.c | 35 +---------------------------------- > libavformat/internal.h | 7 +++++++ > libavformat/utils.c | 33 +++++++++++++++++++++++++++++++++ > 3 files changed, 41 insertions(+), 34 deletions(-) these patches are missing commit messages patches should be genrated with git format-patch or git send-email [...]
--- libavformat/img2enc.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/libavformat/img2enc.c b/libavformat/img2enc.c index b680676bff..a8ee064396 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 use_mkdir; int frame_pts; const char *muxer; int use_rename; @@ -114,6 +115,12 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt) img->img_number, img->path); return AVERROR(EINVAL); } + if (img->use_mkdir) { + char *temp_filename = av_strdup(filename); + const char *temp_path = av_dirname(temp_filename); + ff_mkdir_p(temp_path); + av_free(temp_filename); + } for (i = 0; i < 4; i++) { snprintf(img->tmp[i], sizeof(img->tmp[i]), "%s.tmp", filename); av_strlcpy(img->target[i], filename, sizeof(img->target[i])); @@ -212,6 +219,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 }, + { "mkdir", "make sub-dirs as required", OFFSET(use_mkdir), 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