FFmpeg 入门:命令行的 20 个常用场景

📅 2026/7/8 1:20:44
FFmpeg 入门:命令行的 20 个常用场景
FFmpeg 入门命令行的 20 个常用场景做音视频开发绕不开的工具就是 FFmpeg。不管你是做 IPC 摄像头、直播、视频剪辑还是售货柜视觉识别FFmpeg 都是工具箱里的瑞士军刀。这篇从安装到常用命令一次性把最常用的 20 个场景讲清楚新手看完就能上手干活。大家好我是黒漂技术佬。之前写 IPC 摄像头、RTSP 拉流、流媒体服务的时候很多人问我视频帧怎么抽出来给 YOLO 识别RTSP 流怎么存成文件摄像头录像怎么转成 MP4这些问题的答案基本都指向同一个工具——FFmpeg。这是「FFmpeg 音视频处理实战」系列第一篇先从最基础的命令行讲起20 个场景覆盖 80% 的日常需求。一、FFmpeg 是什么简单说FFmpeg 是一套音视频处理的开源工具集包含ffmpeg命令行工具用来转码、剪辑、推流ffplay简易播放器用来快速播放音视频ffprobe媒体信息分析工具查看视频编码、分辨率、码率等开发库libavcodec、libavformat、libavfilter 等供程序调用后面 SDK 开发篇会讲为什么叫 FFmpegFast Forward Moving Picture Experts Group——翻译过来就是「快进的运动图像专家组」。诞生于 2000 年至今 20 多年是音视频领域的事实标准。 一句话只要和音视频沾边的事FFmpeg 基本都能干。二、安装Windows去官网下载编译好的版本ffmpeg.org/download.html或者更简单用 wingetwinget install ffmpeg安装完验证ffmpeg-versionLinux (Ubuntu/Debian)sudoaptupdatesudoaptinstallffmpegmacOSbrewinstallffmpeg⚠️踩坑提醒很多系统自带的 FFmpeg 版本很老编码器不全比如没有 libx264。建议从官网下载完整版或者自己编译带全功能的版本。后面讲硬件加速的时候会详细说。三、命令基本格式FFmpeg 命令长这样ffmpeg[输入参数]-i输入文件[输出参数]输出文件核心逻辑左边输入右边输出中间是滤镜和编码参数。举个最简单的例子——把 MP4 转成 AVIffmpeg-iinput.mp4 output.avi就这么一行。FFmpeg 会自动根据文件后缀选择编码器非常智能。四、20 个常用场景我按用途分成 6 类日常工作 80% 的需求都在里面。第一类查看信息1. 查看媒体文件信息ffprobe input.mp4或者更简洁的 JSON 格式ffprobe-vquiet-print_formatjson-show_format-show_streamsinput.mp4能看到时长、分辨率、编码格式、码率、帧率、音频采样率、声道数……所有元数据。做 IPC 摄像头开发的时候我经常用 ffprobe 先看 RTSP 流的编码参数确认是 H.264 还是 H.265、分辨率多少省得后面踩坑。第二类格式转换2. MP4 转 AVI / MKV / MOVffmpeg-iinput.mp4 output.avi ffmpeg-iinput.mp4 output.mkv ffmpeg-iinput.mp4 output.mov改后缀就行FFmpeg 自动选封装格式。3. 视频转 GIFffmpeg-iinput.mp4 output.gif但默认生成的 GIF 质量很差推荐加参数ffmpeg-iinput.mp4-vffps10,scale480:-1-loop0output.giffps10每秒 10 帧scale480:-1宽度 480高度等比例缩放-loop 0无限循环4. 提取音频MP4 转 MP3ffmpeg-iinput.mp4-vn-acodeclibmp3lame-q:a2output.mp3-vnvideo no去掉视频流-q:a 2MP3 质量0 最好9 最差2 是性价比最高的5. 音频格式互转WAV、AAC、FLACffmpeg-iinput.wav output.aac ffmpeg-iinput.mp3 output.flac第三类视频处理6. 压缩视频减小文件体积ffmpeg-iinput.mp4-vcodeclibx264-crf28output.mp4-crf 28Constant Rate Factor质量恒定模式。数值越大体积越小、质量越差。常用范围 18-2823 是默认值。一般我压短视频发微信用 crf 28体积能减一半肉眼基本看不出差别。7. 修改分辨率ffmpeg-iinput.mp4-vfscale1280:720 output.mp4等比例缩放高度自动算ffmpeg-iinput.mp4-vfscale1280:-1 output.mp48. 裁剪视频画面ffmpeg-iinput.mp4-vfcrop宽:高:起始x:起始youtput.mp4比如从 1920×1080 的视频里裁出中间 1080×1080 的正方形ffmpeg-iinput.mp4-vfcrop1080:1080:420:0output.mp4售货柜项目里摄像头拍的是整个柜子但我只关心货架那一块就用 crop 裁掉多余区域YOLO 识别速度能快不少。9. 旋转视频# 顺时针 90 度ffmpeg-iinput.mp4-vftranspose1output.mp4# 逆时针 90 度ffmpeg-iinput.mp4-vftranspose2output.mp4# 旋转 180 度ffmpeg-iinput.mp4-vftranspose2,transpose2output.mp410. 加水印文字水印ffmpeg-iinput.mp4-vfdrawtexttext黒漂技术佬:x10:y10:fontsize24:fontcolorwhiteoutput.mp4图片水印ffmpeg-iinput.mp4-ilogo.png-filter_complexoverlay10:10output.mp4右下角水印ffmpeg-iinput.mp4-ilogo.png-filter_complexoverlayW-w-10:H-h-10output.mp4W和H是视频宽高w和h是水印图片宽高。第四类音频处理11. 提取单声道 / 调整声道# 立体声转单声道ffmpeg-iinput.mp3-ac1output_mono.mp3# 单声道转立体声ffmpeg-iinput_mono.mp3-ac2output_stereo.mp312. 调整音量# 音量加倍ffmpeg-iinput.mp3-afvolume2output.mp3# 音量减半ffmpeg-iinput.mp3-afvolume0.5output.mp313. 音频降噪ffmpeg-iinput.mp3-afafftdnnf-20output.mp3afftdn是音频频域降噪滤波器nf-20是降噪强度数值越小降噪越强。第五类截取与拼接14. 截取片段剪视频从第 30 秒开始剪 10 秒钟ffmpeg-iinput.mp4-ss00:00:30-t10output.mp4-ss开始时间格式可以是秒数或时:分:秒-t持续时长秒或者用-to指定结束时间ffmpeg-iinput.mp4-ss00:00:30-to00:00:40 output.mp4⚠️踩坑提醒-ss放在-i前面是输入级 seek快但不准放在-i后面是输出级 seek准但慢。追求精确剪辑放后面追求速度放前面。15. 拼接多个视频先建一个文件列表filelist.txtfile 001.mp4 file 002.mp4 file 003.mp4然后ffmpeg-fconcat-ifilelist.txt-ccopy output.mp4-c copy是直接复制流不重新编码速度极快。前提是所有视频的编码参数必须一致。第六类抽帧与截图16. 截一张图指定时间点第 10 秒截一张ffmpeg-iinput.mp4-ss10-vframes1screenshot.jpg17. 按间隔抽帧每秒一张ffmpeg-iinput.mp4-vffps1frames/%04d.jpgfps1每秒 1 帧%04d.jpg输出文件名4 位数字序号0001.jpg、0002.jpg……每 10 秒抽一张ffmpeg-iinput.mp4-vffps1/10 frames/%04d.jpg这个命令我在做售货柜 YOLO 数据集的时候天天用——从 IPC 录像里抽几千张图出来标注比手动截图效率高十倍。18. 生成缩略图每隔一段时间一张拼图ffmpeg-iinput.mp4-vffps1/30,scale320:-1,tile4x5thumbnail.jpg每 30 秒抽一张缩到宽 320拼成 4×5 的网格图一张图预览整个视频。第七类直播推流拉流19. RTSP 流转 RTMP 推流ffmpeg-irtsp://摄像头地址-ccopy-fflv rtmp://推流地址/live/流名IPC 摄像头是 RTSP直播平台要 RTMP用 FFmpeg 一转就通了。20. RTSP 流存成文件边录边存ffmpeg-irtsp://摄像头地址-ccopy-segment_time3600-fsegment output_%03d.mp4-segment_time 3600每 3600 秒1 小时切一个文件自动分片适合摄像头 24 小时录像五、常用参数速查表参数作用-i指定输入文件-c copy直接复制流不重新编码速度快-vcodec libx264视频用 H.264 编码-acodec aac音频用 AAC 编码-crf 23H.264 质量参数18-28 常用-b:v 2M视频码率 2Mbps-b:a 128k音频码率 128kbps-vf视频滤镜缩放、裁剪、水印等-af音频滤镜音量、降噪等-ss开始时间-t持续时长-r 30帧率 30fps-s 1920x1080分辨率-vn去掉视频流-an去掉音频流-y覆盖输出文件不询问六、新手最容易踩的三个坑坑 1参数顺序很重要FFmpeg 的参数是位置敏感的——放在-i前面的是输入参数放在输出文件名前面的是输出参数。# 正确-ss 放在 -i 前面输入级快速 seekffmpeg-ss10-iinput.mp4-t5output.mp4# 也对-ss 放在后面输出级精确 seekffmpeg-iinput.mp4-ss10-t5output.mp4但滤镜参数必须放在对应输出的前面乱放会报错。坑 2编码 vs 复制流-c copy速度极快但前提是你不需要改视频内容。一旦加了滤镜缩放、裁剪、水印就必须重新编码不能用 copy。坑 3默认编码器可能不全很多精简版 FFmpeg 没有 libx264、libfdk_aac 这些编码器转出来的视频质量差或者直接报错。遇到「Unknown encoder ‘libx264’」去下个完整版或者自己编译。七、本篇小结FFmpeg 是音视频领域的瑞士军刀命令行就能搞定 80% 的日常需求基本格式ffmpeg -i 输入 [参数] 输出最常用的就那十几个参数-c copy、-crf、-vf、-ss、-t抽帧、转码、推流、裁剪——这些场景命令行直接搞定不用写代码下一篇讲视频转码详解封装格式、编码器、码率控制、CRF 和 CBR 到底选哪个——把视频压缩这件事彻底讲明白。我是黒漂技术佬下篇见。