V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xQmQ
V2EX  ›  FFmpeg

关于 ffmpeg sdk 官方示例的问题

  •  
  •   xQmQ · 2022-03-27 21:22:11 +08:00 · 1991 次点击
    这是一个创建于 1001 天前的主题,其中的信息可能已经有所发展或是发生改变。

    初次使用 ffmpeg sdk 开发,如有莽撞,请各位见谅

    因为毕设要求,需要 ffmpeg sdk 将 mp4 转封装切分为 m3u8 。从官方示例里拿 remuxing.c 编译尝试了一下,转封装切分倒是成功了,但是 m3u8 的 #EXT-X-MEDIA-SEQUENCE 标签不是从 0 开始,而是从 36 开始,到 40 结束(但是从 0.ts 到 40.ts 都切分出来了);#EXT-X-TARGETDURATION 标签为 5

    我想请教一下,如何让它可以从 0 开始呢?切片的时间如何设置呢?

    以下是代码 https://gist.github.com/xQmQ/3ce63bf6a234a5b4e28977c2debb35cd

    编译 gcc -o remuxing remuxing.c -lavformat -lavcodec -lavutil

    执行 ./remuxing input.mp4 output.m3u8

    打印的输入文件和输出文件信息 https://gist.github.com/xQmQ/89c83d9da5611de03a4922d95f9f7668

    5 条回复    2022-03-29 07:03:05 +08:00
    Ptu2sha
        1
    Ptu2sha  
       2022-03-27 21:39:29 +08:00
    -hls_list_size 0:列表最大长度
    ec0
        2
    ec0  
       2022-03-28 02:33:29 +08:00   ❤️ 1
    为什么不直接调用 ffmpeg 呢?
    比如
    ffmpeg -i input.mp4 output.m3u8

    至于分段的问题,那是因为 hls_list_size 参数的默认值是 5 ,也就是说,不管你分了多少段,只取最后 5 段,把这个参数改成 0 就可以取所有段了

    还有一个参数 hls_time ,是分段的长度,默认是 2

    那么
    ffmpeg -i input.mp4 output.m3u8
    就相当于
    ffmpeg -i input.mp4 -hls_list_size 5 -hls_time 2 output.m3u8

    至于你的 remuxing.c ,想设置这两个值的话,可以在 112 行的 ret = avformat_write_header(ofmt_ctx, NULL);
    前面插入两行代码

    av_opt_set_int(ofmt_ctx->priv_data, "hls_list_size", 0, 0);
    av_opt_set_int(ofmt_ctx->priv_data, "hls_time", 50, 0);

    意思是把 hls_list_size 设置为 0 ,把 hls_time 设置为 50

    参考了
    https://stackoverflow.com/questions/30912542/mp4-to-hls-using-ffmpeg
    xQmQ
        3
    xQmQ  
    OP
       2022-03-28 07:34:12 +08:00
    @ec0 感谢

    不直接使用命令行工具是因为毕设里没法直接调用,所以想着调库直接写代码,看能不能解决问题,主要就聚焦在 MP4 转 HLS 分片这里

    关于代码里设置值,测试以后解决了问题了,非常感谢
    tbwisk
        4
    tbwisk  
       2022-03-28 10:37:57 +08:00
    @xQmQ 你代码里面加一堆花里胡哨的封装。。之后说自己写代码就是了。。。
    xQmQ
        5
    xQmQ  
    OP
       2022-03-29 07:03:05 +08:00 via iPhone
    @tbwisk #4 现在的代码就是官方示例,我到时候改改就能拿去用了哈哈哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2932 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:31 · PVG 21:31 · LAX 05:31 · JFK 08:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.