Opened 5 years ago

#4290 new enhancement

Don't abort when existing output file is detected; instead skip to next output file

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


Summary of the bug: By default, FFmpeg prompts the user when it detects an existing output file. If the user answers no, the program aborts. (The -n option has the same effect.) This is inconvenient when the command line contains several output files, some of which exist and some of which do not, and the user simply wants to create all non-existing output files. This is a very common use case when, for example, you are splitting a huge input file into several output files, the process gets interrupted partway through, and you want to resume it.

How to reproduce:

$ ls *.mkv
$ ffmpeg -i input.avi -ss 2.80813 -to 224.985 -acodec flac -c:v libx264 -n output1.mkv -ss 741.965 -to 958.609 -acodec flac -c:v libx264 -n output2.mkv
ffmpeg version N-43893-ga73c411-    Copyright (c) 2000-2015 the FFmpeg developers
  built on Jan 30 2015 01:32:44 with gcc 4.9.2 (Debian 4.9.2-10)
  configuration: --enable-gpl --enable-version3 --disable-shared --disable-debug --enable-runtime-cpudetect --enable-libmp3lame --enable-libx264 --enable-libx265 --enable-libwebp --enable-libspeex --enable-libvorbis --enable-libvpx --enable-libfreetype --enable-fontconfig --enable-libxvid --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-gray --enable-libopenjpeg --enable-libopus --enable-libass --enable-gnutls --enable-libvidstab --cc=gcc-4.9
  libavutil      54. 18.100 / 54. 18.100
  libavcodec     56. 21.101 / 56. 21.101
  libavformat    56. 19.100 / 56. 19.100
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5.  9.101 /  5.  9.101
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Guessed Channel Layout for  Input Stream #0.1 : stereo
Input #0, avi, from 'input.avi':
    encoder         : Lavf56.4.101
  Duration: 02:42:40.58, start: 0.000000, bitrate: 16035 kb/s
    Stream #0:0: Video: ffv1 (FFV1 / 0x31564646), bgr0, 384x256, 14614 kb/s, 59.83 fps, 59.83 tbr, 59.83 tbn, 59.83 tbc
    Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2 channels, s16, 1411 kb/s
File 'output1.mkv' already exists. Exiting.

Above is a minimal example with just two output files. The problem is, of course, more serious when the command line contains dozens of output files.

Suggested fix: In interactive mode, when asking the user if a given output file is to be overwritten, there should be three choices: (y)es, (n)o, and (a)bort. (N)o should simply skip the current output file, and processing should continue with the next output file on the command line. (This should be the default option.) (A)bort should cause FFmpeg to immediately quit. The -n command-line option should have the same effect as the user typing (n)o to every prompt. If there is any use case for the old behaviour, then another command line option such as -abort could be added which has the same effect as the user typing (a)bort to every prompt.

Change History (0)

Note: See TracTickets for help on using tickets.