FFmpeg 视频处理速查清单解析:格式转换、视频编辑与流处理的完整命令指南

发布时间:2026/9/14 23:56:34
FFmpeg 视频处理速查清单解析:格式转换、视频编辑与流处理的完整命令指南
FFmpeg 视频处理速查清单解析格式转换、视频编辑与流处理的完整命令指南【免费下载链接】reference面向开发者的技术速查清单Cheat Sheets集合整理常见技术、工具与开发流程帮助快速查阅关键信息提高开发效率。项目地址: https://gitcode.com/GitHub_Trending/referen/reference本文是面向开发者的技术速查清单合集Quick Reference / reference 仓库中docs/ffmpeg.md备忘清单的深度解析。FFmpeg 是业界最常用的跨平台音视频处理命令行工具本文将以原文档为骨架系统讲解 FFmpeg 的安装方式、全局/主要/基础参数、视频与音频参数表、尺寸单位换算并逐条实战演示视频编辑、重新封装Remux、视频/音频过滤器、流处理拉流/推流/转发等场景的完整命令帮助你快速查阅并直接复制运行。读完本文你将掌握从「视频格式转换」到「多路流合并」「RTMP 推流」的完整 FFmpeg 操作能力。文档背景这份清单在仓库中的定位本仓库是一份面向中文开发者的技术栈速查清单集合docs/目录下的每个 Markdown 文件如docs/ffmpeg.md会被编译成一个独立的备忘清单页面并通过首页 README.md 的导航卡片[FFmpeg](https://link.gitcode.com/i/6aefa8a97d64d84f979eb82a21e41b37)入口访问同时配有对应图标 assets/ffmpeg.svg。页面的排版布局通过注释语法控制详见 CONTRIBUTING.md。该清单在仓库生态中还有实际应用场景终端文件管理器 Yazi 备忘清单 中就把ffmpeg列为安装依赖用于生成视频缩略图见 docs/yazi.md#L46可见 FFmpeg 是开发者日常工具链中的基础组件。一、安装与基本用法1.1 安装 FFmpeg| 系统 | 命令 | | :- | :- | | LinuxDebian/Ubuntu |apt-get install ffmpeg| | LinuxCentOS/RHEL |yum install ffmpeg| | macOS |brew install ffmpeg|提示部分 Linux 发行版的软件源中 FFmpeg 版本可能较旧如需最新编解码能力如 libx265、libvpx可考虑通过官方静态构建包或源码编译安装brew install ffmpeg在 macOS 上默认包含常用编解码器。1.2 快速上手示例最常见的用途是格式转换FFmpeg 会根据输出文件的扩展名自动推断目标封装格式# mp4 转 avi $ ffmpeg -i input.mp4 output.avi # webm 转 mp4 $ ffmpeg -i movie.webm movie.mp4其中-i指定输入文件输出文件名写在命令末尾。若未指定编解码器FFmpeg 会为目标格式选择默认编码。1.3 全局选项| 选项 | 说明 | | :- | :- | |-y| 覆盖输出文件输出已存在时不再询问 | |-n| 不要覆盖输出文件输出已存在时直接报错退出 |这两个全局选项在脚本批处理中非常关键自动化流程通常用-y避免交互阻塞而需要防止误覆盖时用-n保护已有文件。1.4 主要选项| 选项 | 说明 | | :- | :- | |-f fmt| 强制指定输入或输出文件格式如-f mp4、-f flv、-f image2 | |-i fName| 指定输入文件名若只执行ffmpeg -i input.mp4不带输出则会打印该文件的内容流摘要编码格式、分辨率、码率、时长等信息 | |-c codecName| 指定编解码器输入或输出侧如-c:v libx264、-c:a aac、-c copy| |-fs Nbytes| 以字节数指定输出文件的最大大小达到上限即停止写入 |其中ffmpeg -i file单独运行是排查视频信息的常用手段——无需播放器即可查看码流详情这也是-i选项在备忘清单中标注未指定显示内容流的摘要的原因。1.5 基础参数速查| 参数 | 说明 | | :- | :- | |-codecs| 列出当前 FFmpeg 可用的全部编码器/解码器 | |-formats| 列出支持的封装格式含 mux/demux 能力 | |-protocols| 列出支持的协议含 http、rtmp、rtsp、udp 等 | |-i input.mp4| 指定输入文件 | |-c:v libx264| 指定视频编码为 H.264libx264 | |-c:a aac| 指定音频编码为 AAC | |-vcodec libx264| 旧写法等价于-c:v libx264| |-acodec aac| 旧写法等价于-c:a aac| |-fs SIZE| 指定输出文件大小上限 |说明-c:v/-c:a是-codec:v/-codec:a的简写对应旧式-vcodec/-acodec新项目统一推荐-c:v/-c:a写法。1.6 尺寸规格单位FFmpeg 参数中的大小/码率值支持十进制SI与二进制IEC两套单位后缀务必区分| 后缀 | 幂 | 十进制值 | 说明 | | :- | :- | :- | :- | |K或k| 10³ | 1000 字节 | 千字节 Kilobytes | |M| 10⁶ | 1,000,000 字节 | 兆字节 Megabytes | |G| 10⁹ | 1,000,000,000 | 千兆字节 Gigabytes | |Ki| 2¹⁰ | 1024 | 千字节 Kibibyte | |Mi| 2²⁰ | 1,048,576 | 兆字节 Mebibyte | |Gi| 2³⁰ | 1,073,741,824 | Gibibyte |例如-b:v 1M表示 1 Mbit/s注意码率单位是 bit 而非 byte而-fs 10Mi表示 10 MiB 的输出大小上限。二、视频参数与音频参数详解2.1 视频参数表| 参数 | 说明 | | :- | :- | |-b bRate| 设置视频比特率单位 kbit/s | |-fixaspect| 固定纵横比 | |-bt tolerance| 设置视频比特率容差单位 kbit/s | |-maxrate bRate| 设置最大视频比特率单位 kbit/s | |-minrate bRate| 设置最小视频比特率单位 kbit/s | |-bufsize size| 设置速率控制缓冲区大小以 kByte 为单位 | |-sameq| 使用与源相同的视频质量意味着 VBR 可变码率 | |-newvideo| 将新的视频流添加到当前输出流 | |-aspect RATIO| 设置纵横比如4:3、16:9或1.25 | |-r RATE| 每秒帧率fps | |-s WIDTHxHEIGHT| 帧大小分辨率如-s 1280x720| |-vn| 无视频禁用视频流 | |-crf| 指定编码质量数值越大压缩越高一般范围是 18–28仅适用于 libx264/libx265 等 CRF 模式编码器 |其中-crf是日常压制中最常用的质量参数CRF 值越小画质越高、文件越大18 通常被视为视觉无损23 为默认值28 时压缩明显。2.2 码率设置-b:v 1M # 视频比特率1M 1Mbit/s -b:a 1M # 音频比特率1M 1Mbit/s-b:v与-b:a分别控制视频流和音频流的平均码率适合对文件大小有明确要求如推流、上传平台限制的场景追求画质优先时则建议使用 2.1 节中的-crf。2.3 音频参数表| 参数 | 说明 | | :- | :- | |-ab bRate| 设置音频比特率单位 kbit/s | |-aframes N| 设置要录制的音频帧数-frames:a的别名 | |-aq q| 设置音频质量特定于编解码器VBR-q:a的别名 | |-an| 禁用录音不输出音频流 | |-acodec codec| 设置音频编解码器-codec:a的别名使用copy可复制流而不重新编码 | |-vol| 以 256 的倍数更改音频音量其中 256 100%正常音量。例如512 200%两倍音量 | |-newaudio| 将新的音频流添加到当前输出流 | |-alang code| 设置当前音频流的 ISO 639 语言代码3 个字母如chi、eng | |-ac nTract| 指定声道数如-ac 2即双声道立体声 |提示-vol是较老的全局音量调节方式现代做法更推荐使用音频过滤器volume见下文音量小节两者效果等价且可叠加使用。三、视频编辑实战3.1 剪切视频部分# 从 1 分 45 秒开始剪切 2 分 35 秒 $ ffmpeg -i input -ss 00:01:45 -t 00:02:35 -vcodec copy -acodec copy output # 从 1 分 45 秒开始剪切到第 4 分 20 秒与上一行等效 $ ffmpeg -i input -ss 00:01:45 -to 00:04:20 -codec copy output $ ffmpeg -ss 00:00:30 -i orginalfile.mpg -t 00:00:05 -vcodec copy -acodec copy newfile.mpg # 从 4.5 秒开始的 5 秒长的视频支持浮点数秒 $ ffmpeg -i in.mp4 -ss 4.5 -t 5 out.mp4要点解析-ss指定起始时间点-t指定持续时间-to指定结束时间点当-ss放在-i之前时FFmpeg 会先做关键帧快速定位seek速度快但起始点可能不够精确放在-i之后则逐帧精确解码定位-codec copy/-vcodec copy -acodec copy表示不重新编码直接复制流速度最快且无损但切割点会受关键帧位置影响。3.2 视频帧速率# 将输出文件的帧速率强制为 24 fps $ ffmpeg -i input.avi -r 24 output.avi # 将输入文件的帧速率强制为 1 fps仅对原始格式有效输出强制为 24 fps $ ffmpeg -r 1 -i input.m2v -r 24 output.avi注意-r放在-i前后含义不同放在输入侧表示按指定帧率重新解读输入流放在输出侧表示按指定帧率输出必要时丢帧或复制帧。3.3 H.265 2-pass 编码$ ffmpeg -y -i input -c:v libx265 -b:v 2600k \ -x265-params pass1 \ -an -f mp4 /dev/null \ ffmpeg -i input \ -c:v libx265 -b:v 2600k \ -x265-params pass2 \ -c:a aac -b:a 128k output.mp4对于 H.265libx265的2-pass 编码需要组合2 个ffmpeg调用第一遍pass1以目标码率-b:v 2600k分析视频复杂度统计码率分配信息输出到/dev/null丢弃同时用-an跳过音频以加速第二遍pass2依据第一遍的统计结果进行实际编码并加上-c:a aac -b:a 128k的音频编码。2-pass 能在指定码率下获得更稳定的画质适合对文件大小有硬性要求的 H.265 压制场景。3.4 视频比特率设置# 将输出文件的视频比特率设置为 64 kbit/s $ ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi-bufsize控制速率控制缓冲区大小与-b:v配合可平滑码率波动避免瞬时码率过冲。3.5 固定旋转元数据方式$ ffmpeg -i input -c copy -metadata:s:v:0 rotate90 output不要为旋转重新编码而是简单地为旋转角度添加一个视频元数据字段rotate90。这种方式只改写元数据、不触碰画面数据速度极快且无损播放器会根据该字段自动旋转画面。3.6 缩放到特定宽度保持宽高比$ ffmpeg -i in.mp4 -filter:v scale538:trunc(ow/a/2)*2 -c:a copy out.mp4给定所需视频宽度如 538 像素用scale过滤器将视频调整为该宽度同时保持宽高比trunc(ow/a/2)*2中的a为输入宽高比trunc(.../2)*2保证高度为偶数满足 H.264 编码对偶数尺寸的要求。-c:a copy表示音频直接复制不重编码。四、重新包装Remux与流操作重新包装指不重新编码、只改变封装容器或提取/替换流特点是速度极快、画质无损。4.1 提取音频流$ ffmpeg -i file.mp4 -vn -c copy output.aac-vn过滤掉视频流配合-c copy直接复制音频流到 AAC 容器不重新解码和编码速度很快。4.2 提取视频流$ ffmpeg -i file.mp4 -an -c copy output.mp4-an过滤掉音频流-c copy复制视频流得到无声音的视频文件。4.3 处理 ID3 标签提取元数据$ ffmpeg -i file.mp3 -f ffmetadata metadata.txt将 MP3 的 ID3 标签导出为ffmetadata格式的文本文件metadata.txt可查看或编辑。设置元数据$ ffmpeg -i file.mp3 -acodec copy -metadata titletitle -metadata artistartist -metadata albumalbum out.mp3通过-metadata键值对写入标题、艺术家、专辑等信息-acodec copy保证音频流不被重新编码。4.4 重新采样 / 转换音频$ ffmpeg -i file.aac -acodec mp3 -ar 44100 -ab 128000 output.mp3将 AAC 音频转码为 MP3-ar 44100将采样率设为 44.1 kHz-ab 128000将音频比特率设为 128 kbit/s。4.5 将输入文件转码为 DVD PAL 格式$ ffmpeg -y -threads 8 -i inFile -target pal-dvd -ac 2 -aspect 16:9 -acodec mp2 -ab 224000 -vf pad0:0:0:0 outFile-target pal-dvd按 DVD PAL 标准自动选择容器、编码与参数-ac 2双声道-aspect 16:9宽屏比例-acodec mp2 -ab 224000DVD 标准的 MP2 音频、224 kbit/s-vf pad0:0:0:0padding 过滤器宽:高:x:y用于处理黑边填充-threads 8使用 8 线程并行编码加速。4.6-map命令精确选择流-map命令用于指定输入文件索引、流类型及其索引是从多流文件中挑选流的核心工具。-map index:stream_type:stream_index| 参数 | 说明 | | :- | :- | |input_file_index| 输入的文件索引从 0 开始 | |stream_type| 指定文件流的类型a- 音频v- 视频s- 字幕 | |stream_index| 指定流类型的索引从 0 开始 |示例 1将第一个输入文件的第二个音频流拷贝到out.mp3$ ffmpeg -i input.mp4 -map 0:a:1 -c copy out.mp3示例 2将第一个输入文件的视频流和第二个输入文件的音频流拷贝到out.mp4$ ffmpeg -i i1.mp4 -i i2.mp4 -map 0:v -map 0:a -c copy out.mp4反向-map命令在 map 参数前加负号表示排除。例如-map -0:a:0忽略第一个文件中的第一个音频流其余流照常输出。4.7 切换容器转换封装类型将容器从MKV更改为MP4$ ffmpeg -i file.mkv -acodec copy -vcodec copy file.mp4将视频从.mov更改为.mp4$ ffmpeg -i in.mov out.mp4只要内部编码兼容目标容器如 H.264/AAC 均被 MP4 支持即可用copy直接换封装若编码不兼容则需重编码。4.8 音视频同步将音频延迟 3 秒$ ffmpeg -i input.mov -itsoffset 3 -i input.mov -map 0:v -map 1:a -codec:a copy -codec:v copy output.mov将视频延迟 3 秒即将音频提前 3 秒$ ffmpeg -i input.mov -itsoffset 3 -i input.mov -map 1:v -map 0:a -codec:a copy -codec:v copy output.mov技巧同一输入被引用两次-itsoffset 3让第二次输入的时间戳偏移 3 秒再用-map分别挑选不同的视频/音频流组合即可实现单向延迟且全程copy无损。4.9 图片序列与视频互转由多张编号图片生成视频$ ffmpeg -f image2 -i image%d.jpg video.mp4多个编号的图像image1.jpg、image2.jpg……按序组合成视频%d为递增序号占位符可用%03d表示三位补零。将视频拆分为图片$ ffmpeg -i video.mp4 image%d.jpg按帧输出为image1.jpg、image2.jpg等图片序列。4.10 录屏查找所有可用设备macOS$ ffmpeg -f avfoundation -list_devices true -i ⚠️ 一定要选择好设备根据设备编号进行配置列表会输出如[0] FaceTime HD Camera、[1] 屏幕录制等设备序号。Windows 下录屏$ ffmpeg -hide_banner -loglevel error -stats -f gdigrab -framerate 60 \ -offset_x 0 -offset_y 0 -video_size 1920x1080 -draw_mouse 1 -i deskop \ -c:v libx264 -r 60 -preset ultrafast -pix_fmt yuv420p -y screen_record.mp4-f gdigrabWindows 屏幕抓取输入设备-framerate 60 -video_size 1920x1080 -offset_x 0 -offset_y 0帧率、分辨率与偏移-i deskop抓取整个桌面原文档此处的deskop为desktop的笔误实际参数应为desktop-preset ultrafast极速编码预设降低 CPU 占用-pix_fmt yuv420p保证播放器兼容性。macOS 下录屏$ ffmpeg -f avfoundation -i 1:0 -preset ultrafast out.mkv其中1:0为「视频设备:音频设备」的编号组合依据上一步-list_devices的输出选择。4.11 合并音频与图片生成带背景音乐的相册视频# mylist.txt file 1.mp3 file 2.mp3 file 3.mp3 # OBS: 46500 25:50 minutes * 60 * 30fps # echo 00:25:50 | awk -F: { print (($1 * 3600) ($2 * 60) $3) * 30 } $ ffmpeg -y -loop 1 -i cover.jpg -f concat -i mylist.txt -c:v libx264 -r 30 -pix_fmt yuv420p -vframes 46500 -c:a aac -b:a 192k -strict experimental -shortest output.mp4-loop 1 -i cover.jpg循环读取封面图作为视频源-f concat -i mylist.txt以清单文件方式拼接多个 MP3-r 30 -vframes 4650030 fps、共 46500 帧即 25 分 50 秒可用注释中的awk公式按任意时长换算帧数-c:a aac -b:a 192kAAC 音频 192 kbit/s-shortest以较短的流为基准结束输出-strict experimental较老版本 FFmpeg 启用实验性 AAC 编码器所需参数新版通常不再需要。4.12 转换为 GIF高质量 GIF调色板模式$ ffmpeg -ss 2 -t 28 -i input.mp4 -vf fps10,scale1080:-1:flagslanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse -loop 0 output.gif从第 2 秒开始截取 28 秒先降帧到 10 fps、缩放到宽 1080lanczos 高质量缩放再用split分支出两路一路palettegen生成调色板、另一路paletteuse应用调色板-loop 0无限循环。基础转换# 视频转换为 GIF $ ffmpeg -i input.mov output.gif # GIF 转换为视频 $ ffmpeg -i input.gif output.mov # 在非 GIF 格式之间转换 $ ffmpeg -i input.mov -codec:v copy -codec:a copy output.mp44.13 转换为灰度$ ffmpeg -y -i inFile -flags gray outFile通过全局标志-flags gray将输出强制为灰度黑白视频。4.14 字幕格式转换# srt - ass $ ffmpeg -i subtitle.srt subtitle.ass # ass - vtt $ ffmpeg -i subtitle.ass subtitle.vttsrt、ass、vtt 等格式之间可以相互转换按输出扩展名自动识别目标字幕格式。4.15 将字幕烧录进视频默认样式$ ffmpeg -i input.mov -filter:v subtitlessubtitles.srt -codec:a copy output.mov自定义字幕样式$ ffmpeg -i input.mov -filter:v subtitlessubtitles.srt:force_styleFontNameMenlo Bold,Fontsize18 -codec:a copy output.movsubtitles过滤器把字幕渲染进画面硬字幕force_style可覆盖字体、字号等 ASS 样式-codec:a copy保持音频不变。4.16 制造 1 分钟的音频噪音$ ffmpeg -ar 48000 -t 60 -f s16le -acodec pcm_s16le -i /dev/urandom -ab 64K -f mp2 -acodec mp2 -y noise.mp2以 48 kHz 采样率从 Linux 随机设备/dev/urandom读取 60 秒原始 PCMs16le数据再编码为 64 kbit/s 的 MP2 音频——常用于音频测试、占位或混音实验。4.17 从视频中提取图像$ ffmpeg -i foo.avi -r 1 -s WxH -f image2 outFile%03d.png以每秒 1 帧的速率-r 1抽取画面按指定尺寸WxH输出为outFile001.png、outFile002.png…… 序列。4.18 音量调节旧式过滤器# 将音量减半 $ ffmpeg -i input.mov -codec:v copy -filter:a volume0.5 output.mov # 音量加倍 $ ffmpeg -i input.mov -codec:v copy -filter:a volume2 output.movvolume音频过滤器以倍率调节音量1.0 为原始音量-codec:v copy保持视频流不重编码。4.19 图像格式互转$ ffmpeg -i foo0122.png foo.tiff支持的图像格式包括pgm、ppm、pam、pgmyuv、jpeg、gif、png、tiff、sgi按输出扩展名自动转换。4.20 将图像序列转换为 AVI$ ffmpeg -f image2 -i foo-%03d.jpeg -r 12 -s WxH foo.avi将foo-001.jpeg、foo-002.jpeg……序列以 12 fps、指定尺寸封装为 AVI 视频。4.21 将 WAV 文件转换为 MP3$ ffmpeg -i source_song.wav -vn -ar 44100 -ac 2 -ab 192 -f mp3 final_song.mp3去掉视频-vnWAV 一般无视频但命令通用44.1 kHz 采样、双声道、192 kbit/s 编码为 MP3。4.22 从视频中提取音频并转码为 MP3$ ffmpeg -i source.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 sound.mp3从 AVI 视频中剥离音轨按上述参数转码输出独立 MP3 文件。4.23 将 .avi 转换为 .flv$ ffmpeg -i source.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv output.flv低码率网络视频典型参数音频 56 kbit/s、44.1 kHz视频 200 kbit/s、15 fps、320x240封装为 FLV 便于流媒体播放。4.24 将图片附加到 MP3专辑封面$ ffmpeg -i input.mp3 -i cover.png -c copy -metadata:s:v titleAlbum cover -metadata:s:v commentCover (Front) out.mp3以cover.png作为附加视频流封面图写入 MP3并设置封面流的标题与注释元数据。4.25 将视频与声音文件混合$ ffmpeg -i song.wav -i source_video.avi outvideo.mpg将独立的声音文件与视频文件混合输出为单一 MPG 文件。4.26 编写带 ID3v2.3 页眉和 ID3v1 页脚的 MP3$ ffmpeg -i inFile -id3v2_version 3 -write_id3v1 1 outFile.mp3-id3v2_version 3写入 ID3v2.3 标签页眉-write_id3v1 1同时写入 ID3v1 标签页脚提高老设备/播放器的兼容性。4.27 连接输入文件管道方式$ cat inFile1 inFile2 | ffmpeg -f mpeg -i - -vcodec copy -acodec copy outFile.mpg用cat拼接两个 MPEG 文件后通过管道-i -喂给 FFmpeg-c copy无损封装输出。4.28 使用 Xvid 与 MP3 编码剪辑$ ffmpeg -i clip.avi -vcodec libxvid -b 800000 -acodec libmp3lame -ab 128 new-clip.avi视频用 libxvid 编码、800 kbit/s音频用 libmp3lame 编码、128 kbit/s适合兼容老设备的 AVI 输出。4.29 将音频流与来自不同文件的视频流合并$ ffmpeg -i audioS.mp4 -i videoS.mp4 -c copy -map 0:a -map 1:v outFile.mp4-map 0:a取第一个输入audioS.mp4的音频-map 1:v取第二个输入videoS.mp4的视频-c copy直接合并是「视频换音轨」的经典命令。4.30 合并视频合并相同规格编码/分辨率/帧率视频concat 解复用器# mylist.txt file 1.mp4 file 2.mp4 file 3.mp4 # 这些文件是相对路径如使用绝对路径需要添加 -safe 0 参数 $ ffmpeg -f concat -i mylist.txt -c copy output.mp4合并当前目录下所有视频$ ffmpeg -f concat -safe 0 -i (for f in ./*.mp4; do echo file $PWD/$f; done) -c copy output.mp4进程替换动态生成清单-safe 0允许清单中的绝对路径-c copy无损拼接。合并不同规格视频保证视频不变形统一转 TS 后 concat 协议拼接$ ffmpeg -i 1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts tmp1.ts $ ffmpeg -i 2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts tmp2.ts $ ffmpeg -i 3.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts tmp3.ts $ ffmpeg -threads 2 -i concat:tmp1.ts|tmp2.ts|tmp3.ts \ -vf scale720:1080:force_original_aspect_ratiodecrease,pad720:1080:(ow-iw)/2:(oh-ih)/2 \ -pix_fmt yuvj420p -shortest -y output.mp4先用-bsf:v h264_mp4toannexb把 MP4 中的 H.264 转为 Annex B 字节流并封装为 TS解决 MP4 无法直接 concat 的问题再用 concat 协议拼接最后scalepad统一为 720x1080 并居中补黑边避免变形。合并不同编码的视频filter_complex 重编码$ ffmpeg -i input1.mp4 -i input2.webm -i input3.mov \ -filter_complex [0:v:0][0:a:0][1:v:0][1:a:0][2:v:0][2:a:0]concatn3:v1:a1[outv][outa] \ -map [outv] --map [outa] output.mkv通过filter_complex的concat过滤器把 3 个不同封装/编码的视频各自取视频流 音频流重编码拼接为统一的 MKV。合并视频并重新编码音频$ ffmpeg -f concat -i mylist.txt -c:v copy -c:a flac -strict -2 output.mp4视频流直接复制音频流统一重编码为 FLAC-strict -2为较老版本启用非标准参数的写法。五、视频过滤器Video Filters视频过滤器通过-vf/-filter:v传入多个参数用,分隔串联。5.1 过滤器格式$ ffmpeg -i test.avi -c:v libx264 -vf scale1024:-1,transpose1,cropiw/3:ih/3 output.mp4同一个过滤器链中多个过滤器用,分隔本例依次执行缩放到宽 1024、旋转 90°transpose1、裁剪为原图 1/3 尺寸。5.2 缩放scale# 指定宽高 $ ffmpeg -i input.mp4 -vf scale640:480 out.mp4 # -1 指根据另一个参数帮我们推断 $ ffmpeg -i input.mp4 -vf scale720:-1 out.mp4 # 具名参数写法宽度和高度 ffmpeg -i input.mp4 -vf scalew800:h600 output.mp4 # 基于输入尺寸的表达式in_w / in_h 为输入尺寸 ffmpeg -i input.mkv -vf scalew1/2*in_w:h1/2*in_h output.mkv-1按宽高比自动推断该维度结果自动取偶数满足编码要求支持in_w/in_h变量与算术表达式可实现缩放为原来一半等比例操作。5.3 裁剪crop# 从左上角开始复制 x0px y0px 的相应窗口创建 1280x720 大小的输出视频 ffmpeg -i input.mp4 -vf cropw1280:h720:x0:y0 output.mp4 # 裁剪到宽度 360、高度 640从坐标 (10, 20) 开始 $ ffmpeg -i input.mov -vf crop360:640:10:20 output.movcropw:h:x:y从源画面(x, y)坐标处截取w x h的区域。5.4 去除水印delogo# show1 为可选参数设置显示边框方便调试用 ffmpeg -i 1.mp4 -b:v 548k -vf delogox10:y10:w120:h45:show1 output.mp4delogo通过矩形区域x10:y10:w120:h45的插值模糊覆盖水印位置show1时显示矩形边框便于调试定位正式去除时应去掉该参数。5.5 创建缩略图在 10 秒时创建一张缩略图$ ffmpeg -ss 10 -i input file -vframes 1 -vcodec png -an thumb.png每隔 n 秒创建一张缩略图如每 60 秒一张$ ffmpeg -i input file -vf fps1/60 thumbnails/thumb%03d.png-vframes 1只输出一帧fps1/60以 1/60 fps 的采样率输出配合%03d生成编号缩略图序列。5.6 添加水印overlay# -b:v 548k 可选参数设置视频比特率默认 200k最好设置与原视频一致 ffmpeg -i 1.mp4 -acodec copy -b:v 548k -vf movielogo.png[watermark];[in][watermark]overlay20:20 output.mp4movielogo.png[watermark]把 logo 作为第二个输入源加载overlay20:20将其叠加到画面 (20, 20) 位置左上角-b:v建议与原视频码率保持一致避免质量下降。5.7 视频旋转rotate# 顺时针旋转 90° $ ffmpeg -i input.avi -vf rotate90*PI/180 out.mp4 # 旋转 180° $ ffmpeg -i input.mp4 -vf rotatePI out.mp4rotate接受弧度制角度表达式90*PI/180即 90°PI即 180°。5.8 更改视频播放速度setpts# 加速 2 倍 $ ffmpeg -i input.mkv -vf setpts0.5*PTS output.mkv # 减速 2 倍 $ ffmpeg -i input.mp4 -vf setpts2*PTS output.mp4setpts通过修改帧时间戳实现变速0.5*PTS时间戳减半即 2 倍速2*PTS时间戳加倍即半速。5.9 添加背景音乐aloop amix# -t 10 文件时长单位为秒建议取值原始视频总时长 $ ffmpeg -i 1.mp4 -i test.mp3 \ -filter_complex [1:a]alooploop-1:size2e09[out];[out][0:a]amix \ -t 10 out.mp4alooploop-1将背景音乐无限循环amix将其与原视频音轨混合-t 10限制输出总时长建议等于原始视频时长。六、音频过滤器Audio Filters音频过滤器通过-af/-filter:a传入。6.1 调节音量# 增大音量 $ ffmpeg -i test.mp4 -af volumn1.5 out.mp4说明标准过滤器名为volume如 4.18 节的volume0.5/2原文档此处volumn为笔误实际应写为-af volume1.5。6.2 更改音频速度atempo$ ffmpeg -i input.wav -af atempo0.75 output.wav # 加速 4 倍链式突破上限 $ ffmpeg -i input.mp3 -af atempo2.0,atempo2.0 ouutput.mp3atempo只接受0.5半速到2倍速之间的值。为了越过这个限制可以链式使用该过滤器——两个atempo2.0串联即可实现 4 倍速。6.3 统一视频的音量loudnorm$ ffmpeg -i test.mp4 -af loudnormI-5:LRA1 out.mp4loudnorm是 EBU R128 响度归一化过滤器I-5目标整体响度为 -5 LUFSLRA1响度范围 1 LU常用于把多个视频统一到一致的响度标准。6.4 重新映射通道数channelmap# 使左右耳的声音同时出现 $ ffmpeg -i input.mp3 -af channelmap1-0|1-1 output.mp3channelmap1-0|1-1把源通道 1右声道同时映射到输出通道 0 和 1实现左右耳同声的效果。七、流处理拉流 / 推流 / 转发FFmpeg 不仅是文件工具也是强大的流媒体处理引擎支持 RTMP/RTSP/HTTP 等协议。7.1 拉流保存网络流到本地# 拉取 RTSP 流并存储到本地 $ ffmpeg -i rtsp://127.0.0.1/test test.mp4直接把 RTSP 摄像头/服务器流录制为本地 MP4 文件。7.2 推流本地文件推送至远端# 推送 test.mp4 到远程 RTMP 服务器 $ ffmpeg -re -i test.mp4 -f flv rtmp://127.0.0.1/test-re按文件原始帧率实时读取否则会极速推完-f flvRTMP 推流必须使用 FLV 封装。7.3 转发拉流后转码再推送# 拉取流并转发 $ ffmpeg -i rtsp://127.0.0.1/test -f mpegts -codec:v mpeg1video http://127.0.0.1/demo拉取 RTSP 流视频转码为 MPEG-1封装为 MPEG-TS 推送到 HTTP 服务器实现流媒体中转/网关场景。八、延伸阅读仓库内相关文档FFmpeg 备忘清单本文所依据的原始速查文档含完整参数表与命令Yazi 备忘清单终端文件管理器其安装清单将ffmpeg列为依赖用于视频缩略图生成docs/yazi.md#L46README.md首页导航中 FFmpeg 清单的入口卡片CONTRIBUTING.md了解docs/*.md备忘清单的编写规范与编译流程assets/ffmpeg.svgFFmpeg 清单在首页对应的图标资源。提示FFmpeg 各版本参数存在细微差异如 AAC 编码器、-strict参数的演进实际使用请以本机ffmpeg -version输出及ffmpeg -h full帮助为准以上命令中的占位符input、output、WxH等需按实际文件路径与尺寸替换。【免费下载链接】reference面向开发者的技术速查清单Cheat Sheets集合整理常见技术、工具与开发流程帮助快速查阅关键信息提高开发效率。项目地址: https://gitcode.com/GitHub_Trending/referen/reference创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考