On Mon, Dec 05, 2016 at 07:06:35AM -0700, Roger Pack wrote: > On 12/2/16, James Almer <jamr...@gmail.com> wrote: > > On 12/2/2016 10:06 PM, Roger Pack wrote: > >> On 11/25/16, Roger Pack <rogerdpa...@gmail.com> wrote: > >>> On 11/18/16, Roger Pack <rogerdpa...@gmail.com> wrote: > >>>> On 11/15/16, James Almer <jamr...@gmail.com> wrote: > >>>>> On 11/10/2016 4:26 PM, Roger Pack wrote: > >>>>>> On 11/1/16, James Almer <jamr...@gmail.com> wrote: > >>>>>>>> On 11/1/2016 6:43 PM, James Almer wrote: > >>>>>>>>>> On 10/25/2016 9:38 PM, Roger Pack wrote: > >>>>>>>>>>>> From e8cac5c7de18766ce0f8f286f7dc140b82129df2 Mon Sep 17 > >>>>>>>>>>>> 00:00:00 > >>>>>>>>>>>> 2001 > >>>>>>>>>>>> From: rogerdpack <rogerpack2...@gmail.com> > >>>>>>>>>>>> Date: Tue, 25 Oct 2016 18:33:12 -0600 > >>>>>>>>>>>> Subject: [PATCH 1/2] img2 encoder: allow %t in filename, based > >>>>>>>>>>>> on > >>>>>>>>>>>> patch > >>>>>>>>>>>> from > >>>>>>>>>>>> Yuval Adam > >>>>>>>>>>>> > >>>>>>>>>>>> Signed-off-by: rogerdpack <rogerpack2...@gmail.com> > >>>>>>>>>>>> --- > >>>>>>>>>>>> doc/muxers.texi | 13 +++++++++++++ > >>>>>>>>>>>> libavformat/avformat.h | 3 ++- > >>>>>>>>>>>> libavformat/hlsenc.c | 6 +++--- > >>>>>>>>>>>> libavformat/img2enc.c | 6 ++++-- > >>>>>>>>>>>> libavformat/utils.c | 42 > >>>>>>>>>>>> ++++++++++++++++++++++++++++++++++++++---- > >>>>>>>>>>>> 5 files changed, 60 insertions(+), 10 deletions(-) > >>>>>>>>>>>> > >>>>>>>>>>>> diff --git a/doc/muxers.texi b/doc/muxers.texi > >>>>>>>>>>>> index 0d856db..0c3a198 100644 > >>>>>>>>>>>> --- a/doc/muxers.texi > >>>>>>>>>>>> +++ b/doc/muxers.texi > >>>>>>>>>>>> @@ -619,6 +619,12 @@ If the pattern contains "%d" or > >>>>>>>>>>>> "%0@var{N}d", > >>>>>>>>>>>> the > >>>>>>>>>>>> first filename of > >>>>>>>>>>>> the file list specified will contain the number 1, all the > >>>>>>>>>>>> following > >>>>>>>>>>>> numbers will be sequential. > >>>>>>>>>>>> > >>>>>>>>>>>> +If the pattern contains "%t", the frame's timestamps will be > >>>>>>>>>>>> inserted > >>>>>>>>>>>> +in the filename like "00.00.00.000" for hours, minutes, > >>>>>>>>>>>> seconds, > >>>>>>>>>>>> +and milliseconds. > >>>>>>>>>>>> + > >>>>>>>>>>>> +The "%t" and "%d" patterns may be used simultaneously. > >>>>>>>>>>>> + > >>>>>>>>>>>> The pattern may contain a suffix which is used to automatically > >>>>>>>>>>>> determine the format of the image files to write. > >>>>>>>>>>>> > >>>>>>>>>>>> @@ -664,6 +670,13 @@ can be used: > >>>>>>>>>>>> ffmpeg -f v4l2 -r 1 -i /dev/video0 -f image2 -strftime 1 > >>>>>>>>>>>> "%Y-%m-%d_%H-%M-%S.jpg" > >>>>>>>>>>>> @end example > >>>>>>>>>>>> > >>>>>>>>>>>> +The following example uses the timestamp parameter to generate > >>>>>>>>>>>> one > >>>>>>>>>>>> +image file per video frame from the input, and name it > >>>>>>>>>>>> including > >>>>>>>>>>>> its > >>>>>>>>>>>> original > >>>>>>>>>>>> +timestamp. > >>>>>>>>>>>> +@example > >>>>>>>>>>>> +ffmpeg -i in.avi -vsync vfr -copyts img-%t.jpg > >>>>>>>>>>>> +@end example > >>>>>>>>>>>> + > >>>>>>>>>>>> @subsection Options > >>>>>>>>>>>> > >>>>>>>>>>>> @table @option > >>>>>>>>>>>> diff --git a/libavformat/avformat.h b/libavformat/avformat.h > >>>>>>>>>>>> index f9f4d72..7f39698 100644 > >>>>>>>>>>>> --- a/libavformat/avformat.h > >>>>>>>>>>>> +++ b/libavformat/avformat.h > >>>>>>>>>>>> @@ -2780,10 +2780,11 @@ void av_dump_format(AVFormatContext *ic, > >>>>>>>>>>>> * @param path numbered sequence string > >>>>>>>>>>>> * @param number frame number > >>>>>>>>>>>> * @param flags AV_FRAME_FILENAME_FLAGS_* > >>>>>>>>>>>> + * @param ts frame timestamp in AV_TIME_BASE fractional > >>>>>>>>>>>> seconds. > >>>>>>>>>>>> * @return 0 if OK, -1 on format error > >>>>>>>>>>>> */ > >>>>>>>>>>>> int av_get_frame_filename2(char *buf, int buf_size, > >>>>>>>>>>>> - const char *path, int number, int > >>>>>>>>>>>> flags); > >>>>>>>>>>>> + const char *path, int number, int > >>>>>>>>>>>> flags, > >>>>>>>>>>>> int64_t ts); > >>>>>>>>>> > >>>>>>>>>> Uhh, what? did you just break API modifying a public function? > >>>>>>>>>> > >>>>>>>> > >>>>>>>> For the record, this was reverted. > >>>>>>>> > >>>>>>>> Shouldn't be hard to solve, i think. Just add a new > >>>>>>>> ff_get_frame_filename() > >>>>>>>> function to internal.h with this new signature, at least for now and > >>>>>>>> for > >>>>>>>> this > >>>>>>>> feature, to avoid adding a third public function doing the same > >>>>>>>> thing > >>>>>>>> unless > >>>>>>>> absolutely necessary. > >>>>>> OK see attached. Wasn't sure if I should duplicate docs or not, feel > >>>>>> free to modify. > >>>>>> Cheers! > >>>>>> -roger- > >>>>>> > >>>>>> > >>>>>> 0001-img2-encoder-allow-t-in-filepattern-based-on-patch-f.patch > >>>>>> > >>>>>> > >>>>>> From 8287f1ca543f764e9e88659ee5a07873860d607d Mon Sep 17 00:00:00 2001 > >>>>>> From: rogerdpack <rogerpack2...@gmail.com> > >>>>>> Date: Thu, 10 Nov 2016 12:24:49 -0700 > >>>>>> Subject: [PATCH] img2 encoder: allow %t in filepattern, based on patch > >>>>>> from > >>>>>> Yuval Adam > >>>>>> > >>>>>> Signed-off-by: rogerdpack <rogerpack2...@gmail.com> > >>>>>> --- > >>>>>> doc/muxers.texi | 13 +++++++++++++ > >>>>>> libavformat/img2enc.c | 8 +++++--- > >>>>>> libavformat/internal.h | 18 ++++++++++++++++++ > >>>>>> libavformat/utils.c | 45 > >>>>>> ++++++++++++++++++++++++++++++++++++++++++--- > >>>>>> 4 files changed, 78 insertions(+), 6 deletions(-) > >>>>> > >>>>> No hlsenc.c? > >>>> > >>>> Yeah, good idea, moved them all to use the ff_get_frame_filename3 now > >>>> just so people would realize the extra parameter is available. > >>>> > >>>>>> > >>>>>> diff --git a/doc/muxers.texi b/doc/muxers.texi > >>>>>> index 806182a..670fcca 100644 > >>>>>> --- a/doc/muxers.texi > >>>>>> +++ b/doc/muxers.texi > >>>>>> @@ -622,6 +622,12 @@ If the pattern contains "%d" or "%0@var{N}d", the > >>>>>> first filename of > >>>>>> the file list specified will contain the number 1, all the following > >>>>>> numbers will be sequential. > >>>>>> > >>>>>> +If the pattern contains "%t", the frame's timestamps will be inserted > >>>>>> +in the filename like "00.00.00.000" for hours, minutes, seconds, > >>>>>> +and milliseconds. > >>>>>> + > >>>>>> +The "%t" and "%d" patterns may be used simultaneously. > >>>>>> + > >>>>>> The pattern may contain a suffix which is used to automatically > >>>>>> determine the format of the image files to write. > >>>>>> > >>>>>> @@ -667,6 +673,13 @@ can be used: > >>>>>> ffmpeg -f v4l2 -r 1 -i /dev/video0 -f image2 -strftime 1 > >>>>>> "%Y-%m-%d_%H-%M-%S.jpg" > >>>>>> @end example > >>>>>> > >>>>>> +The following example uses the timestamp parameter to generate one > >>>>>> +image file per video frame from the input, and name it including its > >>>>>> original > >>>>>> +timestamp. > >>>>>> +@example > >>>>>> +ffmpeg -i in.avi -vsync vfr -copyts img-%t.jpg > >>>>>> +@end example > >>>>>> + > >>>>>> @subsection Options > >>>>>> > >>>>>> @table @option > >>>>>> diff --git a/libavformat/img2enc.c b/libavformat/img2enc.c > >>>>>> index 1297b1a..651739e 100644 > >>>>>> --- a/libavformat/img2enc.c > >>>>>> +++ b/libavformat/img2enc.c > >>>>>> @@ -80,10 +80,12 @@ static int write_packet(AVFormatContext *s, > >>>>>> AVPacket > >>>>>> *pkt) > >>>>>> VideoMuxData *img = s->priv_data; > >>>>>> AVIOContext *pb[4]; > >>>>>> char filename[1024]; > >>>>>> - AVCodecParameters *par = s->streams[pkt->stream_index]->codecpar; > >>>>>> + AVStream *stream = s->streams[ pkt->stream_index ]; > >>>>>> + AVCodecParameters *par = stream->codecpar; > >>>>>> const AVPixFmtDescriptor *desc = > >>>>>> av_pix_fmt_desc_get(par->format); > >>>>>> int i; > >>>>>> int nb_renames = 0; > >>>>>> + int64_t ts = av_rescale_q(pkt->pts, stream->time_base, > >>>>>> AV_TIME_BASE_Q); > >>>>>> > >>>>>> if (!img->is_pipe) { > >>>>>> if (img->update) { > >>>>>> @@ -97,9 +99,9 @@ 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 (av_get_frame_filename2(filename, sizeof(filename), > >>>>>> img->path, > >>>>>> + } else if (av_get_frame_filename3(filename, sizeof(filename), > >>>>>> img->path, > >>>>>> img->img_number, > >>>>>> - > >>>>>> AV_FRAME_FILENAME_FLAGS_MULTIPLE) < 0 && > >>>>>> + > >>>>>> AV_FRAME_FILENAME_FLAGS_MULTIPLE, ts) < 0 && > >>>>>> img->img_number > 1) { > >>>>>> av_log(s, AV_LOG_ERROR, > >>>>>> "Could not get frame filename number %d from > >>>>>> pattern > >>>>>> '%s' (either set updatefirst or use a pattern like %%03d within the > >>>>>> filename pattern)\n", > >>>>>> diff --git a/libavformat/internal.h b/libavformat/internal.h > >>>>>> index da64c64..d7174c5 100644 > >>>>>> --- a/libavformat/internal.h > >>>>>> +++ b/libavformat/internal.h > >>>>>> @@ -356,6 +356,24 @@ void ff_reduce_index(AVFormatContext *s, int > >>>>>> stream_index); > >>>>>> enum AVCodecID ff_guess_image2_codec(const char *filename); > >>>>>> > >>>>>> /** > >>>>>> + * Return in 'buf' the path with '%d' replaced by a number. > >>>>>> + * > >>>>>> + * Also handles the '%0nd' format where 'n' is the total number > >>>>>> + * of digits and '%%'. > >>>>>> + * Also handles the '%t' format where 't' is the timestamp. > >>>>>> + * > >>>>>> + * @param buf destination buffer > >>>>>> + * @param buf_size destination buffer size > >>>>>> + * @param path numbered sequence string > >>>>>> + * @param number frame number > >>>>>> + * @param flags AV_FRAME_FILENAME_FLAGS_* > >>>>>> + * @param ts frame timestamp in AV_TIME_BASE fractional seconds. > >>>>>> + * @return 0 if OK, -1 on format error > >>>>>> + */ > >>>>>> +int av_get_frame_filename3(char *buf, int buf_size, > >>>>> > >>>>> Since it's internal it needs to have an ff_ prefix, not av_. > >>>> > >>>> OK hopefully fixed with the attached, thanks. > >>> > >>> Ping... > >> > >> ping2... > > > > I said that if it's technically the same as the previously committed > > code then it should be good to go since it's already reviewed. > > > > Do you have write access, or should i push this? > > I don't so please push it.
if you want write access, send me your public ssh key, you are in MAINTAINERs [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB No snowflake in an avalanche ever feels responsible. -- Voltaire
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel