[FFmpeg-devel] [PATCH] libavformat/segment: strftime date sub-directories
James Dutton
james.dutton at gmail.com
Tue Dec 21 23:39:37 EET 2021
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"
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 e9b0aa4fa8..86ca243ae6 100644
--- a/libavformat/segment.c
+++ b/libavformat/segment.c
@@ -198,12 +198,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);
+ 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.25.1
More information about the ffmpeg-devel
mailing list