FIELD MANUAL

TOOLS / 系统工具使用 / 说明书

FFmpeg 完全指南:安装、概念与常用命令

FFmpeg 几乎能处理你在命令行里遇到的全部音视频活儿:看信息、换容器、转码、裁剪切片、抽音轨、截图做 GIF、录屏录音、推流拉流。这一篇按「先搞清概念 → 再照着抄命令」的顺序写,命令里的 input.mp4 换成你的文件名就能跑。

更新 2026-09-28 · 命令以 ffmpeg 6.x / 7.x 为准 · ← 系统工具使用 · 拾光笔记 · 转码专项篇 →

01它到底是什么

FFmpeg 不是一个程序,而是一套命令行工具加上一堆编解码库。装完一般有三个可执行文件,各干一件事:

ffmpeg

干活的主力。转码、剪切、合并、加滤镜、录屏、推流,都在它身上。

ffprobe

只读不写。把时长、码率、分辨率、帧率、每条流的编码打印出来。动文件之前先跑它。

ffplay

极简播放器。用来快速确认「这段剪对了没」「这个滤镜效果对不对」,不用打开大软件。

它不是剪辑软件:没有时间线、没有预览窗、撤销只能重跑命令。它的强项是可脚本化——一条命令能套在几百个文件上跑,也能挂在服务器上 7×24 小时干活。

先记一句动手之前先跑 ffprobe,能省掉一半的试错。绝大多数「转出来不对」,都是因为没看清源里到底装了什么。

02安装与自检

安装(按系统挑一条)
# macOS
brew install ffmpeg

# Debian / Ubuntu
sudo apt update && sudo apt install -y ffmpeg

# Windows
winget install --id Gyan.FFmpeg -e

# Linux 免 root 静态构建(下载即用,不依赖系统库)
wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
tar xf ffmpeg-release-amd64-static.tar.xz && sudo cp ffmpeg-*-static/ffmpeg /usr/local/bin/

发行版自带的 ffmpeg 版本可能偏旧(Ubuntu 22.04 是 4.4)。要用新编码器(如 SVT-AV1)就上静态构建或自己编译。Windows 装完需重开终端,让 PATH 生效。

装完自检
ffmpeg -version                 # 版本 + 编译选项(--enable-xxx 决定你能用什么)
ffmpeg -encoders                # 本机可用的编码器
ffmpeg -decoders                # 本机可用的解码器
ffmpeg -formats                 # 支持的容器/协议
ffmpeg -hwaccels                # 可用的解码硬件加速
ffmpeg -filters                 # 可用的滤镜
ffmpeg -h encoder=libx264       # 某个编码器的全部参数

最常查的一条:ffmpeg -encoders | grep -E '264|265|av1|nvenc|videotoolbox|qsv|vaapi|aac|opus'。列表里没有的名字,命令里写了也会报 Unknown encoder。

03四个概念:容器、编码、流、滤镜

这四个词混在一起,是 FFmpeg 让人懵的主因。分开看:

概念是什么例子
容器 muxer装东西的盒子,决定后缀名和能不能装某种流mp4、mkv、mov、webm、ts、flv
编码 codec里面画和声的压缩方式H.264、H.265/HEVC、AV1、VP9、AAC、Opus、MP3
流 stream一条独立的视频 / 音频 / 字幕轨道0:v:0(第一个输入的第 1 路视频)
滤镜 filter在解码后、编码前对画面或声音做的处理scale、crop、overlay、atempo

盒子和内容是分开选的:同一个 H.264 视频可以装进 MP4,也可以装进 MKV。「MKV 转 MP4」往往只是换个盒子,几分钟的活几秒就完;而「H.264 转 H.265」才是真正的重压缩。

  • 拷贝(-c copy):流原样搬过去,不解码不编码,快、无损、无画质损失。
  • 重编码:解码 →(可选滤镜)→ 新编码器压缩。画质、体积、兼容性都在这一步决定,也最耗 CPU。
  • 只要用了 -vf / -af / -filter_complex,那一流就必须重编码,copy 会失效。
判断口诀容器不对 → copy;画质/体积不对 → 重编码;画面内容要改 → 重编码 + 滤镜。能 copy 就别编码。

04命令结构与流选择

通用骨架
ffmpeg [全局选项] [输入选项] -i 输入 [输出选项] 输出

位置决定含义:写在 -i 前面的是输入选项(作用于读文件),写在 后面的是输出选项(作用于写文件)。同一个选项放错位置,行为完全不同——最典型的是 -ss。

  • 输出文件可以有多个:ffmpeg -i in.mp4 -c:v libx264 -crf 23 big.mp4 -vf scale=640:-2 small.mp4
  • 流选择用 -map,不写时 FFmpeg 会为每种类型挑「它认为最好的」一条。多音轨成片请显式写 -map。
  • 流限定符:-c:v 视频、-c:a 音频、-c:s 字幕、-c:v:0 第 1 路视频。只写 -c 表示所有类型。
常用全局选项
-y            # 存在就覆盖(脚本里必加,否则会卡住等你输入)
-n            # 存在就退出,不覆盖
-hide_banner  # 不打印编译信息,日志更干净
-loglevel error|warning|info|verbose|debug
-stats        # 显示进度(默认开);-nostats 关掉
-nostdin      # 循环里必加:防止 ffmpeg 吃掉脚本的标准输入
-benchmark    # 跑完打印耗时,用来对比预设
-map 的写法
# 第 1 路视频 + 第 2 路音频(下标从 0 开始,所以是 0:a:1)
ffmpeg -y -i in.mkv -map 0:v:0 -map 0:a:1 -c copy out.mp4

# 全部流,但排除字幕
ffmpeg -y -i in.mkv -map 0 -map -0:s -c copy out.mp4

# 全部流;没有字幕也不报错(问号 = 可选)
ffmpeg -y -i in.mkv -map 0:v -map 0:a -map 0:s? -c copy out.mkv

05ffprobe:先看清素材

三种输出格式
# 人读
ffprobe -hide_banner in.mp4

# 机器读(脚本里用)
ffprobe -v error -show_format -show_streams -of json in.mp4

# 只要某几项
ffprobe -v error -select_streams v:0 \
  -show_entries stream=codec_name,width,height,r_frame_rate,pix_fmt \
  -of default=noprint_wrappers=1 in.mp4

# 只要时长(秒)
ffprobe -v error -show_entries format=duration -of csv=p=0 in.mp4

盯这几项就够了:

字段看它干嘛
codec_name已经是 h264 + aac 且目标也是 MP4,多半只要 -c copy
width / heightH.264 的 yuv420p 要求宽高都是偶数,奇数边缩放要用 -2
pix_fmtyuv420p 最通用;10-bit 的 yuv420p10le 很多播放器不认
r_frame_rate30000/1001 就是 29.97,别随手改成 30
bit_rate目标码率别超过源,压不出更好的画质,只会更大
codec_type 出现多次多音轨 / 多字幕,需要 -map 指定留哪条

06ffplay:快速预览

播放
ffplay in.mp4                          # 直接播
ffplay -ss 00:01:20 in.mp4             # 从 1 分 20 秒开始
ffplay -vf "crop=640:360:0:0" in.mp4   # 边播边看滤镜效果
ffplay -nodisp -autoexit music.mp3     # 不看画面,播完自动退出
ffplay -f lavfi "testsrc=size=640x360:rate=30"   # 生成测试画面
  • 快捷键:空格 暂停、← / → 快退快进 10 秒、↓ / ↑ 1 分钟、f 全屏、m 静音、w 显示声波、q 退出。
  • -nodisp -autoexit 的组合很适合当命令行播放器用,或在脚本里做「试听」。
  • 服务器上没声卡也能跑 -nodisp,只解码不播声音用 -nodisp -an。

07转换容器与抽取内容

只换盒子(不重编码)

remux
ffmpeg -y -i in.mkv -c copy -movflags +faststart out.mp4

+faststart 把索引(moov)挪到文件头,浏览器才能边下边播。做网页用的 MP4 建议常加。

只要声音 / 只要画面

抽取
ffmpeg -y -i in.mp4 -vn -c:a copy out.m4a      # 抽音轨,不重编码
ffmpeg -y -i in.mp4 -vn -c:a libmp3lame -q:a 2 out.mp3
ffmpeg -y -i in.mp4 -an -c:v copy out_video.mp4  # 去掉声音
ffmpeg -y -i in.mkv -c:s srt out.srt              # 导出文本字幕

-vn 不要视频、-an 不要音频、-sn 不要字幕、-dn 不要数据流。

会失败的情况把 VP9 / AV1 / Opus / FLAC 拷进 MP4 时,常见 codec not currently supported in container。换成 MKV(out.mkv),或只重编码那一路不兼容的流。

08转码与码率控制

体积和画质的主旋钮是 CRF(恒定质量),不是码率。CRF 越小越清晰越大。常用三档:

三种目标
# ① 通用:画质优先(H.264 默认 CRF 23,18 接近视觉无损,28 明显更小)
ffmpeg -y -i in.mp4 -c:v libx264 -crf 23 -preset medium -pix_fmt yuv420p \
  -c:a aac -b:a 160k -movflags +faststart out.mp4

# ② 限制峰值码率:CRF 定常态,maxrate/bufsize 按住尖峰
ffmpeg -y -i in.mp4 -c:v libx264 -preset slow -crf 22 -maxrate 4M -bufsize 8M \
  -c:a aac -b:a 160k out.mp4

# ③ 必须压到固定平均码率:两遍编码(第一遍只分析)
ffmpeg -y -i in.mp4 -c:v libx264 -b:v 2M -pass 1 -an -f null /dev/null
ffmpeg -y -i in.mp4 -c:v libx264 -b:v 2M -pass 2 -c:a aac -b:a 160k out.mp4

Windows 把 /dev/null 换成 NUL。preset 只影响压缩效率(ultrafast → veryslow),不影响画质档位本身。

深入看编码器选型(H.264 / H.265 / AV1)、CRF 对照、硬件编码参数和转码常见报错,都写在 FFmpeg 转码:从看片到出片。本篇只给最常用的三档。

09剪切与合并

剪切

-ss 放前面:快,但吸附关键帧
ffmpeg -y -ss 00:01:00 -to 00:01:30 -i in.mp4 -c copy out.mp4
-ss 放后面:帧级准确,但要重编码
ffmpeg -y -i in.mp4 -ss 00:01:00 -to 00:01:30 \
  -c:v libx264 -crf 20 -c:a aac -b:a 160k out.mp4

-t 10 是「持续 10 秒」,-to 00:00:10 是「停在第 10 秒」。和 -ss 同用时 -to 是绝对时间,不是时长。

合并

concat 解复用器(参数一致时最快)
# list.txt 内容(路径相对于运行命令的当前目录):
# file 'part1.mp4'
# file 'part2.mp4'
ffmpeg -y -f concat -safe 0 -i list.txt -c copy out.mp4
concat 滤镜(参数不一致时用)
ffmpeg -y -i a.mp4 -i b.mp4 -filter_complex \
  "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[v][a]" \
  -map "[v]" -map "[a]" -c:v libx264 -crf 23 -c:a aac out.mp4
别混用解复用器要求各段的编码、分辨率、像素格式、帧率、音频参数完全一致,否则时间戳会乱(Non-monotonous DTS)。不一致就先统一转一遍,再拼。

10截图、GIF、图片序列

截图与抽帧
# 第 5 秒截一张(q:v 越小越清晰,2~5 够用)
ffmpeg -y -ss 00:00:05 -i in.mp4 -frames:v 1 -q:v 2 thumb.jpg

# 每 10 秒一张
ffmpeg -y -i in.mp4 -vf fps=1/10 thumb_%03d.jpg

# 每个场景变化截一张(thumbnail 滤镜)
ffmpeg -y -i in.mp4 -vf "thumbnail=300" -frames:v 1 cover.jpg
视频转 GIF(先生成调色板,颜色才不糊)
ffmpeg -y -ss 1 -t 3 -i in.mp4 \
  -vf "fps=12,scale=480:-2:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" \
  out.gif
图片序列 ↔ 视频
# 序列合成视频(文件名 frame_0001.png ...)
ffmpeg -y -framerate 30 -i frame_%04d.png -c:v libx264 -pix_fmt yuv420p -movflags +faststart out.mp4

# 视频拆成序列
ffmpeg -y -i in.mp4 -q:v 2 frame_%04d.png

# 一张图 + 一条音轨做成视频(封面音频那种)
ffmpeg -y -loop 1 -i cover.jpg -i audio.mp3 \
  -c:v libx264 -tune stillimage -pix_fmt yuv420p -c:a aac -b:a 192k -shortest out.mp4

11录屏与录音

macOS(avfoundation)
ffmpeg -f avfoundation -list_devices true -i ""     # 先列出设备编号
ffmpeg -y -f avfoundation -i "1:0" \
  -c:v libx264 -preset ultrafast -crf 20 -pix_fmt yuv420p -c:a aac -b:a 128k out.mp4

"1:0" 里前一个是视频设备号、后一个是音频设备号。首次使用需在「系统设置 → 隐私与安全性 → 屏幕录制」里给终端授权。

Linux(X11 + PulseAudio / PipeWire)
ffmpeg -y -f x11grab -video_size 1920x1080 -framerate 30 -i :0.0 \
  -f pulse -i default \
  -c:v libx264 -preset ultrafast -crf 20 -pix_fmt yuv420p -c:a aac out.mkv

# Wayland / PipeWire 桌面
ffmpeg -y -f pipewire -i 0 -c:v libx264 -preset ultrafast out.mkv
Windows(gdigrab + dshow)
ffmpeg -f list_devices true -i dummy        # 列出 DirectShow 设备
ffmpeg -y -f gdigrab -framerate 30 -i desktop -c:v libx264 -preset ultrafast out.mp4
ffmpeg -y -f dshow -i audio="麦克风阵列" -c:a aac voice.m4a
录制要点录屏一定用 -preset ultrafast 或硬件编码(见第 15 节),否则来不及压缩会疯狂丢帧;录完再慢慢转一次压小。要限制时长加 -t 00:05:00。

12推流、拉流与切片

推 RTMP(直播平台 / nginx-rtmp)
ffmpeg -re -i in.mp4 \
  -c:v libx264 -preset veryfast -b:v 3000k -maxrate 3000k -bufsize 6000k -g 60 \
  -c:a aac -b:a 128k -ar 44100 -f flv rtmp://host/live/streamkey

-re 按实时速度读取,不加会「以最快速度推完」。文件推流必须加。-g 60 是关键帧间隔,直播通常设成帧率的 2 倍。Owncast 的容器部署,以及 144p 到 4K 各一档的推流命令,见 用 Docker 部署 Owncast,并按分辨率用 FFmpeg 推流。

循环推流 / 拉流保存 / 摄像头
# 循环推一个文件(做测试流很好用)
ffmpeg -re -stream_loop -1 -i in.mp4 -c:v libx264 -preset veryfast -b:v 2500k \
  -c:a aac -b:a 128k -f flv rtmp://host/live/key

# 把直播存下来
ffmpeg -y -i rtmp://host/live/key -c copy -f mp4 out.mp4

# RTSP 摄像头(tcp 更稳)
ffmpeg -y -rtsp_transport tcp -i rtsp://user:pass@192.168.1.64/stream -c copy out.mp4
HLS 切片
# 点播切片
ffmpeg -y -i in.mp4 -c:v libx264 -crf 23 -c:a aac \
  -f hls -hls_time 6 -hls_playlist_type vod -hls_segment_filename "seg_%03d.ts" out.m3u8

# 直播切片(滚动窗口)
ffmpeg -y -i rtmp://host/live/key -c:v libx264 -preset veryfast -c:a aac \
  -f hls -hls_time 4 -hls_list_size 6 -hls_flags delete_segments+append_list live.m3u8
推流前先测先用 ffprobe rtmp://... 确认地址通;推流端报错优先看码率是否超平台上限、音频采样率是否 44100、关键帧间隔是否过大。协议不通(Protocol not found / tls 相关)多半是这份 ffmpeg 没编译对应协议。

13滤镜速查

视频滤镜写 -vf,音频写 -af,多路输入或需要分支时用 -filter_complex。多个滤镜用逗号串起来,从左到右执行。

滤镜作用写法
scale缩放scale=1280:-2(-2 自动取偶数)
crop裁剪crop=1280:720:0:0(宽:高:x:y)
pad加边pad=1920:1080:-1:-1:color=black
fps改帧率fps=30
transpose旋转 90°transpose=1(2 为逆时针)
hflip / vflip水平 / 垂直翻转hflip
yadif / bwdif去隔行yadif
eq亮度对比度饱和度eq=brightness=0.05:saturation=1.2
unsharp锐化unsharp=5:5:1.0
hqdn3d / nlmeans降噪(后者更慢更好)hqdn3d
overlay叠加水印 / 画中画overlay=W-w-24:H-h-24
drawtext写字(需 libfreetype)drawtext=text='hi':fontfile=/path.ttf:x=10:y=10:fontsize=24
fade淡入淡出fade=t=in:st=0:d=2
setpts改画面时间(变速)setpts=0.5*PTS(2 倍速)
volume音量volume=1.5 或 volume=-6dB
atempo音频变速(0.5–2.0)atempo=1.5
loudnorm响度归一loudnorm=I=-16:TP=-1.5:LRA=11
afftdn / anlmdn音频降噪afftdn=nf=-25
silencedetect检测静音段silencedetect=noise=-30dB:d=0.5
amix混音amix=inputs=2:duration=first
aresample重采样 / 改采样率aresample=48000
组合示例
# 缩放 + 加亮 + 去噪
ffmpeg -y -i in.mp4 -vf "scale=1280:-2,eq=brightness=0.03,hqdn3d" \
  -c:v libx264 -crf 23 -c:a copy out.mp4

# 右下角水印 + 音频响度归一
ffmpeg -y -i in.mp4 -i logo.png -filter_complex "overlay=W-w-24:H-h-24" \
  -af loudnorm=I=-16:TP=-1.5 -c:v libx264 -crf 23 -c:a aac -b:a 160k out.mp4

# 2 倍速(画面和声音一起改)
ffmpeg -y -i in.mp4 -filter:v "setpts=0.5*PTS" -filter:a "atempo=2.0" \
  -c:v libx264 -crf 23 -c:a aac -b:a 160k out.mp4

滤镜不存在会报 No such filter,用 ffmpeg -filters | grep 名字 确认。中文字体请写 fontfile 的真实路径,不要指望 FontName 一定能命中。

14字幕与多音轨

软字幕(可开关,不重编码)
# MKV 支持几乎所有字幕格式
ffmpeg -y -i in.mp4 -i sub.srt -c copy -c:s srt out.mkv

# MP4 里用 mov_text;ASS 特效会丢
ffmpeg -y -i in.mp4 -i sub.srt -c copy -c:s mov_text out.mp4
烧录字幕(关不掉,必须重编码)
ffmpeg -y -i in.mp4 \
  -vf "subtitles=sub.srt:force_style='FontName=PingFang SC,FontSize=22'" \
  -c:v libx264 -crf 23 -c:a copy out.mp4

烧录要编译了 libass。ASS 用 -vf "ass=sub.ass"。多语言字幕:-i zh.srt -i en.srt -map 0 -map 1 -map 2 -c copy -c:s srt -metadata:s:s:0 language=chi -metadata:s:s:1 language=eng out.mkv。

15硬件加速

先跑 ffmpeg -hwaccels 看解码加速,再跑 ffmpeg -encoders | grep -E 'nvenc|videotoolbox|qsv|vaapi|amf' 看能用哪个编码器。名字不在列表里就别写。

平台编码器要点
NVIDIAh264_nvenc / hevc_nvenc-preset p1..p7;-rc vbr -cq 23 或 -b:v 6M
macOSh264_videotoolbox / hevc_videotoolbox用码率(-b:v 6M)而不是 CRF
Intelh264_qsv / hevc_qsv常配合 -hwaccel qsv
Linux / AMDh264_vaapi / h264_amfVAAPI 需要设备节点,如 -vaapi_device /dev/dri/renderD128
解码加速 + 硬件编码
# 用显卡解码,CPU 侧滤镜,再硬件编码(滤镜时必须把数据搬回内存)
ffmpeg -y -hwaccel cuda -i in.mp4 -vf "scale=1280:-2" \
  -c:v h264_nvenc -preset p5 -rc vbr -cq 25 -c:a copy out.mp4

# 纯转封装式加速:只换编码,不动画面
ffmpeg -y -i in.mp4 -c:v h264_videotoolbox -b:v 6M -c:a aac -b:a 160k -movflags +faststart out.mp4
选哪个同码率下硬件编码通常不如 libx264 -preset slow。批量转存、录屏、实时推流用硬件;要压到很小还要保住细节,用软件编码慢慢跑。

16批量与脚本

Bash 批量(保留文件名里的空格)
for f in *.mov; do
  ffmpeg -nostdin -y -loglevel error -i "$f" \
    -c:v libx264 -crf 22 -preset medium -pix_fmt yuv420p \
    -c:a aac -b:a 160k -movflags +faststart \
    "${f%.mov}.mp4"
done
find + 并行(控制并发数)
find . -maxdepth 2 -name '*.mkv' -print0 \
  | xargs -0 -n 1 -P 4 -I{} sh -c 'ffmpeg -nostdin -y -loglevel error -i "{}" -c copy "${0%.mkv}.mp4"' {}
PowerShell 批量
Get-ChildItem *.mov | ForEach-Object {
  ffmpeg -nostdin -y -i "$($_.Name)" -c:v libx264 -crf 22 -c:a aac -b:a 160k `
    "$($_.BaseName).mp4"
}
  • 循环里一定要加 -nostdin:否则 ffmpeg 会吞掉脚本的 stdin,第二个文件开始就漏处理。
  • -loglevel error 只在出错时打印,批量跑时日志干净。
  • 机械硬盘上并发别超过 2~4,瓶颈会变成磁盘寻道;SSD 可以按 CPU 核数来。
  • 先拿一个文件跑通,再上循环。别在原文件上覆盖输出(out.mp4 别写成同一个名字)。

17排错对照

报错关键词常见原因怎么处理
Unknown encoder这份编译没有该编码器跑 ffmpeg -encoders 换名字,或换构建
No such filter滤镜未编译进这份 ffmpegffmpeg -filters | grep 确认;缺 libass/libfreetype 时换构建
Invalid data found when processing input文件损坏、后缀骗人、或地址不通先 ffprobe;网络流先确认能访问
Unable to find a suitable output format输出后缀没写 / 容器名拼错补后缀或显式 -f mp4
codec not currently supported in container编码和盒子不配换 MKV,或只重编码那一路
height not divisible by 2yuv420p 不接受奇数边scale=1280:-2 或 scale=trunc(iw/2)*2:trunc(ih/2)*2
Non-monotonous DTS源时间戳乱(拼接、部分录像)加 -fflags +genpts 并重新编码,不要 copy
Too many packets buffered输出流被阻塞(多输出 / muxer 慢)加 -max_muxing_queue_size 1024
Protocol not found / tls 相关没编译 https / rtmps 等协议换带 openssl 的构建,或走 http
moov atom not foundMP4 没下完或索引损坏重新获取;完整文件用 +faststart
Invalid file index / Stream map matches no streams-map 里写错输入或流编号用 ffprobe 重新数一遍,下标从 0 开始
Past duration too large源时间戳问题,多为警告先跑完看结果;不对再加 -fflags +genpts
输出 0 字节 / Conversion failed输出被占用、磁盘满、参数冲突换输出名;先跑一条不带滤镜的最小命令验证
排错顺序① ffprobe 确认源能读 → ② 去掉所有滤镜只做 -c copy → ③ 加编码器 → ④ 最后加滤镜。哪一步挂了,问题就在那一步。

18参数速查表

选项含义
-i指定输入文件 / 地址,可多次出现
-c / -c:v / -c:a / -c:s编码器:全部 / 视频 / 音频 / 字幕
-c copy流原样拷贝,不重编码
-crf恒定质量,越小越清晰(x264 默认 23,x265 默认 28)
-preset编码速度档:ultrafast → veryslow
-b:v / -b:a视频 / 音频码率,如 4M、160k
-maxrate / -bufsize峰值码率与缓冲窗口
-pix_fmt像素格式,网页通用 yuv420p
-r输出帧率
-s分辨率,如 1280x720(有 -vf 时优先用 scale)
-vf / -af / -filter_complex视频滤镜 / 音频滤镜 / 复杂滤镜图
-map选择要输出的流
-ss / -t / -to起点 / 持续时长 / 终点
-f强制容器或协议,如 mp4、flv、hls、null
-movflags +faststartMP4 索引前置,网页边下边播
-vn / -an / -sn / -dn丢弃视频 / 音频 / 字幕 / 数据流
-shortest以最短的输入流为准结束
-ar / -ac音频采样率 / 声道数
-af volume=调节音量
-metadata写元数据,如 -metadata title="x"
-stream_loop N输入循环 N 次,-1 为无限
-re按实时速度读输入(推流用)
-hwaccel解码硬件加速,如 cuda、qsv、videotoolbox
-threads线程数,0 为自动
-nostdin不读标准输入(脚本循环必加)
-loglevel日志级别:error / warning / info / debug
-benchmark结束时打印耗时
-framerate图片序列等输入的帧率
-g关键帧间隔(GOP),直播常用帧率 ×2
-tag:v hvc1HEVC 在 MP4 里给苹果设备用的标签
-segment_time分段输出时长,配合 -f segment
-safe 0concat 允许绝对路径
-hls_time / -hls_list_sizeHLS 切片时长 / 播放列表条目数

没有匹配的参数。

参数是会变的。任何一条记不准时,跑 ffmpeg -h full 或 ffmpeg -h encoder=libx264 看本机帮助——以它为准,不以记忆为准。


相关:FFmpeg 转码:从看片到出片(编码器选型、CRF 对照、硬件编码与转码报错)· 系统工具使用 · 拾光笔记首页