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: