https://blog.csdn.net/wangshuainan/article/details/77914508

cat Z000*.jpg | ffmpeg  -r 3 -t 12 -i pipe:0 -y -b 200K out.mp4

FFmpeg将多张图片合成视频

首先要计算出视频的总帧数:

总帧数 = duration * fps 。

duration是我们设定的视频的长度,fps是视频每秒的帧数。

第二步将所有的图片文件放到一个临时目录,并且制定一个命名规则(可正则的):

例如图片的素材是image0.jpg image1.jpg image2.jpg

然后可以执行命令合成视频了:

带音频:

点击(此处)折叠或打开

ffmpeg -threads2 -y -r 10 -i /tmpdir/image%04d.jpg -i audio.mp3 -absf aac_adtstoasc output.mp4

参数的解释含义:

-threads 2 以两个线程进行运行, 加快处理的速度。

-y 对输出文件进行覆盖

-r 10 fps设置为10帧/秒(不同位置有不同含义,后面再解释)

-i /tmpdir/image%04d.jpg 输入图片文件,图片文件保存为 image0001.jpg image0002.jpg ….

-i audio.mp3 输入的音频文件

-absf aac_adtstoasc 将结果的音频格式转为faac格式时需要这个选项。将音频格式转为faac是因为在iphone上某些音频格式的视频无法播放,例如mp3. 但faac格式的音频的视频在iphone上可以播放。-absf 的意思是设置一个bitstream filter进行某些转换。可以用ffmpeg -bsfs 查看所有支持的bitstream filter。 bitstream filter和 aac_adtstoasc的具体含义我也说不上。但是如果不用这个选项又会导致转换失败。

不带音频

点击(此处)折叠或打开

ffmpeg -loop 1 -f image2 -i /tmpdir/image%04d.jpg -vcodec libx264 -r 10 -t 10 test.mp4

-loop 1循环读输入 0读完就不读了

-vcode 编码格式libx264

-b 指定200k码率

-t 输出视频总时长:

这样运行命令就可以生成视频了;

从不同目录下多张图合成视频

上面命令需要从指定文件夹下的特殊命名规则的一组图中去做输入文件;有没有更好的方式呢?比如我有一些图片的存储路径,能不能不拷贝到一个文件夹下再操作,答案是有的。

1. 使用管道Pipe

2. 使用Concat命令

Pipe

You can use cat or other tools to pipe to ffmpeg:

cat读取多张图片输入到一个“全局管道文件”中,然后后面ffmpeg命令从全局管道中(指定-f image2pipe)读取输入文件,生成视频。

点击(此处)折叠或打开

cat Desktop/aa/img1.jpg Desktop/aa/img2.jpg Desktop/aa/img3.jpg | ffmpeg -loop 0 -f image2pipe -r 3 -b 200k -s 640*360 -t 12 -i log.pipe -y Desktop/oup.mkv

这个命令在linux、Mac OS、Windows上都是可行的,但是在安卓中不行,可能是ffmpeg找不到那个“全局管道”。

那么我们可以自己创建一个管道,然后告诉ffmpeg管道在哪?

点击(此处)折叠或打开

创建管道:

mkfifo Desktop/pic.pipe

1

向管道输入文件:

cat Desktop/aa/img1.jpg Desktop/aa/img2.jpg > Desktop/pic.pipe

1

使用ffmpeg读取管道,生成视频:

ffmpeg -loop 0 -f image2pipe -r 3 -b 200k -s 640*360 -t 12 -i Desktop/pic.pipe -y Desktop/oup.mp4

1

这里pic.pipe的路径子安安卓上要换成安卓的路径:Environment.getExternalStorageDirectory().getAbsolutePath()下面

Concat

首先,创建个input.txt文件,填写图片信息:

点击(此处)折叠或打开

file 文件路径

duration 这张图播放时长

file '/Users/wangshuainan/Desktop/aa/imga.jpg'

duration 5

file '/Users/wangshuainan/Desktop/aa/imgb.jpg'

duration 1

file '/Users/wangshuainan/Desktop/aa/imgc.jpg'

duration 3

file '/Users/wangshuainan/Desktop/aa/imgc.jpg'

1

2

3

4

5

6

7

注意!!! 最后一个图要重复写一遍,但不用加duration。

然后run ffmpeg command:

点击(此处)折叠或打开

ffmpeg -f concat -safe 0 -i Desktop/input.txt -vsync vfr -pix_fmt yuv420p Desktop/output.mp4

容易误解的几个命令:

下面解释下几个特殊命令的特殊含义:

-t duration

用做输入选项(在-i之前),是限制读取输入文件的的时长;

用做输出选项(before an output url),超过这个时间停止写输出文件;

比如:循环读取一个输入文件时(-loop 1),当到时间就会停止输出,生成一个duration时长的视频。但是如果没有循环选项,而且输入文件短于这个时长时,就会随着输入文件结束就结束,生成视频,视频时长小于duration。所以我们可以看出 -t 并不仅仅是输出文件时长。

当用“管道”时,也不太一样,管道读了之后,里面内容就没了,所以没持续的输入,这个-loop,-t 都是“不起作用的”,除非管道一直有内容。

-t duration (input/output)

When usedasaninput option (before-i), limitthedurationofdatareadfromtheinputfile.

When usedasanoutput option (beforeanoutput url), stop writingtheoutputafterits duration reaches duration.

duration must beatimeduration specification, see (ffmpeg-utils)theTime duration sectionintheffmpeg-utils(1) manual.

-toand-t are mutually exclusiveand-t has priority.

-r fps

帧率,可以指定两个帧率,输入帧率,输出帧率;

输入帧率:-i之前,设定读入帧率,比如 -r 0.5 ,也就是说1秒要播0.5个图片,那么一个图也就是要播2s;

输出频率:-i之后,真正的输出视频播放帧率,不写话,是默认和输入频率一样。比如设 -r 30 ,对应上面的设定,一个图播2

s,那么输出文件播放时,这2s内,都是这张图,但是播放了60帧。

You can specify two frame rates: input and output.

Set input frame rate with the -framerate input option (before -i). The default for reading inputs is -framerate 25 which will be set if no -framerate is specified.

The output frame rate for the video stream by setting -r after -i or by using the fps filter. If you want the input and output frame rates to be the same, then just declare an input -framerate and the output will inherit the same value (meaning you can omit the -r).

By using a separate frame rate for the input and output you can control the duration at which each input is displayed and tell ffmpeg the frame rate you want for the output file. This is useful if your player cannot handle a non-standard frame rate. If the input -framerate is lower than the output -r then ffmpeg will duplicate frames to reach your desired output frame rate. If the input -framerate is higher than the output -r then ffmpeg will drop frames to reach your desired output frame rate.

In this example each image will have a duration of 5 seconds (the inverse of 1/5 frames per second). The video stream will have a frame rate of 30 fps by duplicating the frames accordingly:

ffmpeg -framerate 1/5 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4

linux 下多个图片合并,FFmpeg将多张图片合成视频相关推荐

  1. linux命令行处理图片基础,linux下命令行图片处理工具ImageMagick

    linux下命令行图片处理工具ImageMagick (2012-05-25 21:21:40) 标签: linux imagemagick 命令行图片处理 it ImageMagick的主要命令如下 ...

  2. Android 音视频 --------- FFmpeg将多张图片合成视频

    FFmpeg将多张图片合成视频 首先要计算出视频的总帧数: 总帧数 = duration * fps . duration是我们设定的视频的长度,fps是视频每秒的帧数.第二步将所有的图片文件放到一个 ...

  3. linux下载文件到内存不足,有容乃大:Linux下轻松解决图片转PDF内存不足转换失败问题...

    薄荷站长最近是跟"图片转PDF"这个问题杠上了.前文<图像魔术:ImageMagick轻松转换PDF和图片>介绍了最简单的Linux下将多张图片合并为一个 PDF 文档 ...

  4. Linux下编译带x264的ffmpeg的方法

    一.环境准备 ffmpeg下载:http://www.ffmpeg.org/download.html x264下载:http://download.videolan.org/x264/snapsho ...

  5. linux如何批量处理图片名,Linux下批量修改图片名称的方法详解

    我们都知道,要修改文件夹下的图片名称很容易,那么有什么方法能够快速批量修改图片名称呢?这篇文章主要为大家介绍了linux系统中如何批量修改图片文件名的案例演示,如果想修改linux文件夹下的图片名称, ...

  6. linux下优秀的图片查看软件gwenview

    linux下有图片查看软件eog,但感觉美感不好.我也用过fspot,它那导入过程有点慢,很不舒服. 后来发现gwenview这个软件不错,在ubuntu下安装 sudo apt-get instal ...

  7. linux下ppt转图片的方法

    上篇介绍了windows上将ppt转换为图片的方法,但是在linux平台上确并无法使用,这里再介绍一下自己开发过程中使用的linux上ppt转图片的方法! 同样的,使用POI会有之前存在的清晰度以及内 ...

  8. ffmpeg将多张图片合成视频(小模块化)

    一.环境 1.window7 64bit 2.本文中使用的ffmpeg模块为转mp4系列的dll模块,未使用官网中的代码文件.需要参考的可以去下面链接下载. http://download.csdn. ...

  9. linux x264命令,Linux下编译带x264的ffmpeg的方法

    一.环境准备 二.编译 1.编译yasm. ./configure --prefix=/usr/local/yasm make make install 2.解压x264,进入目录,输入: ./con ...

  10. Linux下QT添加图片运行程序后:iCCP: known incorrect sRGB profile(实测有效)

    原因 因为libpng-1.6以上版本增强了ICC profiles检查,所以发出警告.此警告可以忽略.若要消除警告则要从原图像中去掉ICCP chunk. 解决方法 1.安装imagemagick ...

最新文章

  1. 你以为没有CAD的前辈们画不出复杂的图纸?
  2. 乘法逆元总结 3种基本方法
  3. el-table 树形表格 自定义展开图标_耍好控件 | 产品图标体系是如何炼成的?
  4. 搭建卷积神经网络怎么确定参数_AI入门:卷积神经网络
  5. compare to造句及翻译_compare to造句
  6. 如何将 DateTime 转成 UnixTime ?
  7. 操作系统之进程管理:12、生产者消费者问题和多级生产者多级消费者问题
  8. matlab实现层次分析法
  9. 喜欢去知乎炸鱼?用python吧
  10. rf连oracle版本一致,Navicat premium连不上Oracle的问题解决
  11. python学习浅谈(python2.x以及python3.x的区别、IDE)
  12. VRay材质练习(一):水、玻璃、牛奶
  13. 程序员时间管理-番茄工作法
  14. Spring第一讲:谈谈你对Spring的理解?从该问题着手深入解析Spring/Spring5新特性
  15. 《计算机网络基础》笔记 -----应用层(六)
  16. php ua解析,UA识别有什么用?
  17. pda通用扫描app_智能仓储盘点——PDA扫码盘点APP真正实现“轻松盘点”!
  18. MWeb for Mac 3.2.0 专业级的markdown编辑器
  19. iphone win7无法识别_Win7电脑不能识别iphone苹果设备怎么解决
  20. 2012年中国各省市区GDP排行榜 附各主要城市GDP排行榜

热门文章

  1. 老哥们着急求助一下:报错ORA-39083,ORA-00001
  2. 室内定位算法_室内外定位技术的几种常用的技术与算法你都知道吗?
  3. 4┃音视频直播系统之浏览器中通过 WebRTC 进行桌面共享
  4. div 完美三等分(来源其他网站)
  5. 服务器系统tcpip.sys,win7系统tcpip.sys文件引起蓝屏的解决方法
  6. dll,sys文件被认定为病毒后如何删除
  7. 万用表二极管档和三极管档的使用
  8. 动词的过去式过去分词表
  9. The overload Pattern
  10. 解决设置easyUI tabs onSelect事件时提示tabs未定义的方法