我想在Mandelbrot套装上创建一个缩放的电影。为此,我想以ppm格式创建图像数据,然后使用popen将其传输到ffmpeg。如果我先将ppm保存到光盘然后通过终端运行ffmpeg,则以下命令有效。
ffmpeg -i out.ppm -r 1/5 out.mp4
以下是我在代码中尝试做的事情。
FILE* p = popen("ffmpeg -i /dev/stdin -r 1/5 out.mp4", "w");
ppm_pipe(p, pix_buffers[0], w, h);
fclose(p);
...
void ppm_pipe(FILE* f, unsigned char* pix, int w, int h)
{
assert(fprintf(f, "P6 %d %d 255\n", w, h) > 0);
size_t sz = 3 * (size_t)w * (size_t)h;
assert(fwrite(pix, 1, sz, f) == sz);
}
我收到以下错误消息。
ffmpeg version 2.5.8-0ubuntu0.15.04.1 Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.9.2 (Ubuntu 4.9.2-10ubuntu13)
configuration: --prefix=/usr --extra-version=0ubuntu0.15.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --shlibdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --enable-shared --disable-stripping --enable-avresample --enable-avisynth --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libshine --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libwavpack --enable-libwebp --enable-libxvid --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzvbi --enable-libzmq --enable-frei0r --enable-libvpx --enable-libx264 --enable-libsoxr --enable-gnutls --enable-openal --enable-libopencv --enable-librtmp --enable-libx265
libavutil 54. 15.100 / 54. 15.100
libavcodec 56. 13.100 / 56. 13.100
libavformat 56. 15.102 / 56. 15.102
libavdevice 56. 3.100 / 56. 3.100
libavfilter 5. 2.103 / 5. 2.103
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 3.100 / 53. 3.100
/dev/stdin: Invalid data found when processing input
答案 0 :(得分:0)
PPM标题部分之间需要换行符'\ n',即P6和宽度/长度,以及宽度/长度和最大值。所以格式字符串应该是:
"P6\n%d %d\n255\n"