从MP3创建片段MP4 注意:

问题描述

我正在尝试将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

但是玩这些并没有改变输出。

如何创建特定果汁的片段,例如每个〜5秒?

解决方法

音频流没有关键帧,这是MP4多路复用器默认用来划分片段边界的关键帧。您将需要设置片段持续时间。

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在 video 关键帧处开始片段,但是您没有视频流。
  3. 自2016年以来,原生AAC编码器就不再需要
  4. -strict experimental
  5. frag_duration期望以微秒为单位的值。 10M = 1千万= 10秒。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...