3.1 ffmpeg 主命令:一行命令装下整条管线


3.1 ffmpeg 主命令:一行命令装下整条管线

本节摘要:ffmpeg 命令把「输入→处理→输出」整条管线压缩进一行。本节拆解它的语法骨架(全局选项、输入选项、输出选项的分层规则),讲解 -i、-c、-map、-t、-ss 等核心选项的用法与作用域,并给出多输入、多输出场景的实例。

学习目标

阅读完本节,你应当能够:

  1. 写出 ffmpeg 命令的标准结构,解释选项与文件的位置关系
  2. 用 -map 精确选择输入流,用 -c 分别控制音视频编码
  3. 用 -ss 与 -t 做精确切割,并说出「切割方式不同为何结果不同」

一、场景代入:一条真实命令的诞生

假设领导丢给你一个需求:「把手机拍的 2 分钟竖屏视频,裁成横屏短视频,画面中间的部分,声音不变,一分钟以内。」

如果不懂管线,你可能会搜一长串参数拼上去。但用第 2 章的模型反推,这条需求其实是三段:输入(手机视频)、处理(裁剪画面)、输出(新文件)。写成命令就是:

# 从 input.mp4 取前 60 秒,裁出中间 720x1280 区域,其余参数跟随输入 ffmpeg -i input.mp4 -t 60 -vf "crop=720:1280:100:0" -c:v libx264 -c:a copy output.mp4

拆开看:-i input.mp4 是输入;-t 60 限定时长;-vf "crop=..." 是滤镜(第 4 章细讲);-c:v libx264 说视频重新编码成 H.264,-c:a copy 说音频原样拷贝;output.mp4 是输出。你看,管线模型直接变成了命令结构。 这就是本节要给你的能力——用模型写命令,而不是背命令。

二、核心原理:命令的骨架与作用域

ffmpeg 命令的骨架是:

ffmpeg [全局选项] [输入选项] -i 输入文件 [输出选项] 输出文件

规则只有一条,但至关重要:除全局选项外,所有选项只作用于「紧跟其后的那个文件」。 输入选项放在 -i 之前影响输入,输出选项放在输出文件名之前影响输出。这条规则决定了多输入、多输出时命令怎么组织。

常用全局选项

  • -y:直接覆盖输出文件,不询问
  • -v error:只显示错误日志(-v warning 显示警告)
  • -hide_banner:不打印版本信息

常用输入选项(放在 -i 之前)

  • -re:按原速度读取输入(推流常用,第 6 章细讲)
  • -ss:从指定时间点开始读(放输入侧为「精准定位」)
  • -thread_queue_size:多输入时加大队列防止丢包

常用输出选项(放在输出文件名之前)

  • -t 60:输出时长上限 60 秒
  • -c:v libx264 -c:a copy:分别指定视频、音频编码
  • -map 0:0 -map 0:1:选择输入的第 0 条视频流、第 1 条音频流
  • -ss 放在输出侧时,是「编码完成后跳过的时长」——速度快但可能不精准

-ss 的位置是个经典考点。放在 -i 前,是解码前定位,快且准(从关键帧开始找);放在输出文件前,是解码后丢弃,慢但切割点更精确(逐帧定位)。对普通切割,放输入侧更快;对「必须切到某一帧」的严肃剪辑,放输出侧更稳。

流映射:-map 的威力

默认情况下,ffmpeg 会自作主张选「最好的」视频流和音频流。多输入、多音轨时,它的选择往往不是你想要的。-map 让你明确指定。

# 输入 A 的视频 + 输入 B 的音频,合并输出 ffmpeg -i video_a.mp4 -i audio_b.mp3 -map 0:v:0 -map 1:a:0 -c copy merged.mp4

0:v:0 的意思:输入文件 0、类型 video、第 0 条。1:a:0 同理:输入 1、音频、第 0 条。这是把第 1 章「容器 + 多流」概念落到命令行的关键操作。

下面这张图把命令骨架与管线对应起来,帮你在脑子里建一个「命令→管线」的映射。

03-01-fig01

图说明:命令即管线

图中四个方框分别对应命令的四段:全局选项控制进程行为,输入选项只影响 -i 输入,中间是实际处理(滤镜、编解码),输出选项约束最终产物。记住「选项紧跟文件生效」这条铁律,就能看懂任何复杂命令。

三、工程实践要点

场景一:转码时只想换封装

# 把 MKV 换成 MP4,编码数据原样搬 ffmpeg -i input.mkv -c copy output.mp4

场景二:裁掉前 10 秒,输出 30 秒片段

# -ss 放输入侧,速度快;-t 限制时长 ffmpeg -ss 10 -i input.mp4 -t 30 -c copy clip.mp4

场景三:从视频里抽一帧当封面

# 第 5 秒抽一帧,输出 720 宽的高清图 ffmpeg -ss 5 -i input.mp4 -frames:v 1 -q:v 2 cover.jpg

场景四:提取纯音频

# 只要音轨,去掉视频流 ffmpeg -i input.mp4 -vn -c:a copy audio.m4a

常见坑:-c copy-ss 切割时,切割点会自动对齐到关键帧,所以得到的片段开头可能比预期早一点或晚一点。要逐帧精确,用 -ss 放输出侧(牺牲速度)或重新编码。

💡 关键直觉:任何一次 ffmpeg 调用,都是「一次输入侦察 + 一串管线控制 + 一次输出约束」的三段式。看不懂某条命令时,先找 -i,它把命令劈成输入侧和输出侧两半。

本节要点回顾

  • 命令骨架:全局选项 + 输入选项(-i 前)+ 输出选项(文件名前),作用域是「紧跟其后」
  • -ss 的两种放法:输入侧定位(快)与输出侧丢弃(准),按切割精度选
  • -map 精确选流0:v:0 表示「输入0、视频、第0条」,多输入场景必备
  • -c 分控音视频-c:v 控视频、-c:a 控音频,copy 表示原样搬
  • 管线即命令:用「输入→处理→输出」模型反推需求,命令自然写出来

下一节,动手之前先侦察——ffprobe 是怎么把文件底细一条条报给你的。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U