ffmpeg pipe:0: could not find codec parameters

17,199

MP4 container is not the best choice for piping. The muxer that made the MP4 file may place certain info at the end of the file. This info is required for proper demuxing, but is not immediately available if using a pipe. However, you have a few options:

Don't use a pipe

I don't know why you need to use a pipe in the first place. Just use the file as a normal input:

ffmpeg -i input.mp4 ...

Don't use MP4

If you must use a pipe then consider using some other container such as .mkv or .ts for your input.

Re-mux your MP4 then pipe

If you must use MP4 then one method is to re-arrange the moov atom so it is at the beginning of the file:

ffmpeg -i input.mp4 -c copy -movflags +faststart output.mp4
Share:
17,199

Related videos on Youtube

dre
Author by

dre

(your about me is currently blank)

Updated on June 18, 2022

Comments

  • dre
    dre about 2 years

    When i run this command i get an error. If i run without the pipe, it works.

    With Pipe

    cat mymovie.m4v | ffmpeg -i pipe:0 -an -analyzeduration 1000000 -f image2 -vf 
    "select='eq(pict_type,PICT_TYPE_I)'" -vsync vfr 'public/files/thumb%04d.png'
    

    Without Pipe (Works)

    ffmpeg -i mymovie.m4v -an -analyzeduration 2147483647 -probesize 2147483647 -f image2 -vf 
    "select='eq(pict_type,PICT_TYPE_I)'" -vsync vfr 'public/files/thumb%04d.png'
    

    Output

    ffmpeg version 2.2 Copyright (c) 2000-2014 the FFmpeg developers
    built on Apr 10 2014 17:50:46 with Apple LLVM version 5.1 (clang-503.0.38) 
    (based on LLVM 3.4svn)
    configuration: --prefix=/usr/local/Cellar/ffmpeg/2.2 
    --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree 
    --enable-hardcoded-tables --enable-avresample --enable-vda --cc=clang 
    --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame 
    --enable-libxvid --enable-libfreetype --enable-libtheora --enable-libvorbis 
    --enable-libvpx --enable-librtmp --enable-libopencore-amrnb --enable-libopencore-amrwb
    --enable-libvo-aacenc --enable-libass --enable-ffplay --enable-libspeex 
    --enable-libschroedinger --enable-libfdk-aac --enable-libopus --enable-frei0r 
    --enable-libopenjpeg --extra-cflags='-
    
    I/usr/local/Cellar/openjpeg/1.5.1_1/include/openjpeg-1.5 '
      libavutil      52. 66.100 / 52. 66.100
      libavcodec     55. 52.102 / 55. 52.102
      libavformat    55. 33.100 / 55. 33.100
      libavdevice    55. 10.100 / 55. 10.100
      libavfilter     4.  2.100 /  4.  2.100
      libavresample   1.  2.  0 /  1.  2.  0
      libswscale      2.  5.102 /  2.  5.102
      libswresample   0. 18.100 /  0. 18.100
      libpostproc    52.  3.100 / 52.  3.100
    
    [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fd87b80f000] stream 0, offset 0x2c: partial file
    [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fd87b80f000] Could not find codec parameters for stream 0
    (Video: h264 (avc1 / 0x31637661), 1280x720, 3310 kb/s): unspecified pixel format
    

    Consider increasing the value for the 'analyzeduration' and 'probesize' options pipe:0: could not find codec parameters

    I have tried setting (link)

    -analyzeduration100 -probesize 10000000 
    -analyzeduration 2147483647 -probesize 2147483647
    

    Still didn't work.

  • Martin Ždila
    Martin Ždila over 7 years
    Another option is to set -frag_size 1048576.
  • lnstadrum
    lnstadrum over 2 years
    Indeed, using WEBM containers instead MP4 fixed the issue in my project. Looks like this is simply because there is some information written at the end of MP4, and ffmpeg needs to read the input till the end to be able to start producing the output. This is why tweaking different options related to buffers sizes will not help once you get an MP4 big enough.