我正在尝试使用FFMPEG对具有非常大的帧(4096 x 4096)的视频进行转码.这是一段短视频 - 不到两分钟,但源视频文件是15.8GB.(视频是一个设计用于投射到天文馆圆顶上的动画.)
源文件是包含未压缩的Photo-JPEG图像的Quicktime MOV(也带有音频).当我告诉FFMPEG将我的MOV文件转码为MP4文件时,它只是说:
打开输出流#0的编码器时出错:0 - 可能是不正确的参数,如bit_rate,rate,width或height
不是很有帮助,但是,我已经验证了所有参数都是正确的和/或默认的.事实上,如果我将请求的输出大小更改为2048x2048,那么一切正常. 这就是为什么我怀疑编码器有一个上限.
我是kerflummoxed.任何导致转码成功的建议都将受到高度赞赏.(此时我也愿意考虑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%
Run Code Online (Sandbox Code Playgroud)
输出
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
Run Code Online (Sandbox Code Playgroud)
PS:是的,对于那些在家里玩的人来说,它是2001年的主题- 太空漫游.你可以在这里看到一个1K的YouTube版本: 2001 - 一个Fulldome Space Odyssey 是的,在一个拥有良好音响系统的天文馆里,它绝对是EPIC.
小智 8
我认为你实际上遇到了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
我怀疑你的问题在这里被暗示:
x264 [error]: malloc of size 17305600 failed
Run Code Online (Sandbox Code Playgroud)
这是32位版本ffmpeg
吗?如果是这样,我担心你可能会失去运气.4k视频处理确实需要> 4 GB的内存.最好切换到64位版本,然后再试一次.
当然,您实际上也需要在计算机中有足够的可用内存.它可能超过4 GB,具体取决于您的x264设置.
归档时间: |
|
查看次数: |
13772 次 |
最近记录: |