16

I have a 1080p wmv video that I'd like to convert to a lower quality (preferably 720p) video. I would like to keep the audio intact. How can I accomplish this in Ubuntu?

3 Answers 3

19

Since you used an ffmpeg tag I will use that for the answer.

ffmpeg -i input.wmv -s hd720 -c:v libx264 -crf 23 -c:a aac -strict -2 output.mp4

Change the video quality by specifying a different CRF parameter. See the x264 encoding guide for more info.

2
  • 1
    Option 'sameq' was removed. If you are looking for an option to preserve the quality (which is not what -sameq was for), use -qscale 0 or an equivalent quality factor option.
    – juanmah
    Apr 4, 2013 at 9:15
  • According to ffmpeg's wiki, this can be as simple as: ffmpeg -i input.avi -vf scale=-1:720 output.avi Feb 9, 2017 at 17:35
9

Time has moved on a little since the original accepted answer for this question in 2012. Newer versions of FFmpeg would be better to use FFmpeg's 'scale' video filter.

I give an example below, using this filter, which also simply copies the audio track as you have requested:

ffmpeg -i input.wmv \
       -c:v libx264 -preset veryslow -tune film -crf 22 -vf scale=-2:720 \
       -c:a copy \
       output.mp4

The -tune film option given above can be omitted or you could try -tune animation depending on the type of video clip you are using.

If you decided that you would like to transcode the audio a good choice would be to use the external library libfdk_aac as follows:

ffmpeg -i input.wmv \
       -c:v libx264 -preset veryslow -tune film -crf 22 -vf scale=-2:720 \
       -c:a libfdk_aac -b:a 128k \
       output.mp4

This is certainly what I would do with a wmv file that I was scaling, you will find the results more than acceptable...

0
1

If you want to keep intact all the audio tracks, subtitles and so on, you should use something like this:

ffmpeg -i input.mkv \
       -map 0:0 -map 0:1 -map 0:2 -map 0:3 -map 0:4 \
       -vf scale=-1:720 -c:v libx264 -crf 18 -preset veryslow \
       -c:a:0 copy -c:a:1 copy -c:s copy \
       output.mkv

In this case, the input.mkv file has two audio tracks and two subtitles. You can specify all the audio tracks (or subtitles, or videos, etc.) one by one or as a single entity (as I specified for subtitles).

Hope it helps...

2
  • 1
    You don't need to specify each stream in the manner above: -map 0:0 -map 0:1 -map 0:2 -map 0:3 -map 0:4 Instead, you can simply specify -map 0 instead. This will automatically select all streams in input 0. similar with audio copy codecs. The only codec options you need to specify are -c:copy -c:v libx264. This means: "set all stream codecs to copy, except video which should transcode to x264."
    – Cheekysoft
    May 26, 2016 at 14:59
  • Equivalent (showing parameter ordering): ffmpeg -i input.mkv -map 0 -vf scale=-1:720 -c:copy -c:v libx264 -crf 18 -preset veryslow output.mkv
    – Cheekysoft
    May 26, 2016 at 15:07

You must log in to answer this question.

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