Post processing in ffmpeg to move 'moov atom' in MP4 files (qt-faststart)
Asked Answered
L

3

38

Is it possible to run ffmpeg from the command line which will either place the 'moov atom' metadata in the beginning of the MP4 file or run the qt-faststart as a post processing operation in ffmpeg so the generated file is stream-able through the internet?

I can of course run it as a separate command, but would prefer it to be something

  • as an option within ffmpeg, or
  • as part of a post conversion, command line option when converting the video files via ffmpeg

Edit 1

http://ffmpeg.org/ffmpeg.html#mov

MOV / MP4 muxer

The muxer options are:

‘-moov_size bytes’

Reserves space for the moov atom at the beginning of the file instead of 
placing the moov atom at the end. If the space reserved is insufficient, 
muxing will fail.
Luo answered 9/11, 2011 at 7:47 Comment(1)
Yes, It is possible to move the moov atom at beginning of the file refer : https://mcmap.net/q/410585/-how-to-add-a-moov-atom-in-a-mp4-video-file-closedNanete
L
8

Ended up setting up and running qt-faststart after ffmpeg conversion process.

Luo answered 17/12, 2011 at 14:22 Comment(1)
This i more aptly a comment rather an answer. @stharward response qualifies more as an answer.Taitaichung
C
74

Seems like faststart support has been included in ffmpeg. FFmpeg Formats Documentation:

-movflags faststart

Run a second pass moving the moov atom on top of the file. This operation can take a while, and will not work in various situations such as fragmented output, thus it is not enabled by default.

Coussoule answered 5/2, 2013 at 11:14 Comment(6)
This worked for me. It does a second pass and then the moov atom is moved to beginning. Cheers!Brandi
This worked for me only when I had the -codec:v libx264 arguments. To support this, I had to configure ffmpeg with the --enable-gpl --enable-libx264 options.Dosh
Any idea in which version this was added?Synonymize
android's video element can start playing video via http streaming even if the moov atom is at the end. how is that possible ?Imprimis
@SagarPilkhwal It probably uses the HTTP Range header to request bytes from the end of the file. The web server must support it. Same mechanism as download resuming.Toon
command: ffmpeg -i input.mp4 -vcodec copy -acodec copy -movflags faststart output.mp4Curative
L
8

Ended up setting up and running qt-faststart after ffmpeg conversion process.

Luo answered 17/12, 2011 at 14:22 Comment(1)
This i more aptly a comment rather an answer. @stharward response qualifies more as an answer.Taitaichung
I
3

ffmpeg has an option for smooth streaming

-movflags isml+frag_keyframe

and it's also useful for avoiding corrupt videos when power loss during recording

Ishmaelite answered 3/11, 2020 at 20:56 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.