1

not entirely sure if I should post this on askubuntu or stackoverflow.

I'm setting up a website where users can upload videos and share them. I'm using avconv to reduce the video size and save it twice, once as an mp4 and again as a webm.

Uploading a .MOV from a phone, the video conversion is quick and manageable.

Uploading a .mp4 from a Samsung Galaxy S3, the video conversion to webm is also quick. But, the conversion to another mp4 takes FOREVER - literally hours. Why? Is anyone able to shed light on the problem?

My avconv output is below.

avconv -i /path/video.mp4 -c:v libx264 -vf transpose=1,transpose=1,transpose=1 -s 640x480 /path/video-out.mp4
avconv version 0.8.17-4:0.8.17-0ubuntu0.12.04.1, Copyright (c) 2000-2014 the Libav developers
built on Mar 16 2015 13:26:50 with gcc 4.6.3
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/path/video.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 0
    compatible_brands: isom3gp4
    creation_time   : 2015-09-04 15:08:21
Duration: 00:00:07.76, start: 0.000000, bitrate: 11756 kb/s
Stream #0.0(eng): Video: h264 (Constrained Baseline), yuv420p, 1280x720, 11967 kb/s, 29.81 fps, 90k tbr, 90k tbn, 180k tbc
Metadata:
  creation_time   : 2015-09-04 15:08:21
Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, s16, 119 kb/s
Metadata:
  creation_time   : 2015-09-04 15:08:21
File '/path/video-out.mp4' already exists. Overwrite ? [y/N] y
[buffer @ 0xc3d580] w:1280 h:720 pixfmt:yuv420p
[scale @ 0xc3dac0] w:1280 h:720 fmt:yuv420p -> w:640 h:480 fmt:yuv420p flags:0x4
[transpose @ 0xc3e280] w:640 h:480 dir:1 -> w:480 h:640 rotation:clockwise vflip:0
[transpose @ 0xc3e7c0] w:480 h:640 dir:1 -> w:640 h:480 rotation:clockwise vflip:0
[transpose @ 0xc3ede0] w:640 h:480 dir:1 -> w:480 h:640 rotation:clockwise vflip:0
[libx264 @ 0xc2b100] MB rate (108000000) > level limit (983040)
[libx264 @ 0xc2b100] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX
[libx264 @ 0xc2b100] profile Main, level 5.1
[libx264 @ 0xc2b100] 264 - core 120 r2151 a3f4407 - H.264/MPEG-4 AVC codec - Copyleft 2003-2011 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x1:0x111 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=1 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=3 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=0 b_adapt=1 b_bias=0 direct=1 weightb=0 open_gop=1 weightp=2 keyint=250 keyint_min=25 scenecut=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.25 aq=1:1.00
Output #0, mp4, to '/path/video-out.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 0
    compatible_brands: isom3gp4
    creation_time   : 2015-09-04 15:08:21
    encoder         : Lavf53.21.1
    Stream #0.0(eng): Video: libx264, yuv420p, 480x640, q=-1--1, 180k tbn, 90k tbc
    Metadata:
      creation_time   : 2015-09-04 15:08:21
    Stream #0.1(eng): Audio: libvo_aacenc, 48000 Hz, stereo, s16, 200 kb/s
    Metadata:
      creation_time   : 2015-09-04 15:08:21
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> libx264)
  Stream #0:1 -> #0:1 (aac -> libvo_aacenc)
Press ctrl-c to stop encoding

Here's an example frame output:

frame=124398 fps=142 q=33.0 size=   16885kB time=1.38 bitrate=100110.2kbits/s dup=124356 drop=0

I've had the process running the whole time I've been writing this question, and so far it's done... 22 frames.

What could be the problem?

EDIT: And this isn't a huge file, either. It's something like 11 megs, 1280 x 720.

EDIT AGAIN: Since posting the question, the process has just started hanging, and won't move past frame... 32 or so.

EDIT AGAIN: Hard rebooted the server in case the CPU was just getting overwhelmed with other processes. No dice, same problem.

  • Hey - just tried it, and it does seem to be fixing the problem! Awesome! Only thing is, queuing up transposes seems to have different results in ffmpeg than in avconv, which is odd, but I can figure that out again no problem. Thanks for all your help! Do you want to leave a 'real' answer so I can checkmark it? – CGriffin Sep 4 '15 at 18:47
  • For anyone reading this after the fact, the 'problem' is actually an improvement - FFmpeg automatically rotates video to correspond with the 'Orientation' exif data, whereas I wrote my code to manually read the exif data and rotate appropriately, essentially meaning the video was being double-rotated. – CGriffin Sep 4 '15 at 19:50
3

Get ffmpeg

avconv and the counterfeit "ffmpeg" from Libav are buggy. Get a recent ffmpeg build. You have 4 main options:

  • Download a static build. Easy and fast, but can't be customized and does not support non-free stuff such as some encoders. Non-interfering with the system.

  • Compile. You can follow a copy & paste step-by-step guide. It will not interfere with the system.

  • Use a PPA (for Trusty users).

  • Upgrade to Ubuntu Vivid 15.04 or newer. Vivid contains ffmpeg 2.5.8 from FFmpeg. However, FFmpeg development is so active that you may still want to use a static build or compile.

Usage of static build

After you download and extract it you can use it like this (assuming it's in the Downloads directory in your home).

  • Include the full path:

    /home/user/Downloads/ffmpeg -i …
    

    or

    ~/Downloads/ffmpeg -i …
    
  • Or navigate to the directory containing ffmpeg and run:

    ./ffmpeg -i …
    
  • Or move it to a directory in your PATH. The ~/bin directory is one such location (assuming the same user will be executing ffmpeg).

    1. Make a directory named bin in your home directory.
    2. Move the ffmpeg binary to ~/bin.
    3. Either run source ~/.profile, or simply log out then log in.
    4. Now just run ffmpeg command in any terminal and it should just work.
  • For the record, this is possibly the best and most detailed 'getting started' guide I've seen for FFmpeg. Obviously there are more installation guides that go into detail about each element, but for a novice to command line and Ubuntu, this is an EXCEPTIONALLY handy reference. Permanently bookmarking for my own future reference and to point others to look at. – CGriffin Sep 4 '15 at 19:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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