Video FFMPEG jpg序列到H.264生成最佳结果
我有一个jpg序列,我需要转换成mp4,我需要得到最好的结果 据我所知,我需要提供以下“ffmpeg”cmdln:bitrate、minrate、maxrate和bufsize 关于计算上述参数,我发现的唯一一件事是,我是否有最终的输出文件大小。但是考虑到我想要最好的质量,我不知道最终的输出文件大小,我也不在乎它会是什么 当然我有帧率和总帧数 这是我的ffmpeg cmdln:Video FFMPEG jpg序列到H.264生成最佳结果,video,ffmpeg,h.264,bitrate,libx264,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.
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"
-b:v 10000k -minrate 10000k -maxrate 10000k -bufsize 10000k
序列的总大小为128MB,792帧,24帧速率,分辨率为1280x720
到目前为止,我一直将以下内容添加到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"
-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
.只需使用-crf
和-preset
(使用libx264时)
- 使用最高的
值,该值仍能提供可接受的质量。范围是0-51的对数刻度:0是无损的(大文件),18是“视觉无损”或几乎如此,23是默认值,最坏的是51-crf
- 使用你有耐心的最慢的预设:超快、超快、极快、快、快、中、慢、慢、极速。默认值为“中等”
- 作为输入选项,在使用时应使用
而不是-framerate
-r
- libx264会自动选择一个最佳的线程数,因此使用
手动强制某个值可能不是最佳值-threads
是多余的-开始编号0
和-c copy
在您的示例中是互斥的(您只有一个输入流,它是一个视频流),因此在这种情况下,将忽略-c:v libx264
-c copy
- 如果您的视频将通过渐进式下载方式观看(例如通常在浏览器或手机中观看),请考虑添加
-movflags+faststart
ffmpeg-framerate 24-start\u number 0-I“C:\pathToSequence\%06d.jpg”-vframes 792-pix\u fmt yuv420p-C:v libx264-preset veryslow-qp 1“C:\pathToOutput\result.mp4”
start\u编号是必需的,因为有时它是另外的。我尝试了-crf 0
,结果不起作用,-crf 1
也不太好,而且在ref链接中,他们说-qp
更好(-qp 0
不起作用,而-qp 1起作用)。我的输出结果将在手机、流媒体、计算机、电视等设备上查看。问题是,有时输出不完美,有点模糊。@Ziki如果没有命令、完整的控制台输出和一些示例输入文件,我无能为力。