ffmpeg的使用说明

王 茂南 2018年2月12日16:14:12
评论
1 3260字阅读10分52秒
摘要这一篇文章推荐一个软件,ffmpeg。这款软件可以很方便的进行图片与视频的处理,包括将图片转视频,图片转gif,视频转图片,获取视频关键帧等。

这一篇文章推荐一个软件,ffmpeg。这款软件可以很方便的进行图片与视频的处理,包括将图片转视频,图片转gif,视频转图片,获取视频关键帧等。

ffmpeg的使用说明

下面介绍一下他的用法。

一些基本的参数

  • -c:指定编码器
  • -c copy:直接复制,不经过重新编码(这样比较快)
  • -c:v:指定视频编码器
  • -c:a:指定音频编码器
  • -i:指定输入文件
  • -an:去除音频流
  • -vn: 去除视频流
  • -preset:指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。
  • -y:不经过确认,输出时直接覆盖同名文件。

 

图片转视频

基本用法

ffmpeg -f image2 -i  f:/images/%d.jpg   test.mp4

在这里图片的文件名从0开始依次递增,下面是参考链接:

csdn博客-ffmpeg将图片转为视频

控制码率

使用framerate来控制将图片输入时的帧率

ffmpeg  -framerate 30 -i F:/bad_apple_num/%d.jpg -vf scale=600:480 bad_apple.mp4

使用-r可以控制输出时的帧率,这里是输入和输出时的帧率不一样

ffmpeg -framerate 10 -i input -r 25 output.mp4

下面看一个经常使用的,来源How to encode a video at 30 FPS from images taken at 7 FPS

ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -pix_fmt yuv420p -crf 23 output.mp4 

下面是一端解释:

This reads the input at 30 fps (the -framerate 30 option) and encodes it using the libx264 codec with constant rate factor of 23 (the -crf 23 option).

一些报错

当遇到错误"width not divisible by 2"时候,我们的解决方法是加上-vf scale=800:400

下面是参考链接:FFmpeg - width not divisible by 2

 

视频转图片

连续截图

来源: ffmpeg视频<--->图片互转

ffmpeg -i  ./test/video.mpg -r 1 -f image2 temp/%05d.png

上面这个例子是将./test/目录下面的video.mpg按照每秒截取一张图片的频率方式,并且将得到的图片自然数递增的顺序命名规则命名,并且保存./temp下面。

如果你想每秒10帧,那就将1改成10:

ffmpeg -i  ./test/video.mpg -r 10 -f image2 temp/%05d.png

图片的格式也可以是jpg, png, bmp。如:

ffmpeg -i  ./test/video.mpg -r 10 -f image2 temp/%05d.bmp

就会把视频转换为位图,位图的格式默认是16位色(这个有待进一步验证,因为我的实验刚好能被转换成16位色的),关于这个如果有人发现有不一样的结果,希望共享一下。

特定时间点截图

  1. ffmpeg -ss 00:10:00 -i "Apache Sqoop Tutorial.mp4" -y -f image2 -vframes 1 test.png
  2. # 或是
  3. ffmpeg -ss 10 -i input.flv -y -f image2  -vframes 100 -s 352x240 b-%03d.jpg

下面是关于他的参数解释:

  1. -i  输入文件
  2. -y  覆盖
  3. -f  生成图片格式
  4. -ss 开始截图时间 seconds or in hh:mm:ss[.xxx] 如果截图开始时间越接近篇尾,所花费的时间就会越长
  5. -vframes  截图帧数 或者 使用 -t : 截图时长 seconds, or hh:mm:ss[.xxx]
  6. -s  图片宽高比
  7. b-%3d.jpg 格式化文件命名,会生成 b-001.jpg,b-002.jpg 等。

 

字幕的插入

给视频插入字幕

  1. ffmpeg -i myvideo.mp4 -vf subtitles=semester-abroad-program.ass -c:s mov_text outfile.mp4

 

给音频插入字幕

注意, 在给音频插入字幕的时候, 我们需要一张背景图片.

  1. ffmpeg -loop 1 -y -i black-background-09.jpg -i semester-abroad-program.mp3 -vf subtitles=semester-abroad-program.ass -shortest test1.mp4

其中, -shortest option instructs ffmpeg to trim the end of the audio track or video stream so that audio and video have the same final length.

参考资料FFMPEG make Video Lyrics using JPG MP3 SRT File

 

filter_complex_script的使用

运行的命令如下所示, 需要注意的是, 我们这里后面有使用-map "[out_v]" output.mp4来指定我们的输出文件. 下面是一个简单的示范.

  1. ffmpeg -i funny_pets_01.mkv -filter_complex_script "remove_funny_pets_01.txt" -map "[out_v]" output.mp4

如果不指定上面的map, 就可能会出现下面的报错信息, 一定多加留意.

  1. Filter delogo has an unconnected output

但是实际上, 我们使用上面的方式生成视频之后, 会发现视频是没有声音的, 完整的命令如下所示:

  1. ffmpeg -i funny_pets_01.mkv -c:a copy -filter_complex_script "remove_funny_pets_01.txt" -map "[out_v]" -map 0:a output.mp4

 

这样就是一个filter_complex_script简单的介绍了.

 

视频的剪裁

有的时候, 我们需要从指定的时间开始, 到指定的时间结束, 对原始的视频进行剪裁, 于是可以通过下面的方式来进行完成.

下面是两种格式, 分别是以结束时间来看和以持续时间来看.

  • 开始时间(start)和持续时间(duration)
  • 开始时间(start)和结束时间(end)
  1. $ ffmpeg -ss [start] -i [input] -t [duration] -c copy [output]
  2. $ ffmpeg -ss [start] -i [input] -to [end] -c copy [output]

下面看一下实际的例子.

  1. ffmpeg -ss 00:01:50 -i funny_pets_01.mkv -t 10.5 -c copy output1.mp4

 

图片转gif

ffmpeg -f image2 -framerate 15 -i f:/eeeee/%d.jpg D:/c.gif

 

获取关键帧

ffmpeg -i "yourInputVideo.mp4" -vf select="eq(pict_type\,PICT_TYPE_I)" -vsync 2 -f image2 thumbnail_%02d.jpeg 

 

视频转音频

  1. ffmpeg -i apple.mp4 -f mp3 -vn apple.mp3
  2. 参数解释:
  3. -i 表示input,即输入文件
  4. -f 表示format,即输出格式
  5. -vn表示vedio not,即输出不包含视频

 

其他参考资料

第一个说得很详细

  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南
  • 本文由 发表于 2018年2月12日16:14:12
  • 转载请务必保留本文链接:https://mathpretty.com/8983.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: