我正在尝试让 ffmpeg 将多个单独的 JPEG 图像编码为 Android 上的视频。我已经为 Android 成功构建了它(请参阅本文末尾的配置字符串)。
我可以使用随机生成的帧内容对 h.263+ 视频进行编码,否则 ffmpeg 似乎运行良好。
A similar question建议以下代码足以将图像加载到 AvFrame
中:
// Make sure we have the codecs
av_register_all();
AVFormatContext *pFormatCtx;
int ret = av_open_input_file(&pFormatCtx, imageFileName, NULL, 0, NULL);
if (ret != 0) {
printf("Can't open image file '%s': code %d, %s",
imageFileName, ret, strerror(AVERROR(ret)));
}
以上返回正确的绝对文件路径和错误:
Failed '/sdcard/DCIM/Camera/IMG083.jpg': code -1094995529, Unknown error: 1094995529
顺便说一句,如果我省略 av_register_all()
,它会返回错误 2。
我已经使用以下参数编译了 ffmpeg:
./configure --target-os=linux --prefix=$PREFIX --enable-cross-compile --extra-libs="-lgcc" --arch=arm --cc=$PREBUILT/bin/arm-linux-androideabi-gcc --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- --nm=$PREBUILT/bin/arm-linux-androideabi-nm --sysroot=$PLATFORM --extra-cflags=" -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -finline-limit=300 $OPTIMIZE_CFLAGS " --enable-shared --enable-static --extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog" --disable-everything --enable-demuxer=mov --enable-demuxer=h264 --disable-ffplay --enable-protocol=file --enable-avformat --enable-avcodec --enable-decoder=mjpeg --enable-decoder=png --enable-parser=h264 --enable-encoder=h263 --enable-encoder=h263p --disable-network --enable-zlib --disable-avfilter --disable-avdevice
欢迎提出任何建议!
最佳答案
此错误表明 JPEG 所需的解码器不是与 ffmpeg 一起构建的。我相信启用 mjpeg
足以让它工作,但出于挫败感,我只是启用了所有东西并且它工作了。
我建议将 --enable-decoder=mjpeg
添加到配置字符串并使用 NDK for Android 重建库。如果这不起作用,请删除 --disable-everything
并单独删除不兼容的组件,直到它成功编译(我相信只需添加 --disable-indev
就可以为 Android 工作) .
关于android - 在 ffmpeg 中读取 JPEG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7114629/