【问题标题】:Converting stream of jpg files to FLV stream将 jpg 文件流转换为 FLV 流
【发布时间】:2012-07-22 07:15:52
【问题描述】:

我使用可以由我的软件控制的 Panasonic hcm280a 相机,它会生成一个巨大的 jpeg 文件流,我想将此流转换为 FLV 流,最好具有良好的压缩比

FFMpeg 会这样做吗?我基本上是在寻找可以为我生成流媒体的现成开源软件(或商业软件)。同样,我的输入是来自相机服务器的 jpg 文件流。

任何见解或评论将不胜感激 谢谢

【问题讨论】:

标签: video compression camera flv


【解决方案1】:

this question 的回答确认 FFmpeg 能够从一系列图像构建视频。但是,那里没有给出详细信息。

在 FFmpeg 常见问题解答中您可以找到:

3.2 How do I encode single pictures into movies?

首先,按照数字顺序重命名您的图片。比如img1.jpg,img2.jpg,img3.jpg,... 那么你可以运行:

ffmpeg -f image2 -i img%d.jpg /tmp/a.mpg

请注意,%d 已替换为图像编号。

img%03d.jpg 表示序列img001.jpgimg002.jpg 等...

ffmpeg 读取的任何图像格式都使用相同的逻辑。

【讨论】:

  • 但是我有图像流,我没有一堆图片,并且在我运行网络摄像头时会出现图片,我想要一些在服务器上连续运行并将图片编码到流中的东西到达
  • 抱歉,我被“jpeg 文件”的表述弄糊涂了。
  • 然后你需要编译一个直接使用 ffmpeg 库 (libavcodec/libavformat) 的程序。命令行工具不能真正流式传输,尽管您可以通过将一定数量的 JPEG 文件分块为端到端播放的短流来伪造它。
【解决方案2】:

这不是专门回答您的问题,但www.doom9.org 是视频相关信息的绝佳来源,值得查看下载和指南

【讨论】:

    【解决方案3】:

    使用ffmpeg 进行操作。我假设您的框架名称为 frame0000.jpg, frame0001.jpg, ...

    ffmpeg -f image2 -r 1 -i frame%04d.jpg  -s 320x240 -y -an -r 24 out.flv
    

    -r 1告诉输入流是每秒一帧(每秒一张图片),选择你喜欢的 -s 320x240 缩放所有帧 -y -an 覆盖输出文件并禁用录音 -r 24 在输出流中有 24 fps

    您也可以考虑将-sameq 放在中间,以尽可能保持质量。

    要正确重命名所有框架,您可以使用这个 bash one liner:

    i=0 ; for f in *.jpg ; do mv "$f" $(printf "frame%04d.jpg" $i) ; i=$((i+1)) ; done
    

    【讨论】:

    • 不确定我们是否在同一个页面上,我猜你的方法是从一堆已经存储在硬盘上的 jpg 生成 FLV,对吗?我的 jpeg 在我的网络摄像头运行时到达,所以我不能假设它们都已经存在
    • 是的。这是否意味着您的相机会生成 MJPEG 流? en.wikipedia.org/wiki/Motion_JPEG。如果是这样,您也可以转换该流。可能像 -f mjpeg i streamfile 这样的东西会做。还是 V4L/V4L2 设备?然后你也可以抓取流,smth like, -f mjpeg -vd /dev/video0
    • 或者您的摄像头是否偶尔会写入额外的 JPEG?在这种情况下,我不知道解决方案。
    【解决方案4】:

    Motion 使用 ffmpeg 输出 flv 文件:http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome 您可以禁用运动检测并使其连续输出(参见 'output_all on' 'ffmpeg_video_codec flv')。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-09
      • 1970-01-01
      • 2020-06-02
      • 2021-08-20
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多