gpt4 book ai didi

c++ - 将 ppm 文件通过管道传输到 ffmpeg 以在 C++ 中创建电影

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:15 25 4
gpt4 key购买 nike

我想制作一部关于 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

最佳答案

您需要在 PPM header 部分之间换行“\n”,即 P6 和宽度/长度,以及宽度/长度和最大值。所以格式字符串应该是:

"P6\n%d %d\n255\n"

关于c++ - 将 ppm 文件通过管道传输到 ffmpeg 以在 C++ 中创建电影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32024859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com