6

I have found this line online

ffmpeg -i input.mp4 -c:a copy -c:v copy -movflags faststart output.mp4

Which takes an input, and copies the audio, video and sets the MOOV atom to the beginning in an element called output.mp4. Basically creating the same video with the MOOV atoms in a new place.

I need to convert the type of this media though - so I have the line

ffmpeg -i input.wmv -vcodec h264 -f mp4 output.mp4

My problem is, is this possible in one line? I know I can run one after another but that creates a couple of videos when I only need the resulting video, which could result in a lot of memory wasted.

I am sure the line

ffmpeg -i input.wmv -movflags faststart -vcodec h264 -f mp4 output.mp4 

Is legitimate, but without the straight copies, this takes a long long time to compute.

Any input on MOOV atoms and ffmpeg computation is welcome.

1
  • you should ask your question at a video forum.
    – Endoro
    Commented Jun 11, 2013 at 16:18

1 Answer 1

8

Copying streams is faster

Your first example is simply copying the streams and then relocating the moov atom. This relocation allows a video to begin playback before it is completely downloaded such as a viewer watching your video via browser.

ffmpeg -i input.mp4 -codec copy -map 0 -movflags +faststart output.mp4

Encoding is slower

Encoding, as in your second example, can take a long time depending on several factors including: the complexity and duration of your input, how your ffmpeg and x264 builds were compiled, the age of your builds (potential lack of features, improvements, and bug fixes), your CPU, the encoder used, and your encoding settings. Not all of these can be controlled, but you can make sure you're using a recent build and you can change your encoding settings to better fit your needs.

Getting FFmpeg

Static builds are easy to use: just download, extract, and run. See the FFmpeg Download page for options for Linux, Windows, and OS X users. You can also compile and several step-by-step FFmpeg compile guides are available.

Using a preset

You can use a faster encoding preset when encoding with x264:

ffmpeg -i in.wmv -codec:v libx264 -preset fast -movflags +faststart out.mp4

A preset is a collection of options that determine the encoding efficiency and therefore will also affect the speed. Current presets are: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo. The default is medium, and placebo is a waste of time. General recommendation is to simply use the slowest preset that you have patience for. See the FFmpeg and x264 Encoding Guide for more information.

The -f mp4 is unnecessary and depending on your ffmpeg version h264 can work as an encoder name it is convention to use libx264.

2
  • Thanks. Quick question - using ffmpeg - is it possible to move the MOOV atom to the beginning of a file, without having to create a temporary file. So given a file A; relocate the MOOV atom to the beginning of A.@LordNeckbeard
    – Jim
    Commented Jun 12, 2013 at 13:31
  • 2
    ‘-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. <-- Why can this 'take a while'? Whenever I run it with ffmpeg -i input.mp4 -c:a copy -c:v copy -movflags faststart output.mp4 it's super quick.
    – Jim
    Commented Jun 12, 2013 at 13:34

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .