ffmpeg替代剪映进行常见的视频操作

2024年11月27日

原创内容,转载请注明出处:https://www.myzhenai.com.cn/post/4596.html
写这个文章的前提是看到剪映包年会员一年从488元涨至1948元,所以就写了这篇文章,与大家分享一下常见的视频操作都有哪些优惠或免费的方法,都说一个ffmpeg养活了中国所有视频软件,在这个文章中,也给大家介绍一下常见的ffmpeg命令处理方法。

关键词:替换剪映 剪映收费太贵 视频剪辑 ffmpeg常见命令 ffmpeg视频添加遮罩 ffmpeg视频添加字幕 ffmpeg视频添加水印 ffmpeg提取视频字幕 ffmpg去除视频黑边 ffmpeg视频添加背景音乐 ffmpeg录制屏幕 ffmpeg视频清除原有声音 ffmpeg图片转视频 ffmpeg视频转图片 ffmpeg视频转gif ffmpeg视频合并 ffmpeg视频和音频合并 ffmpeg提取视频或音频 ffmpeg视频分割

我们先说ffmpeg

下载
ffmpeg:https://ffmpeg.org/ https://ffmpeg.org/download.html https://github.com/BtbN/FFmpeg-Builds/releases https://www.gyan.dev/ffmpeg/builds/
1、先打开官网下载页面,如果是windows,选择windows图标,并点击 Windows builds from gyan.dev,会跳转到gyan.dev网站,选择图片中的链接进行下载最新版
2、或者打开 github 的 ffmpeg项目(官方),选择对应的文件包进行下载

安装
将下载的压缩包解压缩后,剪切到一个盘符中,比如我是放在D盘,方便在命令行中输入

运行
使用ffmpeg非常方便,只需要在程序后边带着参数就可以了
Linux和Windows下ffmpeg的使用教程:https://www.myzhenai.com.cn/post/2587.html 含windows和linux不同版本的安装和使用方法

详细使用命令
命令详解连接(chatgpt):https://chatgpt.com/share/6746aca5-49d8-8001-b6e0-5834b532f268

Windows 屏幕录制

ffmpeg -f gdigrab -i desktop -framerate 30 -video_size 1920x1080 output.mp4
-f gdigrab:使用 Windows 的 GDI 捕获屏幕。
-i desktop:录制整个屏幕。
-framerate 30:设置帧率为 30fps。
-video_size 1920x1080:设置分辨率,1920x1080 可替换为其他值。
output.mp4:输出文件名。
注意:

如果有多块显示器,可以通过添加 -offset_x 和 -offset_y 指定从哪块屏幕开始录制。
如果你需要录制某个窗口,可以改为 -i title="窗口标题"(窗口标题需完整匹配)

Linux 屏幕录制

ffmpeg -f x11grab -i :0.0 -framerate 30 -video_size 1920x1080 output.mp4
-f x11grab:使用 X11 捕获屏幕。
-i :0.0:指定 X11 显示屏,:0.0 是默认显示屏。
-framerate 30:设置帧率为 30fps。
-video_size 1920x1080:设置分辨率。
output.mp4:输出文件名。
注意:

如果有多个显示器,可以通过更改显示编号(如 :1.0)指定特定显示器。
如果需要录制某个区域,可以加上 -video_size 宽x高 -offset_x 偏移_x -offset_y 偏移_y。

录制屏幕和音频(可选)

Windows 示例:

ffmpeg -f gdigrab -i desktop -f dshow -i audio="麦克风设备名称" -framerate 30 -video_size 1920x1080 output_with_audio.mp4

Linux 示例:

ffmpeg -f x11grab -i :0.0 -f pulse -i default -framerate 30 -video_size 1920x1080 output_with_audio.mp4
-f dshow(Windows) 或 -f pulse(Linux):添加音频输入。
-i audio="麦克风设备名称"(Windows) 或 -i default(Linux):指定音频输入设备。

设备列表查看

Windows: 运行 ffmpeg -list_devices true -f dshow -i dummy。
Linux: 运行 pactl list short sources 查看音频设备。

水印添加命令

fmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=W:H" output.mp4
-i input.mp4:输入视频文件。
-i watermark.png:水印图片文件(可以是 PNG、JPG 或其他格式)。
-filter_complex "overlay=W:H":设置水印位置:
W:H 是水印的水平(W)和垂直(H)偏移量,以下是常见位置:
右下角:overlay=W-w:H-h(W 为视频宽度,H 为视频高度,w 为水印宽度,h 为水印高度)。
右上角:overlay=W-w:0
左下角:overlay=0:H-h
左上角:overlay=0:0
中心:overlay=(W-w)/2:(H-h)/2

Windows 示例

将水印放在视频的右下角:

ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=W-w:H-h" output.mp4

Linux 示例

将水印放在视频的左上角:

ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=0:0" output.mp4

高级用法
1. 调整水印透明度
如果水印是 PNG 带有透明通道,可以直接使用;如果需要调整透明度,可用以下命令:

fmpeg -i input.mp4 -i watermark.png -filter_complex "[1:v]format=rgba,colorchannelmixer=aa=0.5[watermark];[0:v][watermark]overlay=W:H" output.mp4
aa=0.5:调整透明度,范围为 0(完全透明)到 1(不透明)。

2. 动态水印(淡入淡出效果)

ffmpeg -i input.mp4 -i watermark.png -filter_complex "[1:v]format=rgba,fade=in:st=0:d=2,fade=out:st=8:d=2[watermark];[0:v][watermark]overlay=W:H" output.mp4
fade=in:st=0:d=2:水印从第 0 秒开始淡入,持续 2 秒。
fade=out:st=8:d=2:水印在第 8 秒开始淡出,持续 2 秒。

3. 为视频添加文字水印
如果不使用图片水印,可以直接添加文字:

ffmpeg -i input.mp4 -vf "drawtext=text='My Watermark':fontcolor=white:fontsize=24:x=W-tw-10:y=H-th-10" output.mp4
text='My Watermark':替换为你的文字内容。
fontcolor=white:设置文字颜色。
fontsize=24:设置文字大小。
x=W-tw-10:y=H-th-10:将文字放在右下角(tw 为文字宽度,th 为文字高度)。

视频添加字幕时自定义字体、字号和文字颜色

基本命令

ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt:force_style='Fontname=CustomFont,Fontsize=24,PrimaryColour=&H00FFFFFF&'" output.mp4
input.mp4:输入视频文件。
subtitle.srt:字幕文件路径,支持 .srt 或 .ass 格式。
force_style:用于自定义字幕样式。
自定义参数说明
Fontname=CustomFont:指定字体名称(字体需系统已安装)。
Fontsize=24:设置字体大小。
PrimaryColour=&H00FFFFFF&:设置字体颜色,格式为 &HAABBGGRR&:
AA:透明度(00 完全不透明,FF 完全透明)。
BB:蓝色分量(00 到 FF)。
GG:绿色分量(00 到 FF)。
RR:红色分量(00 到 FF)。
示例:白色为 &H00FFFFFF&,红色为 &H000000FF&。

Windows 示例

ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt:force_style='Fontname=Arial,Fontsize=30,PrimaryColour=&H0000FFFF&'" output.mp4
字体为 Arial。
字号为 30。
字体颜色为 黄色(&H0000FFFF&)。

Linux 示例

ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt:force_style='Fontname=DejaVuSans,Fontsize=20,PrimaryColour=&H00FF0000&'" output.mp4
字体为 DejaVuSans(Linux 默认字体之一)。
字号为 20。
字体颜色为 蓝色(&H00FF0000&)。

高级用法
1. 使用 ASS 格式自定义更多样式
ASS 字幕文件允许更复杂的样式设置。例如:

plaintext

[Script Info]
Title: Custom Subtitles
ScriptType: v4.00+

[V4+ Styles]
Style: Default,Arial,30,&H00FFFFFF,&H000000FF,&H00000000,&H64000000,0,0,0,0,100,100,0,1,0,0,0,2,10,10,10,1

[Events]
Dialogue: 0,0:00:01.00,0:00:05.00,Default,,0,0,0,Hello, world!

使用命令:

ffmpeg -i input.mp4 -vf "subtitles=subtitle.ass" output.mp4

2. 添加阴影和描边
通过 force_style 添加更多样式,例如阴影和描边:

ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt:force_style='Fontname=Arial,Fontsize=24,PrimaryColour=&H00FFFFFF&,OutlineColour=&H00000000&,BorderStyle=1,Outline=2,Shadow=2'" output.mp4
OutlineColour=&H00000000&:描边颜色(黑色)。
Outline=2:描边宽度。
Shadow=2:阴影距离。

注意事项
字体路径(Linux 特别注意): 如果指定字体在系统路径中找不到,需手动指定字体路径:

ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt:force_style='Fontfile=/path/to/font.ttf,Fontsize=24,PrimaryColour=&H00FFFFFF&'" output.mp4
字幕文件格式:

SRT:简单字幕,适合基本效果。
ASS:支持复杂样式(推荐)。

视频保留原来声音并添加新的背景音乐

基本命令

ffmpeg -i input.mp4 -i background.mp3 -filter_complex "[0:a][1:a]amix=inputs=2:duration=longest:dropout_transition=3" -c:v copy -c:a aac output.mp4
参数说明
输入文件
-i input.mp4:原视频文件。
-i background.mp3:背景音乐文件。
混音过滤器
amix=inputs=2:混合两条音轨,inputs=2 表示有两条音频输入。
duration=longest:输出音频长度与最长音轨匹配。
dropout_transition=3:设置淡入/淡出时间为 3 秒,避免音轨切换时的突兀。
视频编解码器
-c:v copy:保留视频流,避免重新编码。
音频编解码器
-c:a aac:设置音频编码格式为 AAC(兼容性好)。

Windows 示例

ffmpeg -i video.mp4 -i music.mp3 -filter_complex "[0:a][1:a]amix=inputs=2:duration=longest:dropout_transition=2" -c:v copy -c:a aac final_output.mp4

Linux 示例

ffmpeg -i video.mp4 -i music.mp3 -filter_complex "[0:a][1:a]amix=inputs=2:duration=longest:dropout_transition=2" -c:v copy -c:a aac final_output.mp4

高级用法
1. 调整背景音乐音量
如果需要降低背景音乐音量,可以使用 volume 滤镜调整:

ffmpeg -i input.mp4 -i background.mp3 -filter_complex "[1:a]volume=0.5[a1];[0:a][a1]amix=inputs=2:duration=longest:dropout_transition=3" -c:v copy -c:a aac output.mp4
volume=0.5:将背景音乐音量调整为原来的 50%。

2. 精确设置音轨音量(原音和背景音)
可以分别调整两条音轨的音量:

ffmpeg -i input.mp4 -i background.mp3 -filter_complex "[0:a]volume=1.0[a0];[1:a]volume=0.3[a1];[a0][a1]amix=inputs=2:duration=longest:dropout_transition=3" -c:v copy -c:a aac output.mp4
volume=1.0:原声音轨音量保持不变。
volume=0.3:背景音乐音量调整为原来的 30%。

3. 限定背景音乐播放时长
如果只希望背景音乐持续一定时间,可以使用 atrim 滤镜:

ffmpeg -i input.mp4 -i background.mp3 -filter_complex "[1:a]atrim=0:30,volume=0.5[a1];[0:a][a1]amix=inputs=2:duration=first:dropout_transition=3" -c:v copy -c:a aac output.mp4
atrim=0:30:裁剪背景音乐为前 30 秒。
duration=first:音频长度匹配第一条音轨。

4. 只添加背景音乐,不混合原声音轨
如果只需要添加背景音乐而不保留原声音轨:

ffmpeg -i input.mp4 -i background.mp3 -map 0:v -map 1:a -c:v copy -shortest output.mp4
-map 0:v:选择原视频轨。
-map 1:a:选择背景音乐作为音频轨。

注意事项
音频格式兼容性
如果背景音乐格式不是常见的(如 WAV 或 MP3),FFmpeg 会自动转码。
确保输出文件音频编码(如 aac)与目标设备兼容。
音频时长不一致
如果背景音乐比视频短,可以使用 -stream_loop -1 循环背景音乐。

FFmpeg 去除视频黑边

基本命令

ffmpeg -i input.mp4 -vf "crop=w:h:x:y" output.mp4
crop:裁剪滤镜,用于移除黑边。
w:h:裁剪后的视频宽度和高度。
x:y:裁剪区域左上角的起始坐标。

步骤说明
确定黑边区域大小 使用以下命令查看视频信息和边界:

ffmpeg -i input.mp4 -vf "cropdetect=24:16:0" -an -f null -
cropdetect=24:16:0:
24:黑边亮度阈值(默认 24)。
16:检测单位块大小(默认 16)。
运行后,FFmpeg 会输出类似以下的日志:

plaintext

[Parsed_cropdetect_0 @ …] crop=1920:800:0:140
结果表示裁剪区域为 1920×800,左上角坐标为 (0,140)。

应用裁剪结果 根据检测到的裁剪参数:

ffmpeg -i input.mp4 -vf "crop=1920:800:0:140" output.mp4

Windows 示例

ffmpeg -i video.mp4 -vf "crop=1920:1080:0:100" cropped_video.mp4
宽度:1920 像素。
高度:1080 像素。
起始坐标:从 (0, 100) 开始。

Linux 示例

ffmpeg -i video.mp4 -vf "crop=1280:720:50:50" cropped_video.mp4
宽度:1280 像素。
高度:720 像素。
起始坐标:从 (50, 50) 开始。
自动裁剪(黑边检测并去除)

如果想自动检测并去除黑边,可以结合 cropdetect:

ffmpeg -i input.mp4 -vf "cropdetect=24:16:0,crop" output.mp4
这里 cropdetect 会检测黑边,crop 自动应用检测结果。

高级用法
1. 按比例裁剪
使用相对比例裁剪(比如移除上下 10% 的区域):

ffmpeg -i input.mp4 -vf "crop=in_w:in_h*0.8:0:in_h*0.1" output.mp4
in_w:输入视频宽度。
in_h:输入视频高度。
in_h*0.8:裁剪高度为原高度的 80%。
in_h*0.1:从顶部偏移 10%。

2. 与缩放结合
裁剪后调整分辨率:

ffmpeg -i input.mp4 -vf "crop=1920:800:0:140,scale=1280:720" output.mp4
scale=1280:720 将裁剪后的内容缩放为 1280x720 分辨率。
注意事项
检测准确性:对于不规则黑边,可能需要手动调整 w:h:x:y 参数。
裁剪多余内容:确保裁剪后画面比例符合需求(如 16:9 或 4:3)。

提取视频字幕

基本命令

ffmpeg -i input.mp4 -map 0:s:0 output.srt
-i input.mp4:输入视频文件。
-map 0:s:0:选择第一条字幕轨道(s 表示字幕)。
output.srt:导出为 SRT 字幕文件(也可以为 VTT、ASS 等格式)。

详细说明
查看字幕轨道信息 首先需要确认视频中的字幕轨道:

ffmpeg -i input.mp4
输出示例:

plaintext

Stream #0:0: Video: h264 …
Stream #0:1: Audio: aac …
Stream #0:2: Subtitle: subrip (default) (eng)
字幕轨道通常是 Stream #0:2,类型为 Subtitle。
如果有多个字幕轨道,可以选择特定轨道提取。

提取指定轨道字幕 根据轨道编号(如 0:2)提取字幕:

ffmpeg -i input.mp4 -map 0:2 output.srt

提取所有字幕轨道 如果需要提取所有字幕轨道:

ffmpeg -i input.mp4 -map 0:s -c copy output_%d.srt
output_%d.srt:生成多个文件,每个字幕轨道对应一个文件(如 output_0.srt,output_1.srt 等)。
支持的字幕格式
FFmpeg 支持以下字幕格式,具体提取命令与 output.srt 替换格式相关:

SRT 字幕:output.srt
ASS 字幕:output.ass
VTT 字幕:output.vtt

高级用法
1. 提取嵌入图片格式的字幕
如果字幕是图片格式(如 PGS 字幕),需要 OCR 转换:

ffmpeg -i input.mp4 -map 0:s:0 -c:s dvdsub output.idx

然后用工具(如 Subtitle Edit)进行 OCR 识别。

2. 指定语言提取字幕
如果视频中有多种语言字幕,可以通过 -map 和语言标签筛选:

ffmpeg -i input.mp4 -map 0:s:m:language:eng output.srt
language:eng:提取英语字幕。

3. 仅复制字幕而不转码

ffmpeg -i input.mp4 -map 0:s:0 -c copy output.srt
使用 -c copy 直接复制字幕数据。

Windows 示例
提取英语字幕轨道:

ffmpeg -i video.mp4 -map 0:s:m:language:eng output.srt

Linux 示例
提取所有字幕轨道:

ffmpeg -i video.mp4 -map 0:s -c copy subtitles_%d.srt
注意事项
字幕类型兼容性:
FFmpeg 可以直接提取文本字幕(如 SRT、ASS)。
对图片字幕(如 PGS)需后续处理。
语言标签准确性:并非所有视频文件都正确标注字幕语言,必要时需手动确认轨道编号。

图片转换成视频

基本命令

ffmpeg -framerate 25 -i input%d.jpg -c:v libx264 -r 25 -pix_fmt yuv420p output.mp4

参数说明

输入图片序列

-framerate 25:设置输入帧率(每秒播放图片的帧数)。
-i input%d.jpg:输入图片序列,input%d.jpg 表示图片命名为 input1.jpg, input2.jpg 等。
图片命名需按数字顺序排列(如 input1.jpg, input2.jpg,或 image001.png, image002.png)。
如果图片格式不同(如 PNG),替换文件扩展名即可。

视频编码

-c:v libx264:使用 H.264 编码生成 MP4 格式视频(兼容性高)。
-r 25:设置输出视频帧率,需与 -framerate 一致。

颜色空间

-pix_fmt yuv420p:确保视频兼容大多数播放器。

输出文件

output.mp4:生成的视频文件名称,可更改为其他格式(如 .avi 或 .mkv)。

Windows 示例
将 30 张图片(命名为 frame1.jpg 到 frame30.jpg)转换为 25fps 的视频:

ffmpeg -framerate 25 -i frame%d.jpg -c:v libx264 -r 25 -pix_fmt yuv420p video.mp4

Linux 示例
将图片序列 image01.png, image02.png 转换为 30fps 视频:

ffmpeg -framerate 30 -i image%02d.png -c:v libx264 -r 30 -pix_fmt yuv420p output.mp4

高级用法
1. 指定图片播放时长(静态图片转视频)
如果只有一张图片并需要设定持续时间:

ffmpeg -loop 1 -i image.jpg -c:v libx264 -t 10 -pix_fmt yuv420p output.mp4
-loop 1:图片循环显示。
-t 10:设置视频时长为 10 秒。

2. 添加背景音乐
为生成的视频添加音频:

ffmpeg -framerate 25 -i frame%d.jpg -i music.mp3 -c:v libx264 -c:a aac -shortest -pix_fmt yuv420p output.mp4
-i music.mp3:背景音乐文件。
-shortest:确保音频和视频长度一致。

3. 调整分辨率
如果需要调整视频分辨率:

ffmpeg -framerate 25 -i frame%d.jpg -vf "scale=1920:1080" -c:v libx264 -pix_fmt yuv420p output.mp4
scale=1920:1080:将视频分辨率设置为 1920x1080。

4. 不同图片格式混合
如果图片格式或命名不统一,可将文件名列入文本文件,然后生成视频:

ffmpeg -f concat -safe 0 -i filelist.txt -c:v libx264 -r 25 -pix_fmt yuv420p output.mp4
filelist.txt 内容示例:

plaintext

file 'image1.jpg'
file 'image2.png'
file 'image3.jpeg'

注意事项
图片命名规则

图片需按序号命名(如 image001.png, image002.png)。
使用 -pattern_type glob 处理非连续命名:
ffmpeg -pattern_type glob -i "*.jpg" -c:v libx264 output.mp4
帧率设置

视频帧率影响播放速度,默认 25fps,适当调整 -framerate 值可加快或减慢视频播放。

消除视频中部份声音

基本命令

ffmpeg -i input.mp4 -af "volume=enable='between(t,START,END)':volume=0" -c:v copy output.mp4
-af:设置音频过滤器。
volume=enable='between(t,START,END)':volume=0:
START:静音的开始时间(秒)。
END:静音的结束时间(秒)。
volume=0:将音量设置为 0(静音)。
-c:v copy:视频流不重新编码,保持原视频质量。

Windows 示例
将视频 video.mp4 中 5 到 10 秒的声音静音:

ffmpeg -i video.mp4 -af "volume=enable='between(t,5,10)':volume=0" -c:v copy muted_video.mp4

Linux 示例
将视频 video.mp4 中 30 到 45 秒的声音静音:

ffmpeg -i video.mp4 -af "volume=enable='between(t,30,45)':volume=0" -c:v copy muted_video.mp4

高级用法
1. 多段静音
对多个时间段静音,可以使用多个 enable 条件:

ffmpeg -i input.mp4 -af "volume=enable='between(t,5,10)+between(t,20,25)':volume=0" -c:v copy output.mp4

时间段 5-10 秒和 20-25 秒均被静音。

2. 降低指定时间段音量
如果需要降低音量而非完全静音:

ffmpeg -i input.mp4 -af "volume=enable='between(t,5,10)':volume=0.5" -c:v copy output.mp4
将 5 到 10 秒的音量调整为原来的 50%。

3. 仅处理音频轨
如果想独立操作音频(不保留视频流),可以提取音频轨操作后再合并:

提取音频:

ffmpeg -i input.mp4 -vn -acodec copy audio.aac

合并回视频:

ffmpeg -i input.mp4 -i muted_audio.aac -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output.mp4

4. 替换静音段的音频
用另一段音频替换静音区域:

创建静音段:

ffmpeg -i input.mp4 -af "volume=enable='between(t,5,10)':volume=0" -c:v copy temp.mp4

混合替换音频:

ffmpeg -i temp.mp4 -i replacement_audio.mp3 -filter_complex "[0:a][1:a]amix=inputs=2:duration=first" output.mp4
注意事项
精确时间控制:
使用 t 参数指定时间,确保时间单位为秒,精度可以到小数点(如 5.5 秒)。
重新编码的开销:
如果需要对音频重新编码(如更改格式),可省略 -c:v copy,使用 -c:a aac 等音频编码参数。

视频随机添加水印

基本命令

ffmpeg -i input.mp4 -i watermark.png -filter_complex "[1:v]scale=100:100[wm];[0:v][wm]overlay=x='random(0)*W':y='random(1)*H':enable='between(t,START,END)'" -c:a copy output.mp4

参数说明

输入文件

-i input.mp4:输入视频。
-i watermark.png:水印图片(需为透明 PNG 或其他支持透明的格式)。

-filter_complex

scale=100:100:调整水印图片大小为 100×100 像素。
overlay=x=’random(0)*W’:y=’random(1)*H’:
x 和 y:水印的随机位置。
random(0) 和 random(1):生成伪随机数。
W 和 H:视频宽度和高度。
enable=’between(t,START,END)’:在 START 到 END 秒间显示水印。
替换 START 和 END 为具体时间,或去掉 enable 参数使水印始终随机显示。
-c:a copy

保留原始音频不重新编码。

随机显示水印的示例

Windows 示例

为 video.mp4 添加 logo.png 水印,随机出现在视频的前 10 秒:

ffmpeg -i video.mp4 -i logo.png -filter_complex "[1:v]scale=100:100[wm];[0:v][wm]overlay=x='random(0)*W':y='random(1)*H':enable='between(t,0,10)'" -c:a copy output.mp4

Linux 示例
为 video.mp4 添加 logo.png 水印,水印随机出现在整个视频中:

ffmpeg -i video.mp4 -i logo.png -filter_complex "[1:v]scale=150:150[wm];[0:v][wm]overlay=x='random(0)*W':y='random(1)*H'" -c:a copy output.mp4

高级用法
1. 动态更换水印时间
如果想让水印间歇性出现,可以通过多个 overlay 指定不同时间段:

ffmpeg -i input.mp4 -i watermark.png -filter_complex "[1:v]scale=100:100[wm];[0:v][wm]overlay=x='random(0)*W':y='random(1)*H':enable='between(t,0,5)',[0:v][wm]overlay=x='random(2)*W':y='random(3)*H':enable='between(t,10,15)'" -c:a copy output.mp4
在 0-5 秒和 10-15 秒分别随机显示水印。

2. 调整随机种子
默认的 random() 使用固定伪随机种子,结果可能一致。可通过外部脚本动态生成种子(如 Bash 或 Python)。

3. 多水印随机显示
为视频添加多个不同水印,随机选择显示:

ffmpeg -i input.mp4 -i watermark1.png -i watermark2.png -filter_complex "[1:v]scale=100:100[wm1];[2:v]scale=120:120[wm2];[0:v][wm1]overlay=x='random(0)*W':y='random(1)*H':enable='between(t,0,10)'[v1];[v1][wm2]overlay=x='random(2)*W':y='random(3)*H':enable='between(t,10,20)'" -c:a copy output.mp4

4. 控制水印透明度
为水印添加透明度效果(通过 format 和 blend 实现):

ffmpeg -i input.mp4 -i watermark.png -filter_complex "[1:v]scale=100:100[wm];[wm]format=rgba,colorchannelmixer=aa=0.5[wm_alpha];[0:v][wm_alpha]overlay=x='random(0)*W':y='random(1)*H'" -c:a copy output.mp4
aa=0.5:设置水印透明度为 50%。

注意事项
随机种子问题:

FFmpeg 的随机数生成在相同命令下可能产生固定序列。如需完全随机,可通过外部脚本动态生成命令。

水印格式:

推荐使用透明 PNG 格式,避免水印背景遮挡视频内容。
性能优化:

对长视频建议先分割时间段处理,再合并输出。

视频与声音合并

基本命令

ffmpeg -i input_video.mp4 -i input_audio.mp3 -c:v copy -c:a aac -strict experimental output.mp4

参数说明

输入文件

input_video.mp4:原始视频文件。
input_audio.mp3:音频文件(可以是 MP3、AAC、WAV 等格式)。
-c:v copy

保持视频流原始质量,不重新编码。
-c:a aac

设置音频编码格式为 AAC,兼容性较高。
如果音频已经是 AAC,可替换为 -c:a copy,直接复制音频流。
-strict experimental

用于启用实验性 AAC 编码器(旧版 FFmpeg 可能需要)。
output.mp4

合并后的视频文件。

Windows 示例
将 video.mp4 与 audio.mp3 合并:

ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac output.mp4

Linux 示例
将 video.avi 与 sound.wav 合并:

ffmpeg -i video.avi -i sound.wav -c:v copy -c:a aac output.mkv

高级用法
1. 同步音频与视频时长
如果音频或视频时长不一致,可以选择以视频或音频为基准:

以视频时长为基准:

ffmpeg -i video.mp4 -i audio.mp3 -shortest -c:v copy -c:a aac output.mp4
-shortest:以较短的流为准,自动截断。

以音频循环填充:

ffmpeg -i video.mp4 -i audio.mp3 -filter_complex "amovie=input_audio.mp3:loop=0,asetpts=N/SR/TB" -c:v copy -c:a aac output.mp4

2. 调整音频音量
如果需要调整音频音量:

ffmpeg -i video.mp4 -i audio.mp3 -filter_complex "[1:a]volume=0.8[a]" -map 0:v -map "[a]" -c:v copy -c:a aac output.mp4
volume=0.8:将音量设置为 80%。

3. 延迟或对齐音频
如果音频需要延迟(或提前)同步到视频:

ffmpeg -i video.mp4 -i audio.mp3 -itsoffset 2 -i audio.mp3 -map 0:v -map 2:a -c:v copy -c:a aac output.mp4
-itsoffset 2:将音频延迟 2 秒。

4. 静音原始音频
如果需要保留视频,但移除视频自带的音轨:

ffmpeg -i video.mp4 -i audio.mp3 -map 0:v -map 1:a -c:v copy -c:a aac output.mp4

5. 添加多条音轨
如果需要为视频添加多条音轨:

ffmpeg -i video.mp4 -i audio1.mp3 -i audio2.mp3 -map 0:v -map 1:a -map 2:a -c:v copy -c:a aac output.mp4
播放时可以选择切换音轨。

注意事项
格式兼容性:

输出格式需支持所用的音视频编码(如 .mp4 通常使用 H.264 和 AAC)。

音频流对齐:

确保音频与视频长度一致,必要时使用 -shortest 或音频填充处理。
重新编码的开销:

如果无特殊需求,优先使用 -c:v copy 和 -c:a copy,避免重新编码。

视频合并

方法 1:合并无重新编码的视频(视频格式一致)
如果两个视频的编码、分辨率、帧率等完全一致,可以直接将视频合并而无需重新编码,方法如下:

基本命令

ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4

参数说明
-f concat:指定合并模式为 concat(连接模式)。
-safe 0:确保文件路径安全,适用于非标准路径。
-i filelist.txt:输入一个包含文件列表的文本文件。
文件列表示例(filelist.txt):
plaintext

file ‘input1.mp4’
file ‘input2.mp4’
file ‘input3.mp4’

确保每个文件路径都在 file 行前缀下,并且使用相对路径或绝对路径。
-c copy:直接复制视频和音频流,不重新编码。
output.mp4:输出合并后的视频文件。

示例
将 video1.mp4 和 video2.mp4 合并:

创建一个 filelist.txt 文件,内容如下:
plaintext

file ‘video1.mp4’
file ‘video2.mp4’

执行以下命令:

ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4

方法 2:合并不同编码的视频(需要重新编码)
如果两个视频的编码、分辨率、帧率等不同,需要重新编码为相同格式后合并:

ffmpeg -i input1.mp4 -i input2.mp4 -c:v libx264 -c:a aac -strict experimental output.mp4

参数说明
-i input1.mp4 -i input2.mp4:输入两个视频文件。
-c:v libx264:使用 H.264 视频编码。
-c:a aac:使用 AAC 音频编码。
-strict experimental:启用实验性 AAC 编码器(如果使用旧版 FFmpeg)。
output.mp4:输出合并后的视频文件。

示例
将 video1.mp4 和 video2.mp4 合并并重新编码:

ffmpeg -i video1.mp4 -i video2.mp4 -c:v libx264 -c:a aac -strict experimental output.mp4

方法 3:合并视频并添加转场(需要重新编码)
如果希望在两个视频之间添加转场效果(如淡入淡出),可以使用以下命令。

基本命令

ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0][1]xfade=transition=fade:duration=2:offset=5[v]" -map "[v]" -c:v libx264 -c:a aac -strict experimental output.mp4

参数说明
xfade=transition=fade:duration=2:offset=5:指定视频转场效果。
transition=fade:设置淡入淡出效果。
duration=2:设置转场持续时间为 2 秒。
offset=5:设置转场开始的时间为 5 秒。
-map “[v]”:将视频流从过滤器链映射到输出。
-c:v libx264 -c:a aac:重新编码视频和音频。

方法 4:合并视频文件(不同格式,重新编码)
如果视频格式不同且需要将它们转换为统一格式后合并,可以使用以下命令:

基本命令

ffmpeg -i input1.avi -i input2.mp4 -c:v libx264 -c:a aac output.mp4

示例
将 video1.avi 和 video2.mp4 转换并合并为一个 MP4 文件:

ffmpeg -i video1.avi -i video2.mp4 -c:v libx264 -c:a aac output.mp4

合并音频和视频(音频文件合并)
如果你只是想将一个音频文件与一个视频文件合并,使用以下命令:

基本命令

ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -strict experimental -map 0:v -map 1:a output.mp4

参数说明
-map 0:v:选择视频流。
-map 1:a:选择音频流。
-c:v copy:视频不重新编码,直接复制。
-c:a aac:音频编码为 AAC。
注意事项
文件格式一致性:如果两个视频的编码、分辨率等不同,必须重新编码,或者确保使用相同的参数。
转场效果:如果希望在两个视频间加上转场效果,可以在 -filter_complex 中使用适当的过渡效果。
输出格式:通常输出为 .mp4 格式,确保所选的编码格式与输出容器兼容。

视频分割

要使用 FFmpeg 分割视频,可以按照指定时间点或片段长度将视频拆分为多个部分。以下是几种常见的方法,适用于 Windows 和 Linux。

方法 1:按时间分割

基本命令

ffmpeg -i input.mp4 -ss 00:00:00 -to 00:00:30 -c copy output_segment.mp4

参数说明
-i input.mp4:输入视频文件。
-ss 00:00:00:设置开始时间点。
-to 00:00:30:设置结束时间点。
-c copy:直接复制视频流,避免重新编码。
output_segment.mp4:输出视频片段文件。

示例
将 video.mp4 分割为 30 秒:

ffmpeg -i video.mp4 -ss 00:01:00 -to 00:01:30 -c copy segment.mp4

方法 2:按片段长度分割
基本命令

ffmpeg -i input.mp4 -vf "split=2" output_segment_%03d.mp4

参数说明
-i input.mp4:输入视频文件。
-vf “split=2″:根据长度拆分视频,每个片段长度为 2 秒。
output_segment_%03d.mp4:输出视频片段文件,使用 %03d 占位符以便生成如 segment_001.mp4、segment_002.mp4 等片段。

示例
将 video.mp4 分割为 2 秒一个片段:

ffmpeg -i video.mp4 -vf "split=5" output_segment_%03d.mp4

方法 3:自定义片段长度

基本命令

ffmpeg -i input.mp4 -c copy -f segment -segment_time 10 -reset_timestamps 1 output_segment_%03d.mp4

参数说明
-i input.mp4:输入视频文件。
-c copy:直接复制视频流。
-f segment:指定输出片段格式。
-segment_time 10:每个视频片段长度为 10 秒。
output_segment_%03d.mp4:输出视频片段文件。

示例
将 video.mp4 分割为 10 秒一个片段:

ffmpeg -i video.mp4 -c copy -f segment -segment_time 10 -reset_timestamps 1 output_segment_%03d.mp4

方法 4:使用 -ss 和 -t 参数

基本命令

ffmpeg -i input.mp4 -ss 00:01:00 -t 00:02:00 -c copy segment.mp4
参数说明
-i input.mp4:输入视频文件。
-ss 00:01:00:设置开始时间点。
-t 00:02:00:从开始点开始,持续 2 分钟。
-c copy:直接复制视频流。
segment.mp4:输出视频片段文件。

示例
将 video.mp4 从 1 分钟处开始分割,持续 2 分钟:
ffmpeg -i video.mp4 -ss 00:01:00 -t 00:02:00 -c copy segment.mp4

方法 5:自动遍历目录分割所有视频
使用以下脚本可以遍历目录中的所有视频文件并将它们分割为指定片段:

脚本(Linux)

for file in *.mp4; do
  ffmpeg -i "$file" -c copy -f segment -segment_time 10 -reset_timestamps 1 "${file%.*}_%03d.mp4"
done
参数说明
*.mp4:匹配当前目录下所有 mp4 文件。
-c copy:直接复制视频流。
-f segment:输出片段格式。
-segment_time 10:每个视频片段长度为 10 秒。
"${file%.*}_%03d.mp4":输出文件命名格式。

示例
遍历 video_folder 中所有 mp4 文件,每个片段长度为 10 秒:

for file in video_folder/*.mp4; do
  ffmpeg -i "$file" -c copy -f segment -segment_time 10 -reset_timestamps 1 "${file%.*}_%03d.mp4"
done

注意事项
编码和格式兼容性:如果需要将视频拆分成多个片段,每个片段都使用相同的编码和格式(如 H.264 和 AAC)。
视频时长较长的情况:可能需要根据需要分割文件大小和性能进行调整。
命令输出位置:确保 output_segment.mp4 或 output_segment_%03d.mp4 的路径存在,并且有写权限。

提取声音或视频

使用 FFmpeg 提取视频中的音频或提取音频中的视频非常简单,以下是常见的命令,适用于 Windows 和 Linux。

方法 1:提取视频中的音频
如果您只想从视频文件中提取音频(例如 MP4 文件中的音频),可以使用以下命令:

提取音频命令

ffmpeg -i input_video.mp4 -vn -acodec copy output_audio.mp3
参数说明
-i input_video.mp4:输入视频文件。
-vn:禁用视频流(表示不提取视频,只提取音频)。
-acodec copy:复制音频流,不重新编码。
output_audio.mp3:输出的音频文件,可以选择不同的格式(例如 .mp3, .aac, .wav 等)。

示例
从 video.mp4 提取音频:

ffmpeg -i video.mp4 -vn -acodec copy output_audio.mp3

方法 2:提取视频中的音频并转码
如果你需要转换音频的格式,可以使用 FFmpeg 进行转码操作,例如将音频提取并转换为 .aac 格式。

命令

ffmpeg -i input_video.mp4 -vn -acodec aac output_audio.aac

参数说明
-acodec aac:将音频编码为 AAC 格式。

示例
从 video.mp4 提取并转换为 AAC 格式:

ffmpeg -i video.mp4 -vn -acodec aac output_audio.aac

方法 3:提取视频中的视频流(无音频)
如果只想提取视频流而不包含音频,可以使用以下命令:

提取视频命令

ffmpeg -i input_video.mp4 -an -vcodec copy output_video.mp4
参数说明
-i input_video.mp4:输入视频文件。
-an:禁用音频流(表示只提取视频,不提取音频)。
-vcodec copy:复制视频流,不重新编码。
output_video.mp4:输出的视频文件。

示例
从 video.mp4 提取视频(不包括音频):

ffmpeg -i video.mp4 -an -vcodec copy output_video.mp4

方法 4:提取音频并调整音频质量
如果你希望提取音频并调整音频质量(如改变比特率或采样率),可以指定音频编码器和相关参数:

命令

ffmpeg -i input_video.mp4 -vn -acodec mp3 -ab 192k -ar 44100 output_audio.mp3
参数说明
-acodec mp3:将音频编码为 MP3 格式。
-ab 192k:设置比特率为 192 kbps。
-ar 44100:设置音频采样率为 44.1 kHz。

示例
从 video.mp4 提取音频并设置比特率为 192 kbps:

ffmpeg -i video.mp4 -vn -acodec mp3 -ab 192k -ar 44100 output_audio.mp3

方法 5:提取音频并指定通道数
如果你希望从视频中提取音频并设置为单声道或立体声,可以使用 -ac 参数来指定通道数。

命令

ffmpeg -i input_video.mp4 -vn -acodec mp3 -ac 1 output_audio.mp3
参数说明
-ac 1:将音频通道设置为单声道。
-ac 2:将音频通道设置为立体声(默认值)。

示例
从 video.mp4 提取音频并设置为单声道:

ffmpeg -i video.mp4 -vn -acodec mp3 -ac 1 output_audio.mp3

方法 6:提取视频并指定编码器和参数
如果需要提取视频并重新编码,可以使用以下命令:

命令

ffmpeg -i input_video.mp4 -an -vcodec libx264 -preset fast output_video.mp4
参数说明
-vcodec libx264:将视频重新编码为 H.264 格式。
-preset fast:使用快速预设来加速编码过程(可以选择 ultrafast、fast、medium 等)。

示例
从 video.mp4 提取视频并使用 H.264 编码:

ffmpeg -i video.mp4 -an -vcodec libx264 -preset fast output_video.mp4

注意事项
格式支持:确保你提取的音频格式是你需要的(如 .mp3、.aac、.wav 等)。
无损处理:如果使用 -c copy,不会重新编码音视频流,质量会保持不变,但需要确保输入流的格式和输出格式兼容。
重新编码:如果需要转换为其他格式,FFmpeg 会重新编码,可能会影响质量,尤其是在低比特率下。

音视频转换

使用 FFmpeg 进行音视频格式转换非常简单,FFmpeg 支持几乎所有常见的视频和音频格式。以下是常见的音视频转换命令,适用于 Windows 和 Linux。

方法 1:视频格式转换
将视频从一种格式转换为另一种格式,例如将 .avi 格式的视频转换为 .mp4 格式。

命令

ffmpeg -i input_video.avi output_video.mp4
参数说明
-i input_video.avi:输入的视频文件。
output_video.mp4:输出的视频文件,可以选择其他格式,如 .mov、.mkv 等。

示例
将 video.avi 转换为 .mp4 格式:

ffmpeg -i video.avi video.mp4

方法 2:音频格式转换
将音频从一种格式转换为另一种格式,例如将 .wav 格式的音频转换为 .mp3 格式。

命令

ffmpeg -i input_audio.wav output_audio.mp3
参数说明
-i input_audio.wav:输入的音频文件。
output_audio.mp3:输出的音频文件,可以选择其他格式,如 .aac、.flac 等。

示例
将 audio.wav 转换为 .mp3 格式:

ffmpeg -i audio.wav audio.mp3

方法 3:视频转码并调整质量(重新编码)
将视频从一种格式转换为另一种格式,并指定视频编码器和质量(比特率)。

命令

ffmpeg -i input_video.avi -c:v libx264 -crf 23 -c:a aac -b:a 192k output_video.mp4
参数说明
-c:v libx264:使用 H.264 视频编码器。
-crf 23:控制视频质量,范围 0(最高质量)到 51(最低质量),常用值为 18-28,值越小质量越高。
-c:a aac:使用 AAC 音频编码器。
-b:a 192k:音频比特率设置为 192 kbps。

示例
将 video.avi 转换为 .mp4 格式,并调整视频和音频质量:

ffmpeg -i video.avi -c:v libx264 -crf 23 -c:a aac -b:a 192k video.mp4

方法 4:音视频格式转换并调整音频质量
将视频转换为 .mp4 格式并将音频转换为 .mp3 格式,同时设置音频比特率。

命令

ffmpeg -i input_video.avi -c:v libx264 -c:a libmp3lame -b:a 192k output_video.mp4
参数说明
-c:v libx264:将视频编码为 H.264 格式。
-c:a libmp3lame:将音频编码为 MP3 格式。
-b:a 192k:设置音频比特率为 192 kbps。

示例
将 video.avi 转换为 .mp4 格式,同时将音频转换为 .mp3 格式并调整音频比特率:

ffmpeg -i video.avi -c:v libx264 -c:a libmp3lame -b:a 192k output_video.mp4
方法 5:仅转换视频流(不改变音频)
如果你只想转换视频流格式,而保持音频不变,可以使用以下命令:

命令
ffmpeg -i input_video.avi -c:v libx264 -c:a copy output_video.mp4
参数说明
-c:v libx264:将视频编码为 H.264 格式。
-c:a copy:复制原始音频流,不进行重新编码。

示例
将 video.avi 转换为 .mp4 格式,但保持音频不变:

ffmpeg -i video.avi -c:v libx264 -c:a copy video.mp4

方法 6:仅转换音频流(不改变视频)
如果你只想转换音频流格式,而保持视频不变,可以使用以下命令:

命令

ffmpeg -i input_video.avi -c:v copy -c:a aac output_audio.m4a
参数说明
-c:v copy:复制视频流,不进行重新编码。
-c:a aac:将音频编码为 AAC 格式。

示例
将 video.avi 中的音频提取并转换为 .m4a 格式:

ffmpeg -i video.avi -c:v copy -c:a aac audio.m4a

方法 7:批量转换文件
如果你想批量转换目录中的所有视频文件,可以使用以下脚本:

Linux/Windows(批量转换)

for file in *.avi; do ffmpeg -i "$file" "${file%.avi}.mp4"; done
参数说明
*.avi:批量处理当前目录下的所有 .avi 文件。
"${file%.avi}.mp4":输出转换后的 .mp4 文件,去掉原文件的 .avi 扩展名并替换为 .mp4。

示例
批量将当前目录中的所有 .avi 文件转换为 .mp4 文件:

for file in *.avi; do ffmpeg -i "$file" "${file%.avi}.mp4"; done

方法 8:视频分辨率调整和格式转换
如果你希望在转换格式的同时调整视频的分辨率,可以使用以下命令:

命令

ffmpeg -i input_video.avi -vf "scale=1280:720" -c:v libx264 -c:a aac output_video.mp4
参数说明
-vf "scale=1280:720":调整视频分辨率为 1280x720(HD)。
-c:v libx264:将视频编码为 H.264 格式。
-c:a aac:将音频编码为 AAC 格式。

示例
将 video.avi 转换为 .mp4 格式,并调整分辨率为 1280×720:

ffmpeg -i video.avi -vf "scale=1280:720" -c:v libx264 -c:a aac video.mp4

注意事项
输出格式和编码器:确保你选择的编码器和输出格式兼容。
音视频同步:在转换过程中,确保视频和音频流的同步。
批量转换:如果要批量转换多个文件,可以使用脚本实现自动化。
质量设置:如需调整质量(例如比特率、分辨率等),可以使用 -crf、-b:v、-b:a 等参数。

视频去水印

使用 FFmpeg 去除视频水印的方法通常有两种:一种是通过裁剪视频来去除水印,另一种是通过使用视频处理滤镜来尝试去除水印。下面分别介绍这两种方法,适用于 Windows 和 Linux。

方法 1:通过裁剪去水印
如果水印位于视频的角落或某个固定区域,可以使用裁剪(crop)命令去除水印。

裁剪命令

ffmpeg -i input_video.mp4 -vf "crop=w:h:x:y" -c:a copy output_video.mp4
参数说明
-i input_video.mp4:输入视频文件。
-vf "crop=w:h:x:y":裁剪视频的命令。
w:裁剪后的宽度(以像素为单位)。
h:裁剪后的高度(以像素为单位)。
x:裁剪的起始横坐标(左上角距离视频左边的距离)。
y:裁剪的起始纵坐标(左上角距离视频上边的距离)。
-c:a copy:复制音频流,避免重新编码音频。
output_video.mp4:输出的视频文件。

示例
假设水印位于视频的右下角,可以裁剪掉该区域(例如视频尺寸为 1920×1080,去除右下角 200×200 的区域):

ffmpeg -i video.mp4 -vf "crop=1920:880:0:0" -c:a copy output_video.mp4

这将裁剪出从 (0, 0) 开始的 1920×880 的视频区域,去除下方和右侧的 200 像素区域。

方法 2:通过去除水印区域(模糊/填充方法)
如果水印覆盖的区域比较复杂,且无法直接裁剪掉,可以尝试使用模糊或填充该区域来减少水印的可见性。FFmpeg 提供了多种滤镜,例如 delogo 滤镜,专门用于去除水印。

使用 delogo 滤镜去除水印
delogo 滤镜通过对水印区域进行模糊处理来去除水印。

命令

ffmpeg -i input_video.mp4 -vf "delogo=x=10:y=10:w=200:h=60:show=0" -c:a copy output_video.mp4
参数说明
x=10:y=10:指定水印位置的左上角坐标。
x 是水印的水平位置。
y 是水印的垂直位置。
w=200:h=60:指定水印区域的宽度和高度。
w 是水印区域的宽度(像素)。
h 是水印区域的高度(像素)。
show=0:设置为 0 表示不显示 delogo 滤镜的处理效果。如果设置为 1,可以在视频中看到水印消除的效果。
-c:a copy:复制音频流,不进行音频重新编码。
output_video.mp4:输出处理后的视频文件。

示例
如果水印位于视频的左上角,宽度为 200 像素,高度为 60 像素,可以使用以下命令:

ffmpeg -i video.mp4 -vf "delogo=x=10:y=10:w=200:h=60:show=0" -c:a copy output_video.mp4

方法 3:通过平滑或模糊处理去除水印
在某些情况下,可能需要使用平滑或模糊效果来隐藏水印。

模糊命令

ffmpeg -i input_video.mp4 -vf "boxblur=luma_radius=5:luma_power=1" -c:a copy output_video.mp4
参数说明
boxblur=luma_radius=5:luma_power=1:此命令会对视频进行模糊处理。luma_radius 控制模糊的范围,luma_power 控制模糊的强度。

示例
如果水印位于视频的中央区域,可以使用以下模糊命令进行处理:

ffmpeg -i video.mp4 -vf "boxblur=luma_radius=5:luma_power=1" -c:a copy output_video.mp4

方法 4:使用复杂的自定义区域处理
如果水印位于不规则区域,且无法简单裁剪,可以使用更复杂的视频处理方法,如结合 overlay 或其他滤镜。

命令

ffmpeg -i input_video.mp4 -vf "delogo=x=10:y=10:w=200:h=60:show=0, overlay" -c:a copy output_video.mp4

注意事项
delogo 滤镜的效果:delogo 滤镜主要用于去除带有简单矩形水印的区域。如果水印区域比较复杂,效果可能不完美。
裁剪区域的选择:如果采用裁剪方法,确保选择的裁剪区域不会影响视频的关键部分。
视频质量:使用模糊或滤镜处理水印时,可能会导致画面质量有所下降。确保选用合适的参数,以最大程度保持视频质量。
性能影响:去水印是一个计算密集型的操作,尤其是使用滤镜时,可能需要较长的处理时间。

视频转GIF

使用 FFmpeg 将视频转换为 GIF 动画非常简单。FFmpeg 提供了强大的转换功能,支持将视频的指定部分转换为 GIF 格式。以下是常见的转换命令,适用于 Windows 和 Linux。

方法 1:基本的视频转换为 GIF
将视频从格式(如 .mp4)转换为 GIF 动画。

命令

ffmpeg -i input_video.mp4 output.gif
参数说明
-i input_video.mp4:输入的视频文件。
output.gif:输出的 GIF 文件。

示例
将 video.mp4 转换为 GIF 动画:

ffmpeg -i video.mp4 output.gif

方法 2:指定视频时间段转换为 GIF
如果只想将视频的某个特定部分(例如 5 秒到 10 秒之间)转换为 GIF,可以使用 -ss 和 -t 参数来指定开始时间和持续时间。

命令

ffmpeg -ss 00:00:05 -i input_video.mp4 -t 00:00:05 output.gif
参数说明
-ss 00:00:05:指定从视频的第 5 秒开始提取。
-t 00:00:05:指定提取 5 秒钟的视频部分。
-i input_video.mp4:输入的视频文件。
output.gif:输出的 GIF 文件。

示例
将 video.mp4 从第 5 秒到第 10 秒转换为 GIF 动画:

ffmpeg -ss 00:00:05 -i video.mp4 -t 00:00:05 output.gif

方法 3:设置 GIF 的分辨率
GIF 动画的文件大小与分辨率直接相关。如果你希望生成较小的 GIF,可以通过设置分辨率来减小文件大小。

命令

ffmpeg -i input_video.mp4 -vf "scale=320:-1" output.gif
参数说明
-vf "scale=320:-1":设置输出 GIF 的分辨率,320 是宽度,-1 表示 FFmpeg 自动计算高度,以保持视频的纵横比。
output.gif:输出的 GIF 文件。

示例
将 video.mp4 转换为宽度为 320 像素的 GIF 动画:

ffmpeg -i video.mp4 -vf "scale=320:-1" output.gif

方法 4:优化 GIF 文件大小
为了减小生成的 GIF 文件大小,可以使用 -filter_complex 参数来优化 GIF,例如通过减少帧率和调整颜色等。

命令

ffmpeg -i input_video.mp4 -vf "fps=10,scale=320:-1:flags=lanczos" -c:v gif output.gif
参数说明
fps=10:设置 GIF 的帧率为每秒 10 帧,减小文件大小。
scale=320:-1:调整 GIF 的分辨率,320 为宽度,-1 为自动调整高度以保持纵横比。
flags=lanczos:使用 Lanczos 算法进行高质量的缩放。
-c:v gif:指定视频编码为 GIF 格式。

示例
将 video.mp4 转换为优化过的 GIF,调整为宽度 320 像素、每秒 10 帧:

ffmpeg -i video.mp4 -vf "fps=10,scale=320:-1:flags=lanczos" -c:v gif output.gif

方法 5:通过生成调色板来提高 GIF 质量
生成 GIF 时,如果直接从视频中提取帧,可能会因为颜色数量的限制导致 GIF 看起来失真。你可以通过先生成一个调色板(即最合适的颜色调色板)来提高 GIF 的质量。

步骤 1:生成调色板

ffmpeg -i input_video.mp4 -vf "fps=10,scale=320:-1:flags=lanczos,palettegen" palette.png

步骤 2:使用调色板生成 GIF

ffmpeg -i input_video.mp4 -i palette.png -filter_complex "fps=10,scale=320:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif
参数说明
palettegen:生成调色板,保存为 palette.png。
paletteuse:使用调色板来生成 GIF,以提高色彩质量。
fps=10:设置帧率为 10 帧每秒。
scale=320:-1:设置 GIF 的宽度为 320 像素,保持纵横比。

示例
步骤 1:生成调色板

ffmpeg -i video.mp4 -vf "fps=10,scale=320:-1:flags=lanczos,palettegen" palette.png

步骤 2:生成 GIF 使用调色板

ffmpeg -i video.mp4 -i palette.png -filter_complex "fps=10,scale=320:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif

方法 6:批量转换视频为 GIF
如果你想批量将多个视频文件转换为 GIF,可以使用脚本来自动化这个过程。

Windows 批处理脚本

for %%f in (*.mp4) do ffmpeg -i "%%f" -vf "fps=10,scale=320:-1" "%%~nf.gif"

Linux Shell 脚本

for f in *.mp4; do ffmpeg -i "$f" -vf "fps=10,scale=320:-1" "${f%.mp4}.gif"; done

注意事项
GIF 文件大小:GIF 动画的文件大小可能非常大,尤其是分辨率和帧率较高时。可以通过调整帧率(fps)、分辨率(scale)以及颜色优化(通过调色板)来减小文件大小。
视频时长和质量:较长的视频转换为 GIF 会导致文件过大。如果视频很长,可以先提取视频的部分片段。
帧率:减少 GIF 的帧率可以有效减少文件大小,但可能会影响动画的流畅度。

 


sicnature ---------------------------------------------------------------------
I P 地 址: 3.133.117.246
区 域 位 置: 美国
系 统 信 息: 美国
Original content, please indicate the source:
同福客栈论坛 | 蟒蛇科普海南乡情论坛 | JiaYu Blog
sicnature ---------------------------------------------------------------------
Welcome to reprint. Please indicate the source https://myzhenai.com/post/4596.html

没有评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注