java程序员使用ffmpeg的记录

一、下载地址

https://ffmpeg.zeranoe.com/builds/

二、安装

1. 解压
2. 设置环境变量
3. 测试 ffmpeg -h

三、基础指令

指令可使用对象:视频、音频、图片

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

1. 查看信息

ffprobe [文件地址] -hide_banner

说明:-hide_banner 隐藏ffmpeg的信息,只输出元信息,可以不写

例子:

# 查看当前路径下 input.mp4 的文件信息
ffprobe input.mp4 -hide_banner

# 查看当前路径下 out.mp3 的文件信息
ffprobe out.mp3 -hide_banner

2. 播放文件

ffplay [文件地址]

说明:视频和音频会直接播放,图片则会展示

例子

# 播放视频
ffplay video.mp4

# 播放音频
ffplay music.mp3

# 预览图片
ffplay output_000330.jpg

3. 格式转换

ffmpeg -i [输入文件] [输出文件]

说明:这只是简单的文件格式的转换,如果有的格式电脑打不开就可以使用这个命令把文件转化成能打的格式

例子

# mp4格式的视频转换为avi格式
ffmpeg -i input.mp4 output.avi

# aac格式的音乐转换为mp3格式的音乐
ffmpeg -i output.aac output_aac.mp3

# jpg转png
ffmpeg -i output_000330.jpg output_000330.png

4. 编码转化

(1)音频转码
ffmpeg 
-i [输入音频文件] 
-acodec [音频编码解码器] 
-ar [音频采样率] 
-ab [音频比特率] 
-ac [音频声道数] 
[输出音频文件]

例子

ffmpeg  -i output.aac -acoder libmp3lame -ar 44100 -ab 320K -ac 2 -y out.mp3
(2)视频转码
ffmpeg 
-i [输入视频文件] 
-s [缩放视频新尺寸(size)]
-pix_fmt [视频颜色空间] 
-vcodec [视频编码解码器] 
-preset [编码器预设] 
-profile:v [编码器配置] 
-level:v [编码器等级] 
-crf [速率因子] 
-r [帧率] 
-acodec [音频编码解码器] 
-ar [音频采样率]
-ac [音频声道数]
-b:a [音频比特率] 
[输出音频文件]

例子

# 无损调整视频文件编码
ffmpeg -i input.mp4 -s 1920x1080 -pix_fmt yuv420p -vcodec libx264 -preset medium -profile:v high -level:v 4.1 -crf 23 -r 30 -acodec aac -ar 44100 -ac 2 -b:a 128k output_avi.avi

5、调整码率

ffmpeg -i [输入文件] -minrate [最小值] -maxrate [最大值] -bufsize [缓冲值] [输出文件]

例子

# 码率调整,码率=文件大小/时长,码率越小文件越小,质量也随之变差
ffmpeg -i input.mp4 -minrate 200K -maxrate 400K -bufsize 200K output.mp4
ffmpeg -i input.mp3 -minrate 100K -maxrate 320K -bufsize 200K output.mp3

6、调整分辨率

ffmpeg -i [输入文件] -vf scale=[宽:高] [输出文件]

例子

# 480:-1 宽480,高自动,视频和图片都调整
ffmpeg -i input.mp4 -vf scale=480:-1 output_480.mp4
ffmpeg -i output_000330.jpg -vf scale=480:-1 output_000330_480.jpg

7、音频视频的提取

(1)音频提取(去除视频流)
ffmpeg -i [输入文件] -vn -c:a [音频编码器] [输出文件]

例子

ffmpeg -i input.mp4 -vn -c:a copy output.m4a
(2)视频提取(去除音频流)
ffmpeg -i [输入文件] -c:v [视频编码器] -an [输出文件]

例子

ffmpeg -i input.mp4 -c:v copy -an output_silent.mp4

8、音频视频片段截取与合并

(1)截取
ffmpeg -i [输入文件] -ss [开始位置] -to [结束位置] -acodec [编码器] -y [输出文件]

例子

# 截取视频片段 00:05:30 到 00:06:30 保存到 output_cutout.mp4
ffmpeg -i input.mp4 -ss 00:05:30 -to 00:06:30 -acodec copy -y output_cutout.mp4

# 从 00:05:30 开始截取后60s 保存到 output_cutout.mp3
ffmpeg -i out.mp3 -ss 00:05:30 -t 60 -acodec copy -y output_cutout.mp3

# 把视频的10.5s到15.5s截取为640*320的动图,帧率为15帧,保存到output_gif.gif
ffmpeg -i input.mp4 -ss 10.5 -to 15.5 -s 640x320 -r 15 output_gif.gif
(2) 合并

合并文件需要先把文件列举到配置文件中,我们先创建配置文件 list.conf,里面包含内容:

file ./01.mp4
file ./02.mp4
file ./03.mp4

每个行表示合并文件的位置

ffmpeg -f concat -i [配置文件地址] -c copy [输出位置]

例子

ffmpeg -f concat -i list.conf -c copy concat.mp4

注意:不同格式的文件尽量不要进行合并,合并不同格式请先转换为统一的格式后再操作。

9、视频截图

ffmpeg -i [输入文件] -ss [位置] -vframes [截取数量] -q:v [图片质量] -y [输出位置]

例子

# 在视频input.mp4的 00:01:31 处截图一张质量不变的截图,保存到output_000331.jpg
ffmpeg -i input.mp4 -ss 00:01:31 -vframes 1 -q:v 1 -y output_000331.jpg

10、水印

水印位置的写法:

绝对位置:50:50 以左上角为0:0定位

图片水印

左下角50x50:x=50:y=main_h-overlay_h-50
左上角50x50:x=50:y=50
右下角50x50:x=main_w-overlay_w-50:y=main_h-overlay_h-50
右上角50x50:x=main_w-overlay_w-50:y=50
顶部居中:x=main_w/2-overlay_w/2:y=50
底部居中:x=main_w/2-overlay_w/2:y=main_h-overlay_h-50
左垂直居中:x=50:y=main_h/2-overlay_h/2
右垂直居中:x=main_w-overlay_w-50:y=main_h/2-overlay_h/2
完全居中:x=main_w/2-overlay_w/2:y=main_h/2-overlay_h/2

文字水印:

overlay_w 换成 text_w
overlay_h 换成 line_h

顶部居中:x=main_w/2-text_w/2:y=50
底部居中:x=main_w/2-text_w/2:y=main_h-line_h-50
左垂直居中:x=50:y=main_h/2-line_h/2
右垂直居中:x=main_w-text_w-50:y=main_h/2-line_h/2
完全居中:x=main_w/2-text_w/2:y=main_h/2-line_h/2

(1)图片水印
ffmpeg -i [输入文件] -i [图片位置] -filter_complex [水印位置] -y [输出位置]

例子

# 给视频添加一个水印到右上角50x50
ffmpeg -i input.mp4 -i mark.png -filter_complex "overlay=main_w-overlay_w-50:y=50" -y output_watermark.mp4
(2)文字水印
ffmpeg -i [输入文件] -vf [文字样式] [输出位置]

drawtext=
fontfile=[使用字体]
:text='[文字内容]'
:x=[横位置]
:y=[竖位置]
:fontsize=[字体大小]
:fontcolor=[字体颜色]
:shadowy=[文字阴影]

例子

# 在视频的中间处添加文字【文字水印_miaopasi.cn】,
# 字体XinDiHeiBanBaoTi-1、白色字体、字体阴影2像素
ffmpeg -i input.mp4 -vf "drawtext=fontfile=XinDiHeiBanBaoTi-1.ttf:text='文字水印_miaopasi.cn':x=main_w/2-text_w/2:y=main_h/2-line_h/2:fontsize=42:fontcolor=white:shadowy=2"  -y output_textmark.mp4

注意:使用字体需要有字体文件,没有将不能使用

posted @ 2020-07-06 01:36  喵喵扑  阅读(638)  评论(0编辑  收藏  举报