1

Я пытаюсь сжать очень большое видео до чего-то загружаемого в Vimeo, сохраняя недельный лимит. Любая команда, которую я использую, которая пытается снизить качество изображения, приводит к тому, что видео вызывает сбой VLC или просто не воспроизводится в других проигрывателях. Коды, которые я использовал, включают в себя:

Просто сжимаю:

ffmpeg -i test.mp4 -vcodec libx264 -crf 30 test.mp4

Преобразование .mov в .mp4 и сжатие:

ffmpeg -i test.mov -qscale 30 video2.mp4

Есть идеи, почему это происходит? Я работаю в OSX Bash (Mountain Lion).

Последний случай привел к этому отчету:

unknown-4c:8d:79:e6:e3:fc:birthday_int3 robinedwards$ ffmpeg -i test.mov -q:v 30 video2.mp4
ffmpeg version 1.1.2 Copyright (c) 2000-2013 the FFmpeg developers
  built on May 14 2013 16:56:21 with Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/1.1.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --cc=cc --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid
  libavutil      52. 13.100 / 52. 13.100
  libavcodec     54. 86.100 / 54. 86.100
  libavformat    54. 59.106 / 54. 59.106
  libavdevice    54.  3.102 / 54.  3.102
  libavfilter     3. 32.100 /  3. 32.100
  libswscale      2.  1.103 /  2.  1.103
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 537199360
    compatible_brands: qt  
    creation_time   : 2013-07-14 15:44:54
  Duration: 00:00:21.77, start: 0.000000, bitrate: 124460 kb/s
    Stream #0:0(eng): Video: png (png  / 0x20676E70), rgb24, 1280x720, 124459 kb/s, 30 fps, 30 tbr, 3k tbn, 3k tbc
    Metadata:
      creation_time   : 2013-07-14 15:44:54
      handler_name    : Apple Alias Data Handler
File 'video2.mp4' already exists. Overwrite ? [y/N] y
using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX
[libx264 @ 0x7fb71b82ec00] profile High 4:4:4 Predictive, level 3.1, 4:4:4 8-bit
[libx264 @ 0x7fb71b82ec00] 264 - core 125 - H.264/MPEG-4 AVC codec - Copyleft 2003-2012 - 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=4 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=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=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.40 aq=1:1.00
Output #0, mp4, to 'video2.mp4':
  Metadata:
    major_brand     : qt  
    minor_version   : 537199360
    compatible_brands: qt  
    encoder         : Lavf54.59.106
    Stream #0:0(eng): Video: h264 ([33][0][0][0] / 0x0021), yuv444p, 1280x720, q=-1--1, 15360 tbn, 30 tbc
    Metadata:
      creation_time   : 2013-07-14 15:44:54
      handler_name    : Apple Alias Data Handler
Stream mapping:
  Stream #0:0 -> #0:0 (png -> libx264)
Press [q] to stop, [?] for help
frame=  653 fps= 41 q=-1.0 Lsize=    3211kB time=00:00:21.70 bitrate=1212.2kbits/s    
video:3203kB audio:0kB subtitle:0 global headers:0kB muxing overhead 0.260798%
[libx264 @ 0x7fb71b82ec00] frame I:3     Avg QP:16.09  size: 90551
[libx264 @ 0x7fb71b82ec00] frame P:203   Avg QP:22.52  size: 12759
[libx264 @ 0x7fb71b82ec00] frame B:447   Avg QP:28.39  size:   933
[libx264 @ 0x7fb71b82ec00] consecutive B-frames:  8.6%  0.3%  0.5% 90.7%
[libx264 @ 0x7fb71b82ec00] mb I  I16..4: 23.8% 30.3% 45.9%
[libx264 @ 0x7fb71b82ec00] mb P  I16..4:  0.2%  0.7%  0.5%  P16..4: 17.2%  6.8%  5.7%  0.0%  0.0%    skip:68.8%
[libx264 @ 0x7fb71b82ec00] mb B  I16..4:  0.0%  0.1%  0.0%  B16..8: 14.5%  0.5%  0.2%  direct: 0.6%  skip:84.2%  L0:36.1% L1:61.8% BI: 2.1%
[libx264 @ 0x7fb71b82ec00] 8x8 transform intra:43.6% inter:62.5%
[libx264 @ 0x7fb71b82ec00] coded y,u,v intra: 51.4% 2.6% 27.7% inter: 6.4% 0.0% 2.6%
[libx264 @ 0x7fb71b82ec00] i16 v,h,dc,p: 52% 42%  5%  0%
[libx264 @ 0x7fb71b82ec00] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu:  9% 18% 35%  6%  7%  7%  6%  6%  6%
[libx264 @ 0x7fb71b82ec00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 13% 24% 23%  6%  9%  6%  9%  3%  7%
[libx264 @ 0x7fb71b82ec00] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x7fb71b82ec00] ref P L0: 72.4%  9.8% 14.2%  3.6%
[libx264 @ 0x7fb71b82ec00] ref B L0: 90.1%  8.6%  1.4%
[libx264 @ 0x7fb71b82ec00] ref B L1: 92.4%  7.6%
[libx264 @ 0x7fb71b82ec00] kb/s:1205.09

1 ответ1

3

Ваше входное видео использует цветовое пространство RGB - довольно необычно. Что происходит, так это то, что ffmpeg преобразует это цветовое пространство в планарную YUV без подвыборки (yuv444p). К сожалению, это цветовое пространство широко не поддерживается. Многие потребительские программы или аппаратные средства просто не будут играть в нее. Подвыбор 4:4:4 более распространен в вещании.

В соответствии с рекомендациями Vimeo вы можете загружать видео высокого профиля и основного профиля H.264, и они поддерживают только субсэмплинг 4:2:0. Поэтому правильная команда ffmpeg будет такой:

ffmpeg -i input.mov -c:v libx264 -crf 30 -pix_fmt yuv420p test.mp4

Несколько советов:

  • Добавьте -profile:v high чтобы вызвать High Profile.
  • Наличие ввода в кодировке RGB24 может означать, что вы кодируете анимацию или что-то предварительно отрендеренное, возможно, из отдельного набора изображений. Посмотрите на -tune animation , который оптимизирует кодирование для анимированного видео.
  • CRF 30 может привести к плохому качеству - я начну с 23–25 и увеличу значение, только если видео все еще слишком велико для вас.
  • q:v или qscale не следует использовать с кодировщиком libx264, что ffmpeg пытается автоматически выбрать для видео MP4. Используйте CRF здесь, как вы сделали в своем первом примере.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .