video - FFMPEG - 编解码器副本在输入编辑原子时创建不正确的持续时间

标签 video encoding ffmpeg

当使用 FFMPEG 到 -codec copy带有 Edit Atoms 的输入在转码之前,生成的输出包含不正确的持续时间。

mp4dump显示了此 example mp4 的编辑原子列表在音轨上。

...
    [edts] size=8+52
      [elst] size=12+40
        entry count = 3
        entry/segment duration = 111968
        entry/media time = 0
        entry/media rate = 1
        entry/segment duration = 111968
        entry/media time = 322560
        entry/media rate = 1
        entry/segment duration = 111968
        entry/media time = 645120
        entry/media rate = 1
...

使用 ffmpeg version 4.1.3并运行

ffmpeg -i example.mp4 -codec copy example-copy.ts

然后运行

ffmpeg -i example-copy.ts example-out.mp4

产生与引入 A/V 同步问题的输入具有不同持续时间的输出

输入音频流持续时间=21.868776

输出音频流持续时间=23.821769

跳过 -codec copy 时不会出现此问题步骤并直接进入转码步骤(但这一步目前是我们工作流程的重要组成部分)。

-codec copy 时,该问题也不会发生(对于此示例)转到不同的视频容器,例如 .nut ,但在其他示例中(特别是具有 > 0 media_time 的单个编辑原子条目的示例)更改视频容器并不能解决问题。

FFMPEG 在使用编解码器复制操作时是否忽略/删除编辑列表?

这是预期的行为还是FFMPEG存在问题?

最佳答案

这似乎是 ffmpeg 在解复用时维护的数据包解复用和时间戳修改的问题。

pts_time=6.269388|dts=276480|duration=1024|pos=460238
pts_time=6.292608|dts=277504|duration=1024|pos=460529   <---
pts_time=6.315828|dts=278528|duration=1024|pos=460813
pts_time=6.339048|dts=279552|duration=1024|pos=461094
pts_time=6.362268|dts=280576|duration=1024|pos=461379
pts_time=6.385488|dts=281600|duration=1024|pos=461659
pts_time=6.408707|dts=282624|duration=1024|pos=461941
pts_time=6.431927|dts=283648|duration=1024|pos=462217
pts_time=6.455147|dts=284672|duration=1024|pos=462498
pts_time=6.478367|dts=285696|duration=1024|pos=462782
pts_time=6.501587|dts=286720|duration=1024|pos=497050
pts_time=6.524807|dts=287744|duration=1024|pos=497316
pts_time=6.548027|dts=288768|duration=1024|pos=497552
pts_time=6.571247|dts=289792|duration=1024|pos=497562
pts_time=6.594467|dts=290816|duration=1024|pos=497648
pts_time=6.617687|dts=291840|duration=1024|pos=497927
pts_time=6.640907|dts=292864|duration=1024|pos=498205
pts_time=6.664127|dts=293888|duration=1024|pos=498484
pts_time=6.687347|dts=294912|duration=1024|pos=498763
pts_time=6.710567|dts=295936|duration=1024|pos=499041
pts_time=6.733787|dts=296960|duration=1024|pos=499320
pts_time=6.757007|dts=297984|duration=1024|pos=499599
pts_time=6.780227|dts=299008|duration=1024|pos=499877
pts_time=6.803447|dts=300032|duration=1024|pos=500156
pts_time=6.826667|dts=301056|duration=1024|pos=500434
pts_time=6.849887|dts=302080|duration=1024|pos=500713
pts_time=6.873107|dts=303104|duration=1024|pos=500992
pts_time=6.896327|dts=304128|duration=1024|pos=501270
pts_time=6.919546|dts=305152|duration=1024|pos=501549
pts_time=6.942766|dts=306176|duration=1024|pos=501828
pts_time=6.965986|dts=307200|duration=1024|pos=502106
pts_time=6.989206|dts=308224|duration=1024|pos=502385
pts_time=7.012426|dts=309248|duration=1024|pos=584916
pts_time=7.035646|dts=310272|duration=1024|pos=585194
pts_time=7.058866|dts=311296|duration=1024|pos=585473
pts_time=7.082086|dts=312320|duration=1024|pos=585930
pts_time=7.105306|dts=313344|duration=1024|pos=586295
pts_time=7.128526|dts=314368|duration=1024|pos=586659
pts_time=7.151746|dts=315392|duration=1024|pos=586999
pts_time=7.174966|dts=316416|duration=1024|pos=587280
pts_time=7.198186|dts=317440|duration=1024|pos=587569
pts_time=7.221406|dts=318464|duration=1024|pos=587859
pts_time=7.244626|dts=319488|duration=1024|pos=588145
pts_time=7.267846|dts=320512|duration=1024|pos=588425
pts_time=6.267914|dts=276415|duration=1024|pos=460529   <---
pts_time=6.291134|dts=277439|duration=1024|pos=460813
pts_time=6.314354|dts=278463|duration=1024|pos=461094

第一步使用这个
ffmpeg -advanced_editlist 0 -i example.mp4 -codec copy example-copy.ts

为我生成一个同步播放的转码 MP4。

考虑在 trac.ffmpeg.org 上开票。

关于video - FFMPEG - 编解码器副本在输入编辑原子时创建不正确的持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56468034/

相关文章:

android - FFMPEG .mov 到 .mp4 转换失败

ffmpeg - 如何替换 mkv 文件中的两个字幕?

ffmpeg - 我可以在没有 libx264 的情况下通过 libavformat 将 h264 流混合到 mp4(aac) 吗?

string - UTF-32 和 UCS-4 有什么区别?

Android - 在 MediaRecorder、MediaCodec 和 Ffmpeg 之间进行选择

video - YouTube高等教育版的付费支持选项

C# Windows 窗体从嵌入式 Windows Media Player 捕获图像

objective-c - cocoa base64解码。和 NSString initWithData :encoding: return nil

excel - Excel 数据中的变音符号

linux - ffmpeg img to video = 找不到带路径的文件