首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当代码转换到mpegts时,ffmpeg在延迟1.48秒后创建第一个帧。

当代码转换到mpegts时,ffmpeg在延迟1.48秒后创建第一个帧。
EN

Stack Overflow用户
提问于 2017-06-15 11:08:34
回答 1查看 1.2K关注 0票数 1

我使用以下命令将文件转换为mpegts

代码语言:javascript
运行
复制
 ./ffmpeg -y -i big_buck_bunny_720p_5mb.mp4  -vcodec libx264  -x264opts "keyint=48:min-keyint=48:no_scenecut" -r 23.976 -c:a copy  -f mpegts test.mpegts

当我调查它的时候-

代码语言:javascript
运行
复制
./ffprobe  -i  test.mpegts  -select_streams v -show_frames -of csv

我看到第一帧开始于1.48秒,为什么是这样?

代码语言:javascript
运行
复制
Input #0, mpegts, from 'test.mpegts':
  Duration: 00:00:29.61, start: 1.483422, bitrate: 1964 kb/s
  Program 1 
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
    Stream #0:0[0x100]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 90k tbn, 47.95 tbc
    Stream #0:1[0x101](und): Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, 5.1, fltp, 406 kb/s
frame,video,0,1,133508,1.483422,133508,1.483422,133508,1.483422,3753,0.041700,564,112008,1280,720,yuv420p,1:1,I,0,0,0,0,0
frame,video,0,0,137262,1.525133,137262,1.525133,137262,1.525133,3753,0.041700,125584,1110,1280,720,yuv420p,1:1,B,2,0,0,0,0

经过一番研究,我在命令中加入了“muxdelay0”。

代码语言:javascript
运行
复制
./ffmpeg -y -i big_buck_bunny_720p_5mb.mp4  -vcodec libx264  -x264opts "keyint=48:min-keyint=48:no_scenecut" -r 23.976 -c:a copy  -muxdelay 0 -f mpegts test.mpegts

现在,我在ff探针中得到了以下内容

代码语言:javascript
运行
复制
Input #0, mpegts, from 'test.mpegts':
  Duration: 00:00:29.61, start: 0.083422, bitrate: 1987 kb/s
  Program 1 
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
    Stream #0:0[0x100]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 90k tbn, 47.95 tbc
    Stream #0:1[0x101](und): Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, 5.1, fltp, 406 kb/s
frame,video,0,1,7508,0.083422,7508,0.083422,7508,0.083422,3753,0.041700,564,112008,1280,720,yuv420p,1:1,I,0,0,0,0,0
frame,video,0,0,11262,0.125133,11262,0.125133,11262,0.125133,3753,0.041700,125584,1110,1280,720,yuv420p,1:1,B,2,0,0,0,0

有谁能帮助我理解这个导致1.4秒延迟的多重延迟是什么,以及是什么导致了剩下的0.08秒的延迟。

当输出为mp4时,第一个帧为0.000,所以这是mpegts特有的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-15 08:39:36

我也有同样的问题。似乎0.08偏移量是一个名为avoid_negative_ts的选项的结果。默认值是"auto",对于mpegts,这等于"make_non_negative“值。通过使用“禁用”值,偏移消失了。

参考资料:

  1. https://www.ffmpeg.org/ffmpeg-formats.html#toc-Format-Options
  2. mpegts的avoid_negative_ts自动值:https://github.com/FFmpeg/FFmpeg/blob/fa8308d3d4f27d6fb38ac2069887a7b259f1c6ab/libavformat/mux.c#L468
  3. 偏移量计算:https://github.com/FFmpeg/FFmpeg/blob/fa8308d3d4f27d6fb38ac2069887a7b259f1c6ab/libavformat/mux.c#L694
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44565968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档