代码之家  ›  专栏  ›  技术社区  ›  Jim Mischel

用C语言从图像制作视频的工作方法#

  •  18
  • Jim Mischel  · 技术社区  · 16 年前

    我正在尝试创建一个视频,不管是什么格式,只要它得到广泛支持,从一系列图像(.jpg、.bmp等)中创建。我的平台是Windows Server 2008,64位。如果我可以在我的C#程序中制作视频,那很好,但我并不反对将一系列图像文件写入目录,然后启动一个外部程序从这些图像制作视频。

    唯一的限制是:它必须在我的Windows Server 2008系统上工作,并且可以编写脚本。也就是说,没有需要操作员干预的GUI程序。

    我在StackOverflow上发现了许多类似的问题,并尝试了几种解决方案,都有不同程度的挫败感,没有一种成功。

      ffmpeg -r 1 -f image2 -i jpeg\*.jpg video.avi
    

    其中一个构建读取图像,然后由于防止数据执行而崩溃。另一个读取第一个文件,然后抛出一条错误消息,说“找不到适合jpeg/image2.jpg文件的编解码器”。这很有帮助。在任何情况下,FFMPEG看起来都不是Windows下的初学者。

    建议对以前的帖子给出一个答案 Splicer

    另一个答案表明 AviFile 代码项目中的库。这看起来很简单:围绕Windows AviFile子系统的包装器。除了软件包创建的AVI文件似乎包含所有帧外,在Windows Media Player中播放AVI时,只有第一帧显示。如果你试图创建一个压缩视频,程序会抛出一个异常。

    5 回复  |  直到 16 年前
        1
  •  11
  •   Jim Mischel    16 年前

    在使用它一段时间并查看了x264和VideoLan之后,我回到了拼接器。原来这个神秘的错误消息是由我的代码中的错误引起的。

    看起来拼接器可以实现我想要的功能:通过编程从一系列图像创建视频。

    感谢所有回应的人。

        2
  •  6
  •   Chris Holmes    16 年前

    我有直接的经验在一个C#应用程序中使用VideoLan做以下两件事:

    事实上,VideoLan有一个命令行界面是一件好事。VLC支持禁用任何可视元素的命令行选项;因此,VLC GUI不会弹出,命令行窗口也不会弹出。因此,在C#应用程序中,您可以将与视频相关的工作外包给VLC客户端。C#具有Process类,可以为您管理vlc.exe实例。这最终是一个非常巧妙的解决方案。

        3
  •  1
  •   U62    16 年前

    在Windows上处理视频(编码和播放)是一个真正的泥潭。而且.NET根本帮不上你的忙——你总是在PInvoking/COM上互操作本机API,或者使用别人为实现这一点而构建的.NET包装器。

    x264 library that is part of the videolan project . 这为您提供了一个自包含的C库,您可以使用PInvoke,而不必担心在服务器上安装和DirectShow垃圾。它将生成H.264格式的视频,据我所知,它可以在Flash中播放。

        4
  •  0
  •   Tometzky    16 年前

    我用过 mplayer

    mencoder mf://*.tga -mf fps=25:type=tga \
      -audiofile /tmp/test.mp3 -oac copy \
      -of lavf -ovc lavc \          
      -lavcopts vcodec=msmpeg4v2:mbd=2:mv0:trell:cbp:last_pred=3:vbitrate=3000 \
      -o /tmp/test.avi
    

    我知道mplayer确实有Windows版本。

        5
  •  -2
  •   1-800-RUGS    14 年前

    您可以将希望包含在视频中的所有图像复制到剪贴板中,并将其导入Windows Live影音制作(当然是动态的!),然后为您编译,而不必费心费力!

    所有这些都可以通过代码完成,但通过这种方式,您不必自己创建它。正如您所说的,平台是Windows,所有Windows公司都安装了Windows Live影音制作,因此使用您的应用程序的任何人都不会遇到问题,除非

    a) 他们卸载了Windows Live影音制作

    b) 他们使用的电脑运行的Windows版本已经超过8或9年了。。。