AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1826227
Accepted
Binarus
Binarus
Asked: 2024-01-18 04:53:53 +0800 CST2024-01-18 04:53:53 +0800 CST 2024-01-18 04:53:53 +0800 CST

ffmpeg 要么丢帧,要么写入无效的 PTS 时间戳:Bug 还是我的错误?

  • 772

我注意到 ffmpeg-t在 M2TS 输入上使用时有时会写入无效的 PTS 时间戳。这是我的错误还是 ffmpeg 的错误?

重现步骤:

下载此 M2TS 文件并将其另存为1.m2ts. 该文件包含一个视频流25 fps(即,一个视频帧恰好占用0.04 s( 40 ms))和一个对于本文而言不感兴趣的音频流。

打开终端,导航到包含该文件的目录,然后执行以下命令:

ffmpeg.exe -i 1.m2ts -codec copy -map 0 -t 2 2.m2ts

现在检查输出文件 ,2.m2ts并观察最新视频帧的 PTS 是3.560,前一个视频帧的 PTS 是3.480。

这显然是错误的。在上一帧之后3.480,下一帧应该呈现在3.520,而不是3.560。要么 ffmpeg 丢弃了应该出现的视频帧3.520,要么它在最后一个视频帧中写入了错误的 PTS(3.560而不是3.520)。

当然,当谈论“最后”或“之前”时,我指的是时间上的帧的顺序(更准确地说,我已经按PTS对视频帧进行了排序),而不是文件中的帧的顺序。

问题:

这是 ffmpeg 中的错误,还是我上面的命令有错误?

ffmpeg版本:

ffmpeg version 2024-01-14-git-34a47b97de-full_build-www.gyan.dev在 Windows 10 x64 企业版上

进一步说明:

我注意到我的几个 M2TS 文件存在问题;我没有时间测试其他格式。不幸的是,我无法提供我的文件供下载。这就是我链接到另一个文件的原因。

换句话说:问题并非特定于我链接的文件。相反,我在不同来源的各种 M2TS 文件中遇到过各种视频帧速率和音轨。

我还没有调查音轨的类似间隙。

ffmpeg
  • 1 1 个回答
  • 24 Views

1 个回答

  • Voted
  1. Best Answer
    Rotem
    2024-01-18T07:13:12+08:002024-01-18T07:13:12+08:00

    这不是一个错误,只是 B 帧依赖性的结果。

    视频流有 3 种类型的帧:

    • I-Frame - 不依赖于任何帧。
    • P 帧 - 仅依赖于其之前的帧。
    • B 帧 - 取决于编码帧之前和之后的帧。

    最后一个与 2 秒持续时间匹配的编码视频帧是B 帧。
    2.m2ts 中的第一帧具有pts_time=1.48.
    2.m2ts 中的最后一帧应该有pts_time=3.48.

    由于 的帧pts_time=3.48是 B 帧,因此它取决于在其之后编码的 P 帧。
    之后的 P 帧有pts_time=3.56.
    如果没有该 P 帧,就不可能解码 B 帧,因此复用器保留最后一个额外的 P 帧。


    使用 FFprobe 分析视频帧:

    我们可以使用FFprobe来获取这2个文件的视频流的pts_time和pict_type。

    ffprobe -select_streams v -of default=noprint_wrappers=1:nokey=1 -show_entries frame=pts_time,pict_type 1.m2ts > 1.txt

    ffprobe -select_streams v -of default=noprint_wrappers=1:nokey=1 -show_entries frame=pts_time,pict_type 2.m2ts > 2.txt

    使用比较工具比较文件,得到以下结果:

    1.txt       2.txt
    ------      ------
    
    1.480000    1.480000
    I           I
    ...
    B           B
    3.040000    3.040000
    B           B
    3.080000    3.080000
    P           P
    3.120000    3.120000
    B           B
    3.160000    3.160000
    B           B
    3.200000    3.200000
    B           B
    3.240000    3.240000
    P           P
    3.280000    3.280000
    B           B
    3.320000    3.320000
    B           B
    3.360000    3.360000
    B           B
    3.400000    3.400000
    P           P
    3.440000    3.440000
    B           B
    3.480000    3.480000
    B           B
    3.520000    
    B           
    3.560000    3.560000
    P           P
    

    pts_time=3.52请注意,解码不需要B 帧3.48(3.48取决于3.56P 帧,但不依赖于该3.52B 帧),因此3.52被跳过。

    • 2

相关问题

  • -map_metadata 抓取多个音频流元数据

  • 最低比特率 ffmpeg 输出的编解码器和设置

  • 如何用ffmpeg 2.0.2保存TS视频流?

  • 快速提取 I 帧到图像

  • 压缩视频可以解码回未压缩的原始格式吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Vickel Firefox 不再允许粘贴到 WhatsApp 网页中? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve