我正在尝试将非常大的视频压缩为可上传到 Vimeo 的内容,同时保留每周限制。我使用的任何试图降低图像质量的命令都会导致视频崩溃或无法在其他播放器中播放。我使用的代码包括:
只是压缩:
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
您的输入视频使用 RGB 颜色空间 - 相当不寻常。将ffmpeg
颜色空间转换为平面 YUV,无需子采样(yuv444p
)。不幸的是,这种色彩空间并未得到广泛支持。许多消费类程序或硬件根本无法播放它。4:4:4 子采样在广播中更为常见。
每Vimeo 的准则您可以上传 High Profile 和 Main Profile H.264 视频,这些视频仅支持 4:2:0 子采样。因此,正确的ffmpeg
命令应该是:
ffmpeg -i input.mov -c:v libx264 -crf 30 -pix_fmt yuv420p test.mp4
一些技巧:
- 添加
-profile:v high
以强制高调。 - 拥有 RGB24 编码的输入可能意味着您正在编码动画或预渲染的内容,可能来自一组单独的图像。请查看该
-tune animation
选项,它可以优化动画视频的编码。 - CRF 为 30 可能会导致质量不佳 - 我会从 23-25 开始,并且仅当视频对您来说仍然太大时才增加该值。
q:v
或者qscale
不应与 libx264 编码器一起使用,因为 libx264 编码器ffmpeg
会尝试自动选择 MP4 视频。在这里使用 CRF,就像您在第一个示例中所做的那样。