当我尝试使用ffmpeg
转换为mp4时,有时会出现问题。我遇到问题Error while opening encoder for output stream #0:1 - maybe incorrect parameters such as bit_rate, rate, width or height
。
这是命令:
ffmpeg -y -i input.mp4 -i watermark.png -filter_complex 'scale=-2:360,overlay=(main_w-overlay_w)-20:(main_h-overlay_h)-20' -codec:v libx264 -profile:v main -preset slow -b:v 300k -maxrate 300k -bufsize 600k -threads 0 -codec:a aac -strict experimental -b:a 128k -crf 20 output.mp4 1> output.log 2>&1
这里是错误日志:
ffmpeg version 2.4.3 Copyright (c) 2000-2014 the FFmpeg developers
built on Nov 16 2014 22:36:57 with gcc 4.8.2 (GCC)
configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/man --docdir=/usr/doc/ffmpeg-2.4.3 --enable-gpl --enable-version3 --enable-avfilter --enable-avresample --enable-libass --enable-libdc1394 --enable-libgsm --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libv4l2 --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libzvbi --enable-postproc --enable-runtime-cpudetect --enable-vaapi --enable-vdpau --enable-memalign-hack --enable-pthreads --enable-x11grab --enable-bzlib --enable-zlib --enable-shared --enable-static --disable-debug --arch=x86_64 --enable-pic --extra-cflags='-I/tmp/build/tmp-ffmpeg/ffmpegdeps/usr/include -DRUNTIME_CPUDETECT' --extra-ldflags='-L/tmp/build/tmp-ffmpeg/ffmpegdeps/usr/lib64 -ldl -lssl -lcrypto -lz -lusb' --pkg-config-flags=--static
libavutil 54. 7.100 / 54. 7.100
libavcodec 56. 1.100 / 56. 1.100
libavformat 56. 4.101 / 56. 4.101
libavdevice 56. 0.100 / 56. 0.100
libavfilter 5. 1.100 / 5. 1.100
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 0.100 / 3. 0.100
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 0.100 / 53. 0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf56.15.102
Duration: 00:00:06.76, start: 0.000000, bitrate: 1856 kb/s
Stream #0:0(eng): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 720x480, 1804 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 16000 Hz, mono, fltp, 54 kb/s (default)
Metadata:
handler_name : SoundHandler
Input #1, png_pipe, from 'watermark.png':
Duration: N/A, bitrate: N/A
Stream #1:0: Video: png, rgba, 120x35, 25 tbr, 25 tbn, 25 tbc
[libx264 @ 0x2179d80] using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64 SlowShuffle
[libx264 @ 0x2179d80] profile Main, level 3.0
[libx264 @ 0x2179d80] 264 - core 142 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=5 deblock=1:0:0 analyse=0x1:0x111 me=umh subme=8 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=3 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=2 b_bias=0 direct=3 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=50 rc=crf mbtree=1 crf=20.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=300 vbv_bufsize=600 crf_max=0.0 nal_hrd=none filler=0 ip_ratio=1.40 aq=1:1.00
[aac @ 0x217ba40] Too many bits per frame requested
Output #0, mp4, to 'output.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf56.15.102
Stream #0:0: Video: h264 (libx264), yuv420p, 540x360, q=-1--1, 300 kb/s, 30 fps, 30 tbn, 30 tbc (default)
Metadata:
encoder : Lavc56.1.100 libx264
Stream #0:1(eng): Audio: aac, 0 channels, 128 kb/s (default)
Metadata:
handler_name : SoundHandler
encoder : Lavc56.1.100 aac
Stream mapping:
Stream #0:0 (h264) -> scale (graph 0)
Stream #1:0 (png) -> overlay:overlay (graph 0)
overlay (graph 0) -> Stream #0:0 (libx264)
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Error while opening encoder for output stream #0:1 - maybe incorrect parameters such as bit_rate, rate, width or height
答案 0 :(得分:1)
相关讯息:
[aac @ 0x217ba40] Too many bits per frame requested […] Error while opening encoder for output stream #0:1
这来自名为“aac
”的原生FFmpeg AAC编码器。你的选择:
-c:a copy
)。ffmpeg
,因为您的构建似乎只支持本机FFmpeg AAC编码器。-b:a
)。-ar
)。其他说明
-b:v
和-crf
是互斥的:您应该只选择一个。在您的情况下,-b:v
被忽略。
-threads 0
是此编码器的默认值,这意味着x264将自动选择适当数量的线程,因此您可以删除此选项。
如果目标播放器或设备不支持编码器自动选择的任何配置文件,则只需设置H.264配置文件(-profile:v
)。
FFmpeg 2.4.3被认为是旧的。如果可能,建议一般用户使用当前git master中的ffmpeg
(意味着使用最新代码中的构建)。 Downloading a static build是一种简单的方法。
Stack Overflow仅用于编程问题。如果您有其他ffmpeg
cli使用问题,则应在超级用户处询问。
答案 1 :(得分:0)
您的AAC音频流#0:1似乎存在问题。它在控制台输出中显示 0个通道。
尝试将-analyzeduration
和-probesize
添加到您的命令中以增加分析时间并查看它是否检测到它们或完全丢弃音频流/检查源文件的完整性。
探测整数(输入)
设置探测大小(以字节为单位),即大小 要分析的数据以获取流信息。价值会更高 能够检测更多信息,以防它分散到 流,但会增加延迟。必须是不小于的整数 32.默认情况下为5000000。
analyzeuration integer(输入)
指定多少微秒 分析探究输入。较高的值可以检测更多 准确的信息,但会增加延迟。它默认为 5,000,000微秒= 5秒。