首页 / FFmpeg 入门教程 / ffplay 与 ffprobe 速览

FFmpeg 入门教程

ffplay 与 ffprobe 速览

本教程共 32 篇 · 第 5 篇 · 更新于 2026-08-09 · 约 6 分钟阅读

FFmpegffplayffprobe媒体信息播放器元数据

本节目标:会用 ffplay 快速播放和预览,会用 ffprobe 把一个媒体文件的「身份证」读出来。

除了主力 ffmpeg,安装包里还带了两个小工具:ffplay 负责播放,ffprobe 负责体检。处理文件前先让它们出场,能帮你避免很多「转了半天才发现源文件有问题」的尴尬。

ffplay:轻量播放器

ffplay 基于 SDL 和 FFmpeg 库,界面朴素但功能够用。它的价值在于:调命令的时候能立刻看结果,不用切换到大型播放器。

基本播放

ffplay input.mp4

直接打开一个窗口开始播放。除了本地文件,它也能播网络流:

ffplay rtmp://example.com/live/stream
ffplay https://example.com/video.mp4

甚至能直接播裸数据,只要告诉它格式:

ffplay -f rawvideo -pixel_format yuv420p -video_size 1920x1080 input.yuv

常用快捷键

播放时用键盘控制,鼠标点击进度条也能跳转:

按键作用
q / Esc退出
f全屏切换
p / 空格暂停/继续
a切换音轨
v切换视频流
t切换字幕流
m静音切换
左/右方向键后退/前进 10 秒
下/上方向键后退/前进 1 分钟
鼠标左键跳转到点击位置
s逐帧步进(暂停时)

常用选项

  • -x / -y:窗口宽高。
  • -fs:直接全屏启动。
  • -an / -vn:不播放音频/视频。
  • -sn:不显示字幕。
  • -ss 位置:从指定时间开始播。
  • -t 时长:只播多少秒。
  • -loop 次数:循环播放(0 表示无限循环)。
  • -volume 0-100:起始音量。

比如从第 30 秒开始,只播 10 秒,窗口宽 800:

ffplay -ss 30 -t 10 -x 800 input.mp4
Tip

ffplay 是调试滤镜的好帮手。可以直接把滤镜图喂给它预览,不用等 ffmpeg 跑完整个文件:

ffplay -vf "scale=640:-1,transpose=1" input.mp4

ffprobe:媒体侦察兵

ffprobe 只读不写,专门输出文件的结构信息。拿到一个陌生视频,先让它看一眼,你就知道里面有几条流、用了什么编码器、分辨率多少、码率多高。

最基础的用法

ffprobe input.mp4

输出分几段:容器信息、每条流的信息、总结。加 -hide_banner 可以关掉开头的版本噪音:

ffprobe -hide_banner input.mp4

典型输出长这样:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
  Metadata:
    major_brand     : isom
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf61.5.101
  Duration: 00:10:00.00, start: 0.000000, bitrate: 2500 kb/s
  Stream #0:0[0x1](und): Video: h264 (High), yuv420p, 1920x1080, 2350 kb/s, 30 fps
  Stream #0:1[0x2](und): Audio: aac, 48000 Hz, stereo, fltp, 128 kb/s

一眼能看出来:

  • 容器是 MP4,时长 10 分钟,总码率约 2500 kbps。
  • 视频流:H.264 High profile,yuv420p,1920×1080,约 2350 kbps,30 fps。
  • 音频流:AAC,48 kHz,立体声,128 kbps。

只看错误,不打印别的

脚本里判断一个文件能不能读:

ffprobe -v error input.mp4

如果文件坏了或不支持,会打印错误;正常则什么都不输出。

输出结构化信息

ffprobe 支持把信息导出成 JSON、CSV、XML、INI 等格式,方便脚本解析。最常用的是 JSON:

ffprobe -v quiet -print_format json -show_format -show_streams input.mp4

参数解释:

  • -v quiet:彻底关掉日志。
  • -print_format json:输出 JSON。
  • -show_format:包含容器层信息。
  • -show_streams:包含每条流的信息。

输出会是一个 JSON 对象,有 streams 数组和 format 对象,字段齐全,写脚本处理非常方便。

精确取一个字段

有时候只想拿一个值,比如宽度。可以用 -show_entries 指定字段,再配 -of csv=p=0 只输出原始值:

ffprobe -v error -select_streams v:0 \
  -show_entries stream=width,height,r_frame_rate,codec_name \
  -of csv=p=0 input.mp4

输出类似:

h264,1920,1080,30/1

常用字段:

  • format=duration,bit_rate,size,format_name
  • stream=index,codec_type,codec_name,width,height,r_frame_rate,bit_rate,sample_rate,channels

看每一帧、每个包

进阶时会用到:

  • -show_packets:列出每个压缩包的信息(PTS、DTS、大小)。
  • -show_frames:列出每一帧解码后的信息(关键帧、类型、时间戳)。
  • -read_intervals 时间:只分析某一段时间。

比如列出所有关键帧的时间:

ffprobe -v error -select_streams v:0 \
  -show_entries frame=pts_time,pict_type \
  -of csv=p=0 input.mp4 | grep I
Note

帧数多的视频用 -show_frames 会输出巨量内容,先用 -read_intervals 限定一段,或者加 -select_streams 只看某条流。

三件套如何配合

典型的工作流是这样的:

  1. ffprobe 先看:搞清楚输入文件的编码、分辨率、有几条流。
  2. ffmpeg 干活:根据侦察结果决定是直接复制还是要重编码,该用什么参数。
  3. ffplay 验证:处理完后快速播放一下,确认画面声音都正常。

比如你拿到一个 MKV 文件想塞进 PR 剪辑,先 ffprobe 一下发现是 HEVC + FLAC,PR 支持不好。那就 ffmpeg 转成 H.264 + AAC 的 MP4,再用 ffplay 抽几秒看看有没有音画不同步。

小结

  • ffplay 文件 直接播放,q 退出,f 全屏,p 暂停,方向键跳转。
  • ffprobe 文件 打印完整信息;加 -print_format json -show_format -show_streams 输出结构化 JSON。
  • -show_entries 精确取字段,适合写脚本。
  • 处理前先 ffprobe,处理后用 ffplay 验证,能省很多返工时间。

入门篇到这里就结束了。下一章开始,我们进入核心概念篇,先把容器、编码、流这三个最容易搞混的东西讲透。