Download
Assuming the downloaded video is the same as the one you'd watch in your browser:
$ youtube-dl https://vimeo.com/123456789
strings
& grep
Assuming x264
is used to encode, and the encoding settings weren't stripped out, you can see what version was used and view some of the particular settings. However, it does not mean that you should attempt to emulate everything verbatim.
$ strings input.mp4 | grep x264
x264 - core 144 r11 40bb568 - H.264/MPEG-4 AVC codec - Copyleft
2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=3
deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00
mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0
deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=72
lookahead_threads=8 sliced_threads=0 nr=0 decimate=1 interlaced=0
bluray_compat=0 stitchable=1 constrained_intra=0 bframes=3 b_pyramid=2
b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2
keyint=infinite keyint_min=25 scenecut=40 intra_refresh=0
rc_lookahead=40 rc=crf mbtree=1 crf=20.0 qcomp=0.60 qpmin=5 qpmax=69
qpstep=4 vbv_maxrate=4950 vbv_bufsize=13500 crf_max=0.0 nal_hrd=none
filler=0 ip_ratio=1.40 aq=1:1.00
It seems as if some (older?) videos have been stripped of this info.
Some videos seem to use 2pass rate control and others seem to use crf. I'm guessing the crf method is their current one. Both methods are using VBV (in ffmpeg
this is set with -maxrate
and -bufsize
) but that doesn't mean you need to.
Looks like the medium preset was used, but there is no reason for you to use the same exact preset. If you have the patience for a slower preset, then use a slower preset.
You can see some additional info about the video stream, audio stream, and container format with: ffprobe -v error -show_format -show_streams input.mp4
.
Encoding example
There is no need to overcomplicate things, so for simplicity, and "to get the closest result to Vimeo quality", just use -crf 20
with the slowest -preset
that you have patience for. Or even better, use the highest crf value that still looks good to you.
This example is assuming your build supports the AAC audio encoder libfdk_aac
. If not then you can use the native FFmpeg AAC encoder: -c:a aac -strict experimental -b:a 192k
.
ffmpeg -i input -c:v libx264 -preset slower -crf 20 -c:a libfdk_aac -vbr 4 \
-ac 2 -movflags +faststart output.mp4
Also see