Opened 2 years ago

Last modified 18 months ago

#9525 new defect

File truncate option not honored

Reported by: toots Owned by:
Priority: normal Component: avformat
Version: git-master Keywords: file
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

Summary of the bug:

File protocol truncate option as described at: https://ffmpeg.org/ffmpeg-protocols.html#file is not honored

How to reproduce:

❯ git diff
diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c
index 807e783422..8712685fbb 100644
--- a/fftools/ffmpeg_opt.c
+++ b/fftools/ffmpeg_opt.c
@@ -2603,12 +2603,14 @@ loop_end:
         assert_file_overwrite(filename);

         /* open the file */
+        printf("truncate: %s\n", av_dict_get(of->opts, "truncate", NULL, 0)->value);
         if ((err = avio_open2(&oc->pb, filename, AVIO_FLAG_WRITE,
                               &oc->interrupt_callback,
                               &of->opts)) < 0) {
             print_error(filename, err);
             exit_program(1);
         }
+       printf("truncate: %p\n", av_dict_get(of->opts, "truncate", NULL, 0));
     } else if (strcmp(oc->oformat->name, "image2")==0 && !av_filename_number_test(filename))
         assert_file_overwrite(filename);

Then:

❯ ./ffmpeg -i /tmp/bla.aac -y -truncate 0 /tmp/bli.mp3
ffmpeg version n4.4.1-1-ga614b4c8ea Copyright (c) 2000-2021 the FFmpeg developers
  built with Apple clang version 13.0.0 (clang-1300.0.29.3)
  configuration: --enable-libmp3lame --enable-shared --prefix=/tmp/ffmpeg
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
[aac @ 0x15a00a200] Estimating duration from bitrate, this may be inaccurate
Input #0, aac, from '/tmp/bla.aac':
  Duration: 00:00:04.91, bitrate: 82 kb/s
  Stream #0:0: Audio: aac (LC), 44100 Hz, stereo, fltp, 82 kb/s
truncate: 0
truncate: 0x0
Stream mapping:
  Stream #0:0 -> #0:0 (aac (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
Output #0, mp3, to '/tmp/bli.mp3':
  Metadata:
    TSSE            : Lavf58.76.100
  Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp
    Metadata:
      encoder         : Lavc58.134.100 libmp3lame
size=      78kB time=00:00:04.93 bitrate= 129.7kbits/s speed= 101x
video:0kB audio:78kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.316923%

This keeps creating a new file, despite being confirmed that the option is indeed passed and consumed by the output context.

Change History (1)

comment:1 by Carl Eugen Hoyos, 18 months ago

Component: undeterminedavformat
Keywords: file added
Version: unspecifiedgit-master

I tested 29a9b12b10c91c638205da74f3330acd06517ae8 and I have no idea how this option was ever supposed to work.
Maybe Martin or Anton want to comment?

Note: See TracTickets for help on using tickets.