代码之家  ›  专栏  ›  技术社区  ›  Stefan Falk

从MP3创建碎片MP4

  •  0
  • Stefan Falk  · 技术社区  · 4 年前

    我正在尝试将MP3文件转换为碎片化的MP4,如下所示:

    ffmpeg -i input.mp3 -strict experimental -acodec aac -b:a 256k -f mp4 \
           -movflags faststart+frag_keyframe+empty_moov+separate_moof output.mp4 
    

    Bento4 我可以看到,只有 巨人 mdat 对象,而不是一系列:

    [ftyp] size=8+24
      major_brand = isom
      minor_version = 200
      compatible_brand = isom
      compatible_brand = iso2
      compatible_brand = iso6
      compatible_brand = mp41
    [moov] size=8+701
      ...
    [moof] size=8+62364
      ...
    [mdat] size=8+5794679
    [mfra] size=8+59
      [tfra] size=12+31, version=1
        track_ID = 1
        length_size_of_traf_num = 0
        length_size_of_trun_num = 0
        length_size_of_sample_num = 0
      [mfro] size=12+4
        mfra_size = 67
    

    我想我想要的是:

    enter image description here

    source

    但我似乎无法从 ffmpeg .

    我找到了其他的选择 here 喜欢

    $ ffmpeg -h muxer=ismv
    ...
    -frag_duration     <int>   E.... Maximum fragment duration
    -min_frag_duration <int>   E.... Minimum fragment duration
    -frag_size         <int>   E.... Maximum fragment size
    

    如何创建特定sice的片段,例如每个片段约5秒?

    0 回复  |  直到 4 年前
        1
  •  2
  •   Gyan    4 年前

    音频流没有关键帧,这是MP4 muxer默认情况下用来划分片段边界的关键帧。您必须设置片段持续时间。

    ffmpeg -i input.mp3 -c:a aac -b:a 256k -f mp4 -movflags +empty_moov+separate_moof -frag_duration 10M output.mp4

    注:

    1. faststart
    2. frag_keyframe 告诉ffmpeg从 关键帧,但您没有视频流。
    3. -strict experimental 自2016年以来,本机AAC编码器就不再需要了。
    4. frag_duration 需要以微秒为单位的值。 10M =1000万=10秒。