我正在尝试使用FFMPEG对非常大的帧(4096 x 4096)的视频进行转码。这是一个简短的视频-不到两分钟,但源视频文件为15.8GB。 (视频是一个动画,旨在转换到天文馆圆顶上。)
源文件是Quicktime MOV,其中包含未压缩的Photo-JPEG图像(也带有音频)。当我告诉FFMPEG将我的MOV文件转码为MP4文件时,它只是在说:
不是很有帮助,但是是的,我已经验证所有参数都是正确的和/或默认的。实际上,如果我将请求的输出大小更改为2048x2048,则一切正常。 这就是为什么我怀疑编码器中存在上限。
我烦死了。任何导致成功转码的建议将不胜感激。 (在这一点上,我也愿意考虑使用FFMPEG的替代方法。)
事实
我从脚本运行FFMPEG:
set srcFile=%1
set dstFile=%srcFile:.mov=.mp4%
ffmpeg -i %srcFile% -movflags faststart -q:a 0 -q:v 0 -pix_fmt yuv420p -sws_flags gauss -s 4096x4096 %dstFile%
输出
ffmpeg version N-50911-g9efcfbe Copyright (c) 2000-2013 the FFmpeg developers
built on Mar 13 2013 21:26:48 with gcc 4.7.2 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --ena
ble-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
libavutil 52. 19.100 / 52. 19.100
libavcodec 55. 0.100 / 55. 0.100
libavformat 55. 0.100 / 55. 0.100
libavdevice 54. 4.100 / 54. 4.100
libavfilter 3. 45.103 / 3. 45.103
libswscale 2. 2.100 / 2. 2.100
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 2.100 / 52. 2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'also-sprach-zarathustra-4k.mov':
Metadata:
major_brand : qt
minor_version : 537199360
compatible_brands: qt
creation_time : 2013-01-11 23:41:30
Duration: 00:01:40.57, start: 0.000000, bitrate: 1357694 kb/s
Stream #0:0(eng): Audio: pcm_s16be (twos / 0x736F7774), 44100 Hz, stereo, s16, 1411 kb/s
Metadata:
creation_time : 2013-01-11 23:41:30
handler_name : Apple Alias Data Handler
Stream #0:1(eng): Video: mjpeg (jpeg / 0x6765706A), yuvj420p, 4096x4096 [SAR 1:1 DAR 1:1], 1356281 kb/s, 30 fps, 30
tbr, 3k tbn, 3k tbc
Metadata:
creation_time : 2013-01-11 23:41:30
handler_name : Apple Alias Data Handler
File 'also-sprach-zarathustra-4k.mp4' already exists. Overwrite ? [y/N] y
using SAR=1/1
[libx264 @ 003b9c80] frame MB size (256x256) > level limit (36864)
[libx264 @ 003b9c80] DPB size (4 frames, 262144 mbs) > level limit (2 frames, 184320 mbs)
[libx264 @ 003b9c80] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX AVX2 FMA3 LZCNT BMI1 BMI2
x264 [error]: malloc of size 17305600 failed
Output #0, mp4, to 'also-sprach-zarathustra-4k.mp4':
Metadata:
major_brand : qt
minor_version : 537199360
compatible_brands: qt
Stream #0:0(eng): Video: h264, yuv420p, 4096x4096 [SAR 1:1 DAR 1:1], q=-1--1, 90k tbn, 30 tbc
Metadata:
creation_time : 2013-01-11 23:41:30
handler_name : Apple Alias Data Handler
Stream #0:1(eng): Audio: none, 44100 Hz, stereo, s16, 128 kb/s
Metadata:
creation_time : 2013-01-11 23:41:30
handler_name : Apple Alias Data Handler
Stream mapping:
Stream #0:1 -> #0:0 (mjpeg -> libx264)
Stream #0:0 -> #0:1 (pcm_s16be -> libvo_aacenc)
Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
PS:是的,对于那些在家中玩耍的人来说,这是2001年的主题-太空漫游。您可以在此处看到1K YouTube版本:2001 - A Fulldome Space Odyssey是的,在具有良好声音系统的天文馆中,这绝对是EPIC。
最佳答案
我认为您实际上正在遇到x264编解码器复杂度级别的限制。
http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC中的级别的简要说明
正如标准中使用的术语一样,“级别”是一组指定的约束条件,这些约束条件指示配置文件所需的解码器性能的程度。例如,配置文件中的支持级别指定了解码器可以使用的最大图片分辨率,帧速率和比特率。符合给定级别的解码器必须能够解码针对该级别和所有较低级别编码的所有比特流。
最高级别(5.2)的最大分辨率为4,096×2,304。
我会考虑使用专为这些较大格式的4K/超高清分辨率而设计的HEVC。
http://en.wikipedia.org/wiki/HEVC
HEVC的最大分辨率目前为8,192x4,320