ffmpeg pipe:0: could not find codec parameters
Asked Answered
H

1

23

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.

Halden answered 11/4, 2014 at 2:12 Comment(1)
In my case -analyzeduration 2147483647 -probesize 2147483647 did work, but you have to place these options before specifying the input file with -i mymovie.m4v.Tinfoil
C
18

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
Carom answered 13/10, 2016 at 18:59 Comment(3)
Another option is to set -frag_size 1048576.Pittance
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.Ammonal
I am facing this same problem. I don't have the option to use a file as I want to create a thumbnail from a raw_data (in memory). Any other options?Dygal

© 2022 - 2024 — McMap. All rights reserved.