ffmpeg 用法总结

总结 ffmpeg 的强大用法。


将一组图片按顺序合成为一个视频

ffmpeg -y -i room_view/frame%03d.png -pix_fmt yuv420p result.mp4

这里的 frame%03d 是类似 printf 函数中的用法,指的是所有的文件名是 frameXXX 的文件,XXX 表示前面 pad 上 0 的数字,从 frame000 开始。3 的意思是数字的 digit 位数是 3 位。

从视频中按照一定帧率截取图片

ffmpeg -i movie.avi -vf fps=3/1 %05d.png

这里 fps=3/1 含义是 1 秒钟截取 3 帧,最后一个参数就是生成的图片,格式是 5 位的数字,前端补上了 0,例如 00001。

从视频中截取图片为 jpg 并保持质量尽量高

https://superuser.com/questions/1032503/ffmpeg-extract-lossless-image-from-video

在上面的基础上增加如下的 options:

-q:v 1 -qmin 1 -qmax 1

当然,也可以先截取无损的 PNG,然后再自行转换。例如,在 Linux 中可以使用 imagemagick 提供的 convert命令直接转:

convert img.png img.jpg

详细可以参考:http://ubuntuhandbook.org/index.php/2013/07/how-to-convert-png-to-jpg-on-ubuntu-via-command/

将两个视频左右或者上下放置合并成一个

最简单的是:

ffmpeg -i left.mp4 -i right.mp4 -filter_complex hstack output.mp4

不过上面这个命令得到的合并视频中,左右视频中间没有 padding。如果要加上 padding,参考上面第一个链接。如果要垂直合并两个视频,将 hstack改成 vstack就行了,具体参见第二个链接

旋转视频

  • https://stackoverflow.com/questions/3937387/rotating-videos-with-ffmpeg

Rotate 90 clockwise:

ffmpeg -i in.mov -vf "transpose=1" out.mov

For the transpose parameter you can pass:

0 = 90CounterCLockwise and Vertical Flip (default)
1 = 90Clockwise
2 = 90CounterClockwise
3 = 90Clockwise and Vertical Flip

Use -vf "transpose=2,transpose=2" for 180 degrees.

将 mov 转换为 mp4

  • https://stackoverflow.com/questions/12026381/ffmpeg-converting-mov-files-to-mp4

The command to just stream it to a new container (mp4) needed by some applications like Adobe Premiere Pro without encoding (fast) is:

ffmpeg -i movie.mov -vcodec copy -acodec copy out.mp4

Alternative as mentioned in the comments, which re-encodes with best quaility (-qscale 0):

ffmpeg -i input.mov -q:v 0 output.mp4

还有其他参数,例如 scale 视频等。

Search

    Table of Contents