1. 视频中插入LOGO
ffmpeg -i zhengzhou.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay=50:50" -codec:a copy zhengzhou-output1.mp4
2. 去除视频声音
ffmpeg -i input_video.mp4 -vcodec copy -an output_video_no_audio.mp4
-i input_video.mp4
指定输入文件。
-vcodec copy
复制视频流,不重编解码。
-an
表示无音频。
output_video_no_audio.mp4
是输出文件的名称。
3. 视频添加字幕
ffmpeg -i zhengzhou-output2.mp4 -vf "subtitles=zhengzhou-yixiang.srt:force_style='Fontsize=14,PrimaryColour=&H00FFFFFF,OutlineColour=&H66000000,BorderStyle=3,MarginV=10'" -c:a copy zhengzhou-output3.mp4
subtitles:字幕文件
Fontsize:字幕大小
PrimaryColour:字幕颜色
MarginV:具体屏幕下方距离
生成字幕文件网址:TXT to SRT Converter
4. 视频添加旁白(声音)
ffmpeg -i input_video.mp4 -i input_audio.mp3 -filter_complex amix=inputs=2:duration=first:dropout_transition=3 output_video.mp4
5. 视频插入文字
ffmpeg -i zhengzhou-output3.mp4 -vf "drawtext=text='4月9日采购意向(郑州市) ': fontfile=simhei.ttf: fontsize=60:fontcolor=#FFE14D:line_spacing=10: x=(w-tw)/2: y=130:shadowcolor=red:shadowx=2:shadowy=2:box=1:boxcolor=black@0.5" output.mp4
ffmpeg
的drawtext
滤镜用于在视频帧上绘制文本,支持多种参数来定制文本的样式、位置、动态效果等。以下是一些常见的drawtext
参数(选项)及其说明:基本参数:
text
: 必须。要绘制的文本内容。可以包含特殊字符和转义序列,如换行符\n
。
fontfile
: 字体文件的路径。如果要使用非系统默认字体,需要指定此选项。
font
: 字体名称。使用系统内建字体时,直接指定字体名称。可以包含样式信息,如Arial Bold
。
fontsize
: 字体大小(单位:像素)。
fontcolor
: 字体颜色。可以使用0xRRGGBB
、rgb(R,G,B)
、rgba(R,G,B,A)
、hexcolor
、[0-100%]gray
或颜色名称(如red
)。
shadowcolor
: 文本阴影的颜色。设置方式同fontcolor
。
shadowx
,shadowy
: 文本阴影相对于文本的横向和纵向偏移量(单位:像素)。
x
,y
: 文本在视频帧上的起始位置。可以使用绝对像素值,也可以使用相对表达式(如w/2
表示视频宽度的一半)。文本样式:
text_shaping
: 开启(1)或关闭(0)文本形状优化,适用于阿拉伯语、希伯来语等从右向左书写系统的语言。
bordercolor
,borderw
: 边框颜色和宽度(单位:像素)。为文本添加边框。
boxcolor
,box
: 绘制背景矩形的颜色和是否开启(1)背景矩形。当开启时,可以配合boxborderw
(边框宽度)和boxpadding
(内部填充)使用。
alpha
: 文本的透明度(0.0 - 1.0)。
shadowopacity
: 文本阴影的透明度(0.0 - 1.0)。动态效果:
timecode
: 使用时间码作为文本内容。可以指定格式,如%{pts}
或%{localtime}
。
rate
: 文本更新速率(帧率)。默认为视频帧率。
fixed_linesize
: 固定行高,使多行文本保持一致的高度。
reload
: 是否实时重载文本文件(当textfile
参数用于指定文本文件时)。高级选项:
expansion
: 控制字符串的扩展方式,如none
、strftime
(时间戳格式化)或normal
(默认,支持简单变量替换)。
textfile
: 从文件中读取文本内容。支持按行读取,每行对应视频帧中的一个文本实例。
eof_action
: 当文本文件读取到末尾时的行为,如endall
(停止播放)、repeat
(从头开始循环读取)或pause
(暂停播放)。
text_length
: 文本的最大长度。超过此长度的文本将被截断。
tabsize
: 制表符宽度(单位:像素)。
wrapwidth
: 自动换行的宽度限制(单位:像素)。超出此宽度的文本将被折行。
line_spacing
: 行间距(单位:像素)。
kerning
,letterspacing
: 字间距调整(单位:像素)。
fontconfig_match
: 使用fontconfig
库进行字体匹配。对于复杂的字体配置,可以提高匹配准确度。
ass
: 将drawtext
参数解析为 ASS 字幕格式,支持更丰富的文本样式和动画效果。表达式与函数:
许多参数(如
x
,y
,fontsize
等)支持使用数学表达式,可以包含以下函数:
rand(min,max)
: 返回指定范围内的随机数。
gte(a,b)
: 检查a
是否大于等于b
,返回 1(真)或 0(假)。
lte(a,b)
: 检查a
是否小于等于b
,返回 1(真)或 0(假)。
eq(a,b)
: 检查a
是否等于b
,返回 1(真)或 0(假)。
if cond val_true val_false
: 根据条件cond
返回val_true
或val_false
。
between(val,min,max)
: 检查val
是否在min
和max
之间(包含边界),返回 1(真)或 0(假)。
isnan(val)
: 检查val
是否为 NaN(Not-a-Number),返回 1(真)或 0(假)。
isinf(val)
: 检查val
是否为无穷大或无穷小,返回 1(真)或 0(假)。
isnan_or_inf(val)
: 检查val
是否为 NaN 或无穷大/小,返回 1(真)或 0(假)。
max(a,b,...)
,min(a,b,...)
: 返回一组数值中的最大值或最小值。
hypot(a,b)
: 计算直角三角形两条边长a
和b
的斜边长度。
round(val)
: 将val
四舍五入到最接近的整数。
trunc(val)
: 截断val
到整数部分,去掉小数点后的部分。
ceil(val)
: 向上取整,将val
转换为大于或等于它的最小整数。
floor(val)
: 向下取整,将val
转换为小于或等于它的最大整数。
rint(val)
: 朝最接近的整数取整,遵循 IEEE 754 规范。
sqrt(val)
: 计算val
的平方根。
log(val[,base])
: 计算val
的自然对数(默认)或以base
为底的对数。
exp(val)
: 计算 e(自然对数的底数)的val
次幂。
6. 合并多个视频
ffmpeg -i luoyang_output5.mp4 -i zhengzhou-output_video5.mp4 -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[outv][outa]" -map "[outv]" -map "[outa]" "output.mp4"
-i input1.mp4
是输入文件的引用,可以重复多次来包含所有要合并的视频。
-filter_complex
是用来指定复杂的视频和音频过滤操作的。
[0:v][0:a]
表示第一个输入文件的视频和音频流。
concat=n=4:v=1:a=1
是 concat 过滤器的参数,表示有四个输入(n=4),输出一个视频流(v=1)和一个音频流(a=1)。
[v][a]
是为输出视频和音频流指定的别名。
-map "[v]"
和-map "[a]"
用来指定输出的视频和音频流。
7. 获取视频尺寸
ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=p=0 zhengzhou-output_video4.mp4
8. 视频尺寸修改
ffmpeg -i input.mp4 -vf "scale=1280:0" output.mp4