1.视频的录制
同时打开摄像头跟麦克风,进行录制:点击q进行退出
0:0,前面为图像设备,后面为声音设备。
ffmpeg -f avfoundation -framerate 30 -i "0:0" -s 320x240 cam2.mp4
如果只要声音,则:
ffmpeg -f avfoundation -i ":0" sound.aac
或者:
ffmpeg -f avfoundation -i ":0" -acodec libmp3lame sound2.mp3
aac是音频的一种编码格式,我用的ffmpeg3.1.2会编码成aac格式,当然也可以指定编码成mp3,但要借助libmp3lame这个组件。
想录制屏幕,那只需要把-i "0"换成-i "1"了
2.从视频中抽几张图
ffmpeg -ss 00:00:5 -i /moments.mp4 -vframes 1 -f image2 -y a.png
ss表示开始提取图片的时间点,既可以用时分秒方式,也可以是多少秒。如果使用到这个参数,那应该把它作为第一个参数,因为可以让FFmpeg提速。
i表示输入文件,就是视频文件。
vframes表示拿多少帧,也就是多少张图片。注意,这个参数要放在-i参数之后。
f 表示提取出来的图片的格式。
y 表示覆盖已有同名的图片。
ffmpeg -i xxx.mp4 -r 1 -y -f image2 -t 5 -s 240*320 pc%3d.jpg
r 表示每秒提取图片的帧数,即帧率,默认是25fps,上面设置为一秒拿一张图。
t 表现提取持续多少秒,也可以用时分秒的格式来表示。
s 表出来的图片的尺寸。
3%d表示以001、002这样的格式来命名输出的图片。
如果我发现视频某个时间点有美女的话,那我就可以用ss从这个时间点再前一点,然后用t来持续提取5秒,或者用vframes来提取几十张,那就准没漏了!也就是这样:
ffmpeg -ss 10 -t 5 -r 1 -i Movie-1.mp4 -f image2 -y pc-temp/image%3d.jpg
提取到一些图片后,我想弄成视频,怎么办?
很简单,前提是你的ffmpeg已经支持视频编码器(比如x264),参考FFmpeg的安装吧( 已经支持lamemp3、x264、librtmp、fdk-aac等)
把图片制作成视频
ffmpeg -f image2 -i img%3d.jpg test.mp4
-img%d表示以‘img001’, ’img002‘这类的命名,按顺序使用。注意f参数要在i参数之前。
3.使用FFmpeg
提取视频流:
ffmpeg -i xx.flv -vcodec copy -an output.h264
提取音频流:
ffmpeg -i fx_flash22298734.flv -acodec copy -vn audio.aac
提取视频流并且为mp4格式:
ffmpeg -i xx.flv -vcodec copy -an -f mp4 1.mp4
提取音轨(音频流):
ffmpeg -i 后来_MQ.m4a -map 0:0 0.wav
ffmpeg -i 后来_MQ.m4a -map 0:1 1.wav
提取声道:
ffmpeg -i "TFBOYS - 是你.mp3" -map_channel 0.0.0 1.aac -map_channel 0.0.1 2.aac
提取流中的packet:
ffmpeg -v 48 -i "rtmp://xxx.com/live/7360883 live=1" out.flv
提取pcm:
ffmpeg -i "Rogue Traders - Watching You.mp3" -f s16le -ar 44100 -ac 2 -loglevel quiet -y decoded.pcm
合成音频与视频:
ffmpeg -i 1.mp4 -i 1.wav -vcodec copy mix_test.mp4
转码:
ffmpeg -i 22298734.flv -vcodec mpeg4 -s 320*240 -an -f m4v test.mp4
保存rtmp流在本地:
ffmpeg -i "rtmp://xxx.com/live/hks live=1" -vcodec copy -acodec copy out.flv
FFmpeg官网
或者更具体一点的比如:
4.视频MP4转成GIF
ffmpeg -i small.mp4 small.gif
转化视频中的一部分为 GIF
ffmpeg -t 3 -ss 00:00:02 -i small.webm small-clip.gif
从视频中第二秒开始,截取时长为3秒的片段转化为 gif
转化高质量 GIF
默认转化是中等质量模式,若要转化出高质量的 gif,可以修改比特率
ffmpeg -i small.mp4 -b 2048k small.gif
视频属性调整
缩放视频尺寸
ffmpeg -i big.mov -vf scale=360:-1 small.mov
注意 sacle
值必须是偶数,这里的 -1
表示保持长宽比,根据宽度值自适应高度。
如果要求压缩出来的视频尺寸长宽都保持为偶数,可以使用 -2
加倍速播放视频
ffmpeg -i input.mov -filter:v "setpts=0.5*PTS" output.mov
定义帧率 16fps:
ffmpeg -i input.mov -r 16 -filter:v "setpts=0.125*PTS" -an output.mov
慢倍速播放视频
ffmpeg -i input.mov -filter:v "setpts=2.0*PTS" output.mov
静音视频(移除视频中的音频)
ffmpeg -i input.mov -an mute-output.mov
-an
就是禁止音频输出
将 GIF 转化为 MP4
ffmpeg -f gif -i animation.gif animation.mp4
也可以将 gif 转为其他视频格式
ffmpeg -f gif -i animation.gif animation.mpeg
ffmpeg -f gif -i animation.gif animation.webm
获取 GIF 的第一帧图片
使用 ImageMagick 可以方便第提取 gif 图片的第 N 帧图像。
安装 ImageMagick
brew install imagemagick
提取第一帧
convert 'animation.gif[0]' animation-first-frame.gif
通过 [0]
就可以提取出 gif 的第一帧图像。
GIF 转出来的 MP4 播放不了?
有些 GIF 转化出来的 MP4 不能被 Mac QuickTime Player.app 播放,需要添加 pixel formal
参数
ffmpeg -i input.gif -vf scale=420:-2,format=yuv420p out.mp4
使用 yunv420p
需要保证长宽为偶数,这里同时使用了 scale=420:-2
。
wiki 解释: QuickTime Player 对 H.264 视频只支持 YUV 色域 4:2:0 方式的二次插值算法。
参考资料
- FFmpeg CompilationGuide/MacOSX
- Convert Video to GIF or GIF to Video
- Get the First Frame of an Animated GIF with ImageMagick
- Create an Image Preview from a Video
- How to speed up / slow down a video
- ffmpeg useful commands (FFMPEG 命令大全)
- ffmpeg 文档
ffmpeg -i input.mp4 output.avi