I want to convert avi and wmv to mp4 for web and I use below code:
ffmpeg -I input.wmv output.mp4
Is that enough?
Yes it is. This will give you the default encoding settings, which are generally fine for web use.
You can specify settings to tweak the size, speed and quality, but you don't need to to get good results. The best guide I know of is the ffmpeg h.264 encoding guide wiki page.
For example, you could adjust the quality with the Constant Rate Factor setting (don't worry too much about what constant rate factor actually means, it's really just the quality setting) using
-crf x where x is an interger between 0 (lossless, large file size not generally compatible with web delivery) and 51 (pretty crappy, small file size). The default is 23, which is pretty good, 17 is regarded as visually lossless, and somewhere between 17-28 is a sane value.
Another setting is the speed. If you're using CRF, adjusting the speed won't affect the quality of the output, it will just affect the file size—faster compression basically means the software will spend less time optimising, so the file will be larger. Speed is controlled by using the option
-preset presetname, where
presetname is one of (in decreasing order of speed / increasing file size):
The playback devices that you expect the video to be played on is another thing you might want to consider. Setting the
-level option (the
:v bit means you're setting the profile for the video stream only) means that you can choose between more efficient compression with a higher profile/level, and greater compatibility with older or less powerful devices with lower profile/ level.
-profile main is probably wise if you're expecting a general web audience, it's compatible with all iPads, apple tv2 and iPhone4 and their non-fruity equivalents. If your target audience is likely to be using an iPod touch gen 2 you might want to go with
-profile:v baseline and if you want to be certain it can be played by as many devices as possibel you could specify the level as well,
-profile:v baseline -level 3.0
As @LordNeckbeard pointed out, if you're encoding for web use where the video will be embedded in an HTML5
<video> tag then adding the option
-movflags +faststart will allow the video to start playing as it downloads.
Putting it all together, this is an example of how you chain options together in ffmpeg. This is a very basic example, ffmpeg is extremely powerful and your commands can be as complicated as you want them to be. This example will give you high quality, be playable on older/less powerful machines, and chooses smaller file size over encoding speed. It is not a recommended setting, just an example of how you specify the encoding options:
ffmpeg -i thefile.wmv -profile:v main -crf 20 -preset slow output.mp4