Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I am trying to convert a video from WMV to MP4 with FFmpeg but it takes couple of hours. If I try to convert it to AVI it only takes about 10-15 minutes.

ffmpeg version

ffmpeg version N-43206-gf857465
built on Aug  4 2012 16:10:39 with gcc 4.7.1 (GCC)

Conversion to MP4

ffmpeg -i input.wmv -vcodec libx264 output.mp4

libavutil      51. 66.100 / 51. 66.100
  libavcodec     54. 49.100 / 54. 49.100
  libavformat    54. 22.100 / 54. 22.100
  libavdevice    54.  2.100 / 54.  2.100
  libavfilter     3.  5.102 /  3.  5.102
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Input #0, asf, from 'input.wmv':
  Metadata:
    WMFSDKVersion   : 12.0.7601.17514
    WMFSDKNeeded    : 0.0.0.0000
    IsVBR           : 0
    encoder         : Lavf54.22.100
  Duration: 01:14:23.06, start: 0.000000, bitrate: 324 kb/s
    Stream #0:0: Video: msmpeg4 (MP43 / 0x3334504D), yuv420p, 1280x720, 15 tbr,
1k tbn, 1k tbc
[libx264 @ 03427620] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle Cac
he64
[libx264 @ 03427620] profile High, level 3.1
[libx264 @ 03427620] 264 - core 125 r2208 d9d2288 - H.264/MPEG-4 AVC codec - Cop
yleft 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deb
lock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 m
e_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chro
ma_qp_offset=-2 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 i
nterlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1
b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=15 scenec
ut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=
0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'output.mp4':
  Metadata:
    WMFSDKVersion   : 12.0.7601.17514
    WMFSDKNeeded    : 0.0.0.0000
    IsVBR           : 0
    encoder         : Lavf54.22.100
    Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1280x720, q=-1--
1, 15 tbn, 15 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (msmpeg4 -> libx264)

Conversion to MP4 with copy

ffmpeg -i input.wmv -c:v:1 copy output.mp4

  libavutil      51. 66.100 / 51. 66.100
  libavcodec     54. 49.100 / 54. 49.100
  libavformat    54. 22.100 / 54. 22.100
  libavdevice    54.  2.100 / 54.  2.100
  libavfilter     3.  5.102 /  3.  5.102
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Input #0, asf, from 'input.wmv':
  Metadata:
    WMFSDKVersion   : 12.0.7601.17514
    WMFSDKNeeded    : 0.0.0.0000
    IsVBR           : 0
    encoder         : Lavf54.22.100
  Duration: 01:14:23.06, start: 0.000000, bitrate: 324 kb/s
    Stream #0:0: Video: msmpeg4 (MP43 / 0x3334504D), yuv420p, 1280x720, 15 tbr,
1k tbn, 1k tbc
[libx264 @ 03437620] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle Cac
he64
[libx264 @ 03437620] profile High, level 3.1
[libx264 @ 03437620] 264 - core 125 r2208 d9d2288 - H.264/MPEG-4 AVC codec - Cop
yleft 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deb
lock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 m
e_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chro
ma_qp_offset=-2 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 i
nterlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1
b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=15 scenec
ut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=
0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'output.mp4':
  Metadata:
    WMFSDKVersion   : 12.0.7601.17514
    WMFSDKNeeded    : 0.0.0.0000
    IsVBR           : 0
    encoder         : Lavf54.22.100
    Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1280x720, q=-1--
1, 15 tbn, 15 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (msmpeg4 -> libx264)

Conversion to AVI with copy

ffmpeg -i input.wmv -c:v:1 copy output.avi

Input #0, asf, from 'input.wmv':
  Metadata:
    WMFSDKVersion   : 12.0.7601.17514
    WMFSDKNeeded    : 0.0.0.0000
    IsVBR           : 0
    encoder         : Lavf54.22.100
  Duration: 01:14:23.06, start: 0.000000, bitrate: 324 kb/s
    Stream #0:0: Video: msmpeg4 (MP43 / 0x3334504D), yuv420p, 1280x720, 15 tbr,
1k tbn, 1k tbc
Output #0, avi, to 'output.avi':
  Metadata:
    WMFSDKVersion   : 12.0.7601.17514
    WMFSDKNeeded    : 0.0.0.0000
    IsVBR           : 0
    ISFT            : Lavf54.22.100
    Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 1280x720, q=2-31, 20
0 kb/s, 15 tbn, 15 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (msmpeg4 -> mpeg4)

Are there some additional parameters I need to pass?

share|improve this question
    
Of course it's faster if you're just copying the bitstream — with copy, you're not re-encoding anything. What hardware do you have, e.g. CPU? What's your OS and which version of FFmpeg is that? –  slhck Aug 10 '12 at 8:44
    
@slhck: The computer is not very fast E5400 2.7GHz but why is it slow for mp4 while it is fast for avi? –  Giorgi Aug 10 '12 at 9:04
    
I don't see any AVI output in your question. Could you update it with the full output? –  slhck Aug 10 '12 at 9:07
    
@slhck: added avi output –  Giorgi Aug 10 '12 at 9:19

2 Answers 2

up vote 6 down vote accepted

When you call -c:v:1 copy, FFmpeg will take the existing video bitstream and copy it. The video bitstream is just encapsulated in the outside container, e.g. WMV, AVI or MP4 – your actual video bitstream is msmpeg4 and will stay like this.

If you want to know more about what I'm talking about, see here: What is a Codec (e.g. DivX?), and how does it differ from a File Format (e.g. MPG)?

When copying the bitstream, FFmpeg doesn't need to actually decode and re-encode the actual video. It just needs to merge the video bitstream into a new container format, which is often a rather simple operation and therefore doesn't take long.

In contrast to that, if you call -vcodec libx264 (or -c:v libx264, the syntax you should use because vcodec is deprecated), FFmpeg will be forced to decode the video bitstream from msmpeg4 to a raw format, then pipe it into x264, a H.264 encoder.

x264 is fast, but still, encoding video takes time – especially when it's 720p content. And it might take more than one hour, especially if your input is already longer than one hour. Also, your CPU might not be the fastest. This is the main reason older MPEG-4 Visual encoders like XviD are still around and very popular: They take less time to encode than H.264 codecs. They might not give you the best performance in terms of quality vs. file size, but they are fast.

That all being said: You can speed up x264 encoding by forcing a preset. Presets are encoder optimization settings and vary from "ultrafast" to "veryslow". Your command could then look like this:

ffmpeg -i input.wmv -c:v libx264 -preset ultrafast out.mp4

It should run faster than without the preset. The only drawback is that it doesn't achieve as good quality for the same compression rates in comparison to, for example, -preset veryslow.

Apart from that, there's not much you can do except for investing in a speedy CPU.

share|improve this answer
    
Thanks for the answer. I'm not sure if I was clear or not but if I use copy it is still very slow. I tried your command and it has processed only 4 second after 5 minutes. My video is about 75 minutes long and converting to avi takes only 15 minutes but mp4 takes several hours. –  Giorgi Aug 10 '12 at 9:59

AS I was playing (endless hours) with WMV->MP4 conversion, I found a superfast way to do it. But it has a price: a storage price. If you convert WMV to lossless, then from lossless to MP4, it does the full conversion in no time. But you need 100 times HDD space to store the lossless version, which is painful.

So it turns out you can chose from very slow or very HDD intensive versions of WMV->MP4 conversion and you have no other choice.

Converting a WMV to lossless AVI: ffmpeg.exe -i screen.wmv -vcodec ffv1 screen.avi Then converting lossless AVI to MP4 (or WebM, it doesn't matter) ffmpeg.exe -i screen.avi screen.mp4

Superfast!

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.