[FFmpeg-devel] [PATCH] fftools/cmdutils: add an option to append to the report file

Dan Zwell dzwell at gmail.com
Tue Feb 1 13:58:38 EET 2022


There are times when we want ffmpeg to log, but we don't want it to
overwrite the log file. In addition to the use case described in the
ticket, a third party tool that invokes ffmpeg may write additional
information to the log file, such as why the encoding options were
chosen.

This implements:
https://trac.ffmpeg.org/ticket/3059

Note: unknown keys are ignored, so adding a new "append" key does not
break backward compatibility.

Signed-off-by: Dan Zwell <devel at zwell.net>
---
  doc/fftools-common-opts.texi | 3 +++
  fftools/cmdutils.c           | 8 +++++++-
  2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/doc/fftools-common-opts.texi b/doc/fftools-common-opts.texi
index d9145704d6..4c6c297315 100644
--- a/doc/fftools-common-opts.texi
+++ b/doc/fftools-common-opts.texi
@@ -270,6 +270,9 @@ of the program, @code{%t} is expanded to a 
timestamp, @code{%%} is expanded
  to a plain @code{%}
  @item level
  set the log verbosity level using a numerical value (see 
@code{-loglevel}).
+ at item append
+ at code{append=1} tells ffmpeg to append to a report file if it exists 
instead
+of overwriting it.
  @end table
   For example, to output a report to a file named @file{ffreport.log}
diff --git a/fftools/cmdutils.c b/fftools/cmdutils.c
index 4b50e15eef..350329ee8b 100644
--- a/fftools/cmdutils.c
+++ b/fftools/cmdutils.c
@@ -983,6 +983,7 @@ static int init_report(const char *env)
      time_t now;
      struct tm *tm;
      AVBPrint filename;
+    int append = 0;
       if (report_file) /* already opened */
          return 0;
@@ -1012,6 +1013,8 @@ static int init_report(const char *env)
                  exit_program(1);
              }
              envlevel = 1;
+        } else if (!strcmp(key, "append")) {
+            append = strtol(val, NULL, 10);
          } else {
              av_log(NULL, AV_LOG_ERROR, "Unknown key '%s' in 
FFREPORT\n", key);
          }
@@ -1032,7 +1035,10 @@ static int init_report(const char *env)
      if (!envlevel)
          report_file_level = FFMAX(report_file_level, prog_loglevel);
  -    report_file = fopen(filename.str, "w");
+    if (append)
+        report_file = fopen(filename.str, "a");
+    else
+        report_file = fopen(filename.str, "w");
      if (!report_file) {
          int ret = AVERROR(errno);
          av_log(NULL, AV_LOG_ERROR, "Failed to open report \"%s\": %s\n",
-- 
2.25.1



More information about the ffmpeg-devel mailing list