ffmpeg -i infile.avi out.mp4
输出非碎片MP4.
我如何获得碎片mp4?
更新 碎片化的mp4文件在内部分为几个背对背块或MPEG-4电影片段.每个块都有自己的moof原子 - 因此在文件中交错存在几个moof原子,而不是像未分段的mp4那样在末尾交换单个moov.这使得在涉及缓冲的慢速网络上更容易流式传输
有几种工具,如mp4box,可将普通mp4转换为碎片.不幸的是我们不能使用这样的东西
ffmpeg <options to output mp4> | mp4box
Run Code Online (Sandbox Code Playgroud)
因为ffmpeg在生产mp4容器时不会产生可搜索的输出.
vbe*_*nce 54
这应该做的伎俩:
ffmpeg -re -i infile.ext -g 52 \
-strict experimental -acodec aac -ab 64k -vcodec libx264 -vb 448k \
-f mp4 -movflags frag_keyframe+empty_moov \
output.mp4
Run Code Online (Sandbox Code Playgroud)
frag_keyframe
导致产量分散,empty_moov
将导致输出100%碎片化; 没有这个,第一个片段将被复制为短片(使用moov
),其次是片段中的其余媒体,-re
在实时流式传输(媒体比特率输出)时非常有用,如果要创建文件,请不要使用它,-g 52
每隔52帧强制(至少)成为一个关键帧要计算健康的关键帧间隔,请参阅流媒体服务器文档中有关片段大小的段落. - 你也可以考虑使用WebM,它是H.264的一个免费替代品(并且在某些平台上比碎片mp4有更好的支持).
重要提示: FFmpeg的流合并器将设置持续时间均tkhd
与mdhd
原子为0xffffffff为每个轨道.这会导致某些播放器出现问题(例如,Quicktime不会播放此类文件).您应该找到一个工具并将其更改为零(0x00000000).
更新:将分段的MP4视为ISMV(平滑流)文件.自2012年1月27日起,新版本FFMPEG 0.10能够复用此格式.
ismv muxer AVOptions:
-movflags <flags> E.... MOV muxer flags
rtphint E.... Add RTP hint tracks
empty_moov E.... Make the initial moov atom empty (not supported by QuickTime)
frag_keyframe E.... Fragment at video keyframes
separate_moof E.... Write separate moof/mdat atoms for each track
frag_custom E.... Flush fragments on caller requests
isml E.... Create a live smooth streaming feed (for pushing to a publishing point)
-moov_size <int> E.... maximum moov size so it can be placed at the begin
-rtpflags <flags> E.... RTP muxer flags
latm E.... Use MP4A-LATM packetization instead of MPEG4-GENERIC for AAC
rfc2190 E.... Use RFC 2190 packetization instead of RFC 4629 for H.263
skip_rtcp E.... Don't send RTCP sender reports
-skip_iods <int> E.... Skip writing iods atom.
-iods_audio_profile <int> E.... iods audio profile atom.
-iods_video_profile <int> E.... iods video profile atom.
-frag_duration <int> E.... Maximum fragment duration
-min_frag_duration <int> E.... Minimum fragment duration
-frag_size <int> E.... Maximum fragment size
-ism_lookahead <int> E.... Number of lookahead entries for ISM files
Run Code Online (Sandbox Code Playgroud)