[FFmpeg-user] Need help resolving concat error

Peter White peter.white at posteo.net
Sun Jul 24 17:49:30 EEST 2016


Mark Strecker wrote:
 >  Here is the command line we tried originally (this is the one we 
intend to
 > use and works on Windows ... except the file input of course):
 >
 > *ffmpeg -safe 0 -analyzeduration 4000000000 -probesize 4000000000 -i 
<(for
 > f in ./*.MOV; do echo "file '$PWD/$f'"; done) -map 0:0 -map 0:1 -map 0:2
 > -c:v copy -c:a copy -map_metadata 0 -copy_unknown -disposition:a:0 
default
 > -disposition:a:1 default OUT.MOV*

I am actually sceptical that this command does exactly what you think
it does. From my understanding of the -i option it has to come before
each file that is intended as input. See the Synopsis from the man
page:

"ffmpeg [global_options] {[input_file_options] -i input_file} ... 
{[output_file_options] output_file} ..."

so "[input_file_options] -i input_file" may repeat but the "-i" is not
optional.

Since you only provide one -i followed by a list of files, only the
first one will be used as input with ffmpeg taking the second from
that list as the first output file.
And BTW:
<(for f in ./*.MOV; do echo "file '$PWD/$f'"; done)

is a very fancy way of saying *.MOV. ;) Essentially that is what
happens there:

ffmpeg -i *.MOV

Say you have the following files intended as input:
1.MOV 2.MOV 3.MOV
that above command snippet expands to:
ffmpeg -i 1.MOV 2.MOV 3.MOV

ffmpeg will use 1.MOV as input with 2.MOV being the first *output*. So
you most certainly have overwritten all .MOV files but the first in
the input list.

Also, keep in mind that OS X filesystems are most likely case
sensitive, meaning that there is a difference between *.mov and *.MOV.
Windows is inherently case insensitive. Almost all other systems do
actually care about letter case.

 > So we changed to command to use an input file and simplify a bit. It 
seems
 > to get further, but we now get a codec error :
 >
 > *ffmpeg -i files.txt -c:v copy -c:a copy OUT.MOV*

I suppose files.txt is a list of one file path per line? I believe
this is not accepted as input by ffmpeg. It expects media files not
text files listing those.

Look at this output:
 > *Input #0, tty, from 'files.txt':*
 >
 > *  Duration: 00:00:00.04, bitrate: 29 kb/s*
 >
 > *    Stream #0:0: Video: ansi, pal8, 640x400, 25 fps, 25 tbr, 25 tbn, 25
 > tbc*

So input file #0, files.txt, is interpreted as a Video of 40 ms length.
I guess that is not intended.

Also have a look at what Cley Faye wrote in their reply. To concatenate
files you need the concat filter. Just using "-c:v copy -c:a copy" only
gets you what ffmpeg deems the best quality input. And it will be only
one input stream at that. So the output will contain exactly one video
and one audio stream.


Peter


More information about the ffmpeg-user mailing list