using the scale filter will do it, but there is a bit more to it.
ffmpeg -i input.mov -vf scale=720x406 output.mov
will create a movie with the required pixel dimensions, but if you look at the output you'll find that it adds information into the metadata so that it will play back at the same aspect ratio as the original, by using non-square pixels. So if you want to stretch the movie anamorphically to a new aspect ratio you need to manually set the pixel aspect ratio, called the SAR for "Sample Aspect Ratio", thus for square pixels use:
ffmpeg -i input.mov -vf scale=720x406,setsar=1:1 output.mp4
Alternatively you can set the display aspect ratio to whatever you want, thus:
ffmpeg -i input.mov -vf scale=720x406,setdar=16:9 output.mp4
What I'm doing with the -vf
command and the x=y,z=a
expressions that follow is creating a chain of filters. Filters can be quite complex, but in the most simple usage they take the form effect=parameter,nexteffect=anotherparameter
, and they get processed in the order you write them.
You may want to put additional commands for the codec and so on, eg -c:v libx264
to use the x264 mp4 encoder, and something like -crf 20
to set the constant rate factor to 20 (usually a pretty good compromise between size and quality). So, a reasonably complete command would look like:
ffmpeg -i input.mov -vf scale=720x406,setdar=16:9 -preset slow -profile:v main -crf 20 output.mov
Main profile is good for device compatibility, the slow
preset for the libx264 encoder is a pretty good balance of speed and quality, so this is a good general web-encoding workhorse. You can make it faster by using fast
or veryfast
or slower with veryslow
and placebo
will make it ever so slightly better than veryslow
at the expense of a lot more processing time (hence the name).
BTW Don't use -c copy, that means just copy the video and audio streams without doing anything to them at all, so nothing you do in terms of scale, codec, bitrate etc will have any effect.