当我运行此命令时,出现错误。如果我在没有管道的情况下运行,它就可以工作。
带管道
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'
无管道(工程)
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'
输出
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
考虑增加“analyzeduration”和“probesize”选项的值 pipeline:0: 找不到编解码器参数
我尝试过设置( link )
-analyzeduration100 -probesize 10000000
-analyzeduration 2147483647 -probesize 2147483647
还是没用。
最佳答案
MP4 容器不是管道的最佳选择。制作 MP4 文件的复用器可能会将某些信息放在文件末尾。正确的多路分解需要此信息,但如果使用管道则无法立即获得。但是,您有几个选择:
不要使用管道
我不知道为什么你首先需要使用管道。只需使用该文件作为普通输入即可:
ffmpeg -i input.mp4 ...
不要使用 MP4
如果您必须使用管道,请考虑使用其他容器(例如 .mkv
或 .ts
)作为输入。
重新混合 MP4,然后通过管道传输
如果您必须使用 MP4,那么一种方法是重新排列 moov 原子,使其位于文件的开头:
ffmpeg -i input.mp4 -c copy -movflags +faststart output.mp4
关于ffmpeg管道:0: could not find codec parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23002316/