[FFmpeg-devel] [PATCH] libavformat/segment: strftime date sub-directories
Steven Liu
lq at chinaffmpeg.org
Wed Sep 26 01:24:25 EEST 2018
> On Sep 26, 2018, at 00:52, James Courtier-Dutton <james.dutton at gmail.com> wrote:
>
>>
>> Automatically create sub-directories if needed based on date.
>> E.g.
>> ffmpeg ... -timelimit 2147483647 -f segment -strftime 1 -segment_time 10
>> "%Y/%m/%d/%Y-%m-%d_%H-%M-%S.mkv"
>>
>>
>>
>>
>> Maybe you want add an option named “strftime_mkdir” not
>> “use_localtime_mkdir”.
>> You should add the option describe into doc/muxer.texi
>>
>> reference to: https://trac.ffmpeg.org/ticket/7393
>>
>>> ffmpeg-devel mailing list
>>> ffmpeg-devel at ffmpeg.org
>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>> Thanks
>> Steven
>>
>> Hi Steven,
>
> I don't understand what you are suggesting?
Signed-off-by: James Courtier-Dutton <James.Dutton at gmail.com>
---
libavformat/segment.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/libavformat/segment.c b/libavformat/segment.c
index 7fb4dc7..57fce8d 100644
--- a/libavformat/segment.c
+++ b/libavformat/segment.c
@@ -200,12 +200,27 @@ static int set_segment_filename(AVFormatContext *s)
if (seg->use_strftime) {
time_t now0;
struct tm *tm, tmpbuf;
+ const char *dir;
+ char *fn_copy;
time(&now0);
tm = localtime_r(&now0, &tmpbuf);
if (!strftime(buf, sizeof(buf), s->url, tm)) {
av_log(oc, AV_LOG_ERROR, "Could not get segment filename with strftime\n");
return AVERROR(EINVAL);
}
+ /* Automatically create directories if needed */
+ /* E.g. %Y/%m/%d/%Y-%m-%d_%H-%M-%S.mkv */
+ fn_copy = av_strdup(buf);
+ if (!fn_copy) {
+ return AVERROR(ENOMEM);
+ }
+ dir = av_dirname(fn_copy);
+ if (ff_mkdir_p(dir) == -1 && errno != EEXIST) {
+ av_log(oc, AV_LOG_ERROR, "Could not create directory %s with use_localtime_mkdir\n", dir);
==========look at here, what dose this error message mean?
+ av_free(fn_copy);
+ return AVERROR(errno);
+ }
+ av_free(fn_copy);
} else if (av_get_frame_filename(buf, sizeof(buf),
s->url, seg->segment_idx) < 0) {
av_log(oc, AV_LOG_ERROR, "Invalid segment filename template '%s'\n", s->url);
--
2.7.4
> There are no extra command line options to enable this feature.
> It just works it out from the format string.
> If you put a "/" in the format string, it creates the directories for you.
> As per my example command line above.
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Thanks
Steven
More information about the ffmpeg-devel
mailing list