video - FFMPEG-jpg 序列到 H.264 生成最佳结果

标签 video ffmpeg h.264 bitrate libx264

我有一个 jpg 序列,需要将其转换为 mp4,并且需要获得最佳结果。

据我了解,我需要为“ffmpeg”cmdln 提供以下内容:bitrate、minrate、maxrate 和 bufsize。

关于计算上述参数,我发现的唯一一件事是我是否有最终的输出文件大小。但考虑到我想要最好的质量,我不知道最终输出文件的大小,也不关心它会是什么。

当然我有帧率和总帧数。

这是我的 ffmpeg cmdln:

ffmpeg 
-r 24 
-start_number 0 
-i "C:\pathToSequence\%06d.jpg" 
-c copy 
-vframes 792 
-threads 16 
-pix_fmt yuv420p 
-c:v libx264 
"C:\pathToOutput\result.mp4"

序列总大小为128MB,792帧,24帧率,分辨率1280x720。

到目前为止,我曾经将以下内容添加到 ffmpeg cmdln:
-b:v 10000k -minrate 10000k -maxrate 10000k -bufsize 10000k

如果是 1080p:
-b:v 20000k -minrate 20000k -maxrate 20000k -bufsize 20000k

而且我认为,如果我输入 ffmpeg 可以处理的最大值(2147480),它将产生与上述几乎相同的结果。但我认为这是一种不好的方法(如果我错了,请纠正我)。

所以如果我需要得到最好的结果,我该如何计算(或者我可以简单地输入最大值)?

我还想您是否有其他有用的标志可以添加以取得最佳最终结果。

- 编辑 -

这是更新的命令:
O:\tools\ffmpeg -framerate 24 -start_number 0 -i "C:\share\localProcess\test\%05d.jpg" -vframes 54 -pix_fmt yuv420p -c:v libx264 -preset veryslow -qp 1 "C:\share\localProcess\result\result.mp4"

这是输出:
ffmpeg version N-72383-g7206b94 Copyright (c) 2000-2015 the FFmpeg developers
  built with gcc 4.9.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmfx --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-lzma --enable-decklink --enable-zlib
  libavutil      54. 26.100 / 54. 26.100
  libavcodec     56. 41.100 / 56. 41.100
  libavformat    56. 33.101 / 56. 33.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 16.101 /  5. 16.101
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, image2, from 'C:\share\localProcess\test\%05d.jpg':
  Duration: 00:00:02.25, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: mjpeg, yuvj444p(pc, bt470bg/unknown/unknown), 1280x720 [SAR 72:72 DAR 16:9], 24 fps, 24 tbr, 24 tbn, 24 tbc
[swscaler @ 0000000004d6bf60] deprecated pixel format used, make sure you did set range correctly
[libx264 @ 0000000004d7a9e0] using SAR=1/1
[libx264 @ 0000000004d7a9e0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
[libx264 @ 0000000004d7a9e0] profile High, level 5.0
[libx264 @ 0000000004d7a9e0] 264 - core 146 r2538 121396c - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=1 ref=16 deblock=1:0:0 analyse=0x3:0x133 me=umh subme=9 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=24 chroma_me=1 trellis=2 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=8 b_pyramid=2 b_adapt=2 b_bias=0 direct=3 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=24 scenecut=40 intra_refresh=0 rc=cqp mbtree=0 qp=1 ip_ratio=1.40 pb_ratio=1.30 aq=0
Output #0, mp4, to 'C:\share\localProcess\result\result.mp4':
  Metadata:
    encoder         : Lavf56.33.101
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=-1--1, 24 fps, 12288 tbn, 24 tbc
    Metadata:
      encoder         : Lavc56.41.100 libx264
Stream mapping:
  Stream #0:0 -> #0:0 (mjpeg (native) -> h264 (libx264))
Press [q] to stop, [?] for help
frame=   54 fps= 38 q=-1.0 Lsize=     542kB time=00:00:02.16 bitrate=2050.0kbits/s
video:541kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.251171%
[libx264 @ 0000000004d7a9e0] frame I:1     Avg QP: 0.00  size: 23629
[libx264 @ 0000000004d7a9e0] frame P:22    Avg QP: 1.00  size: 16146
[libx264 @ 0000000004d7a9e0] frame B:31    Avg QP: 2.81  size:  5623
[libx264 @ 0000000004d7a9e0] consecutive B-frames: 16.7% 29.6% 16.7%  0.0%  9.3%  0.0% 13.0% 14.8%  0.0%
[libx264 @ 0000000004d7a9e0] mb I  I16..4: 74.9% 20.2%  4.9%
[libx264 @ 0000000004d7a9e0] mb P  I16..4:  0.3%  0.1%  1.2%  P16..4:  2.7%  0.4%  0.8%  0.2%  0.1%    skip:94.2%
[libx264 @ 0000000004d7a9e0] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8:  3.0%  0.4%  0.5%  direct: 0.3%  skip:95.7%  L0:56.0% L1:40.5% BI: 3.5%
[libx264 @ 0000000004d7a9e0] 8x8 transform intra:16.5% inter:18.4%
[libx264 @ 0000000004d7a9e0] direct mvs  spatial:54.8% temporal:45.2%
[libx264 @ 0000000004d7a9e0] coded y,uvDC,uvAC intra: 33.9% 49.8% 49.5% inter: 1.3% 2.9% 2.9%
[libx264 @ 0000000004d7a9e0] i16 v,h,dc,p: 79% 13%  4%  4%
[libx264 @ 0000000004d7a9e0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 12% 22% 48%  2%  4%  6%  3%  1%  2%
[libx264 @ 0000000004d7a9e0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 13% 13% 43%  5%  6%  4%  5%  5%  6%
[libx264 @ 0000000004d7a9e0] i8c dc,h,v,p: 78% 12%  7%  3%
[libx264 @ 0000000004d7a9e0] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0000000004d7a9e0] ref P L0: 65.7%  2.4%  8.9%  4.5%  2.3%  3.0%  2.8%  3.9%  3.5%  0.8%  0.3%  0.5%  0.3%  0.5%  0.2%  0.3%
[libx264 @ 0000000004d7a9e0] ref B L0: 76.9% 12.0%  3.4%  0.7%  3.6%  0.5%  2.1%  0.4%  0.1%  0.0%  0.1%  0.0%  0.1%  0.1%
[libx264 @ 0000000004d7a9e0] ref B L1: 98.2%  1.8%
[libx264 @ 0000000004d7a9e0] kb/s:1966.80

Link to download JPG sequence .

Link to download the result .

最佳答案

只需使用 -crf-preset (使用 libx264 时)

  • 使用最高-crf仍然可以为您提供可接受的质量的值(value)。范围是 0-51 的对数刻度:0 是无损(大文件),18 是“视觉无损”或几乎如此,23 是默认值,最差是 51。
  • 使用最慢的 -preset你有耐心:超快,超快,非常快,更快,快,中,慢,慢,非常慢。默认为“中”。

  • FFmpeg Wiki: H.264 Video Encoding Guide了解更多信息。

    其他的东西
  • 作为输入选项,您应该使用 -framerate而不是 -r使用 image file demuxer 时.
  • libx264 会自动选择最佳线程数,因此使用 -threads 手动强制某个值可能不是最理想的。
  • -start_number 0是多余的。
  • -c copy-c:v libx264在您的示例中是互斥的(您只有一个输入流,它是一个视频流),所以在这种情况下 -c copy被忽略。
  • 考虑添加 -movflags +faststart如果您的视频将通过渐进式下载观看(例如通常在浏览器或手机中观看的人)。
  • 关于video - FFMPEG-jpg 序列到 H.264 生成最佳结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33117023/

    相关文章:

    html - 视频播放加载,然后重定向到index.html

    video - 使用 ffmpeg 加速部分视频

    android - 是否有任何免费/开源库用于压缩视频文件/减少 android 中视频文件的文件大小?

    ffmpeg - 多个字幕轨道未编码到 mov 文件中

    video-streaming - 通过 RTP 将 H.264 视频从 Live555 流式传输到 VLC

    java - 如何将视频输出到Java中的纹理?

    ffmpeg 更改宽高比不成功

    ffmpeg - 在 openshift online 上安装 ffmpeg 时出现未绑定(bind)变量错误

    video - 某些解码器的 H.264 帧内存泄漏

    udp - 无法显示通过 UDP 使用 GStreamer 流式传输的 h.264 网络摄像头图像