使用ffmpeg处理流的解码数据时出错

时间:2018-06-01 18:50:57

标签: ffmpeg

我使用以下命令:

ffmpeg

    -i "video1a.flv"
    -i "video1b.flv"
    -i "video1c.flv"
    -i "video2a.flv"
    -i "video3a.flv"
    -i "video4a.flv"
    -i "video4b.flv"
    -i "video4c.flv"
    -i "video4d.flv"
    -i "video4e.flv"

    -filter_complex

    nullsrc=size=640x480[base];
    [0:v]setpts=PTS-STARTPTS+0.12/TB,scale=320x240[1a];
    [1:v]setpts=PTS-STARTPTS+3469.115/TB,scale=320x240[1b];
    [2:v]setpts=PTS-STARTPTS+7739.299/TB,scale=320x240[1c];
    [5:v]setpts=PTS-STARTPTS+4390.466/TB,scale=320x240[4a];
    [6:v]setpts=PTS-STARTPTS+6803.937/TB,scale=320x240[4b];
    [7:v]setpts=PTS-STARTPTS+8242.005/TB,scale=320x240[4c];
    [8:v]setpts=PTS-STARTPTS+9811.577/TB,scale=320x240[4d];
    [9:v]setpts=PTS-STARTPTS+10765.19/TB,scale=320x240[4e];
    [base][1a]overlay=eof_action=pass[o1];
    [o1][1b]overlay=eof_action=pass[o1];
    [o1][1c]overlay=eof_action=pass:shortest=1[o1];
    [o1][4a]overlay=eof_action=pass:x=320:y=240[o4];
    [o4][4b]overlay=eof_action=pass:x=320:y=240[o4];
    [o4][4c]overlay=eof_action=pass:x=320:y=240[o4];
    [o4][4d]overlay=eof_action=pass:x=320:y=240[o4];
    [o4][4e]overlay=eof_action=pass:x=320:y=240;
    [0:a]asetpts=PTS-STARTPTS+0.12/TB,aresample=async=1,pan=1c|c0=c0,apad[a1a];
    [1:a]asetpts=PTS-STARTPTS+3469.115/TB,aresample=async=1,pan=1c|c0=c0,apad[a1b];
    [2:a]asetpts=PTS-STARTPTS+7739.299/TB,aresample=async=1,pan=1c|c0=c0[a1c];
    [3:a]asetpts=PTS-STARTPTS+82.55/TB,aresample=async=1,pan=1c|c0=c0,apad[a2a];
    [4:a]asetpts=PTS-STARTPTS+2687.265/TB,aresample=async=1,pan=1c|c0=c0,apad[a3a];
    [a1a][a1b][a1c][a2a][a3a]amerge=inputs=5

    -c:v libx264 -c:a aac -ac 2 output.mp4

这是来自ffmpeg的流数据:

Input #0
    Stream #0:0: Video: vp6f, yuv420p, 160x128, 1k tbr, 1k tbn
    Stream #0:1: Audio: nellymoser, 11025 Hz, mono, flt
Input #1
    Stream #1:0: Audio: nellymoser, 11025 Hz, mono, flt
    Stream #1:1: Video: vp6f, yuv420p, 160x128, 1k tbr, 1k tbn
Input #2
    Stream #2:0: Audio: nellymoser, 11025 Hz, mono, flt
    Stream #2:1: Video: vp6f, yuv420p, 160x128, 1k tbr, 1k tbn
Input #3
    Stream #3:0: Audio: nellymoser, 11025 Hz, mono, flt
Input #4
    Stream #4:0: Audio: nellymoser, 11025 Hz, mono, flt
Input #5
    Stream #5:0: Video: vp6f, yuv420p, 1680x1056, 1k tbr, 1k tbn
Input #6
    Stream #6:0: Video: vp6f, yuv420p, 1680x1056, 1k tbr, 1k tbn
Input #7
    Stream #7:0: Video: vp6f, yuv420p, 1680x1056, 1k tbr, 1k tbn
Input #8
    Stream #8:0: Video: vp6f, yuv420p, 1680x1056, 1k tbr, 1k tbn
Input #9
    Stream #9:0: Video: vp6f, yuv420p, 1680x1056, 1k tbr, 1k tbn
Stream mapping:
  Stream #0:0 (vp6f) -> setpts
  Stream #0:1 (nellymoser) -> asetpts
  Stream #1:0 (nellymoser) -> asetpts
  Stream #1:1 (vp6f) -> setpts
  Stream #2:0 (nellymoser) -> asetpts
  Stream #2:1 (vp6f) -> setpts
  Stream #3:0 (nellymoser) -> asetpts
  Stream #4:0 (nellymoser) -> asetpts
  Stream #5:0 (vp6f) -> setpts
  Stream #6:0 (vp6f) -> setpts
  Stream #7:0 (vp6f) -> setpts
  Stream #8:0 (vp6f) -> setpts
  Stream #9:0 (vp6f) -> setpts
  overlay -> Stream #0:0 (libx264)
  amerge -> Stream #0:1 (aac)

这是错误:

Press [q] to stop, [?] for help

Enter command: <target>|all <time>|-1 <command>[ <argument>]

Parse error, at least 3 arguments were expected, only 1 given in string 'ho Oscar'
[Parsed_amerge_44 @ 0a7238c0] No channel layout for input 1
[Parsed_amerge_44 @ 0a7238c0] Input channel layouts overlap: output layout will be determined by the number of distinct input channels
[Parsed_pan_27 @ 07681880] Pure channel mapping detected: 0
[Parsed_pan_31 @ 07681b40] Pure channel mapping detected: 0
[Parsed_pan_35 @ 0a7232c0] Pure channel mapping detected: 0
[Parsed_pan_38 @ 0a7234c0] Pure channel mapping detected: 0
[Parsed_pan_42 @ 0a723740] Pure channel mapping detected: 0
[libx264 @ 069e8a40] using SAR=1/1
[libx264 @ 069e8a40] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 069e8a40] profile High, level 3.0
[libx264 @ 069e8a40] 264 - core 155 r2901 7d0ff22 - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=15 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'output.mp4':
  Metadata:
    canSeekToEnd    : false
    encoder         : Lavf58.16.100
    Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p(progressive), 640x480 [SAR 1:1 DAR 4:3], q=-1--1, 25 fps, 12800 tbn, 25 tbc (default)
    Metadata:
      encoder         : Lavc58.19.102 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
    Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 11025 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      encoder         : Lavc58.19.102 aac
frame=  200 fps=0.0 q=28.0 size=       0kB time=00:00:07.82 bitrate=   0.0kbits/s speed=15.6x    
...   
frame=30132 fps=497 q=28.0 size=   29952kB time=00:20:05.14 bitrate= 203.6kbits/s speed=19.9x    
Error while filtering: Cannot allocate memory
Failed to inject frame into filter network: Cannot allocate memory
Error while processing the decoded data for stream #2:1
[libx264 @ 069e8a40] frame I:121   Avg QP: 8.83  size:  7052
[libx264 @ 069e8a40] frame P:7609  Avg QP:18.33  size:  1527
[libx264 @ 069e8a40] frame B:22367 Avg QP:25.44  size:   112
[libx264 @ 069e8a40] consecutive B-frames:  0.6%  0.7%  1.0% 97.8%
[libx264 @ 069e8a40] mb I  I16..4: 75.7% 18.3%  6.0%
[libx264 @ 069e8a40] mb P  I16..4:  0.3%  0.7%  0.1%  P16..4: 10.6%  3.3%  1.6%  0.0%  0.0%    skip:83.4%
[libx264 @ 069e8a40] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8:  3.2%  0.2%  0.0%  direct: 0.2%  skip:96.5%  L0:47.7% L1:48.2% BI: 4.0%
[libx264 @ 069e8a40] 8x8 transform intra:37.4% inter:70.2%
[libx264 @ 069e8a40] coded y,uvDC,uvAC intra: 38.9% 46.1% 28.7% inter: 1.7% 3.3% 0.1%
[libx264 @ 069e8a40] i16 v,h,dc,p: 78%  8%  4% 10%
[libx264 @ 069e8a40] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 33% 20% 12%  3%  6%  8%  6%  6%  7%
[libx264 @ 069e8a40] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 37% 22%  9%  4%  6%  7%  5%  5%  4%
[libx264 @ 069e8a40] i8c dc,h,v,p: 60% 16% 17%  7%
[libx264 @ 069e8a40] Weighted P-Frames: Y:0.7% UV:0.6%
[libx264 @ 069e8a40] ref P L0: 65.5% 12.3% 14.2%  8.0%  0.0%
[libx264 @ 069e8a40] ref B L0: 90.2%  7.5%  2.3%
[libx264 @ 069e8a40] ref B L1: 96.4%  3.6%
[libx264 @ 069e8a40] kb/s:99.58
[aac @ 069e9600] Qavg: 65519.982
[aac @ 069e9600] 2 frames left in the queue on closing
Conversion failed!

我想弄清楚如何解决这些错误:

Error while filtering: Cannot allocate memory
Failed to inject frame into filter network: Cannot allocate memory
Error while processing the decoded data for stream #2:1

观察#1

如果我在流#2:1上运行以下命令:

ffmpeg -i video1c.flv -vcodec libx264 -acodec aac video1c.mp4

文件转换正常,没有错误。

观察#2

在video1c.flv上运行MediaInfo(流#2)显示以下内容:

Format: Flash Video
Video Codecs: On2 VP6
Audio Codecs: Nellymoser

在解决此错误时,我们将不胜感激。

更新#1

我已尝试按要求将过滤器图表拆分为两个但我收到相同的错误:

Error while filtering: Cannot allocate memory
Failed to inject frame into filter network: Cannot allocate memory
Error while processing the decoded data for stream #1:1

然而,我确实发现了一些东西,如果我尝试使用VLC Media Player调出上面提到的#1:1流(video1b.flv),我可以听到音频文件,但我看不到视频,我收到此错误消息:

No suitable decoder module:
VLC Does not support the audio or video format "undf".
Unfortunately there is no way for you to fix this.

更新#2

上述错误与32位版本的ffmpeg有关。我切换到64位机器,现在正在运行64位ffmpeg版本ffmpeg-20180605-b748772-win64-static。

现在我不再收到以下错误:

Error while processing the decoded data for stream #1:1

但是,我有一个新错误。运行大约一个小时后,我收到以下错误:

av_interleaved_write_frame(): Cannot allocate memory
[mp4 @ 000000000433f080] Application provided duration: 3327365388930198318
/ timestamp: 17178820096 is out of range for mov/mp4 format

我还尝试首先按照建议重新启动所有文件,并使用这些文件运行上述命令,这没有帮助。我仍然得到同样的错误。

1 个答案:

答案 0 :(得分:0)

尝试使用不同滤镜图中的音频和视频

的ffmpeg

-i "video1a.flv"
-i "video1b.flv"
-i "video1c.flv"
-i "video2a.flv"
-i "video3a.flv"
-i "video4a.flv"
-i "video4b.flv"
-i "video4c.flv"
-i "video4d.flv"
-i "video4e.flv"

-filter_complex

nullsrc=size=640x480[base];
[0:v]setpts=PTS-STARTPTS+0.12/TB,scale=320x240[1a];
[1:v]setpts=PTS-STARTPTS+3469.115/TB,scale=320x240[1b];
[2:v]setpts=PTS-STARTPTS+7739.299/TB,scale=320x240[1c];
[5:v]setpts=PTS-STARTPTS+4390.466/TB,scale=320x240[4a];
[6:v]setpts=PTS-STARTPTS+6803.937/TB,scale=320x240[4b];
[7:v]setpts=PTS-STARTPTS+8242.005/TB,scale=320x240[4c];
[8:v]setpts=PTS-STARTPTS+9811.577/TB,scale=320x240[4d];
[9:v]setpts=PTS-STARTPTS+10765.19/TB,scale=320x240[4e];
[base][1a]overlay=eof_action=pass[o1];
[o1][1b]overlay=eof_action=pass[o1];
[o1][1c]overlay=eof_action=pass:shortest=1[o1];
[o1][4a]overlay=eof_action=pass:x=320:y=240[o4];
[o4][4b]overlay=eof_action=pass:x=320:y=240[o4];
[o4][4c]overlay=eof_action=pass:x=320:y=240[o4];
[o4][4d]overlay=eof_action=pass:x=320:y=240[o4];
[o4][4e]overlay=eof_action=pass:x=320:y=240

-filter_complex

[0:a]asetpts=PTS-STARTPTS+0.12/TB,aresample=async=1,pan=1c|c0=c0,apad[a1a];
[1:a]asetpts=PTS-STARTPTS+3469.115/TB,aresample=async=1,pan=1c|c0=c0,apad[a1b];
[2:a]asetpts=PTS-STARTPTS+7739.299/TB,aresample=async=1,pan=1c|c0=c0[a1c];
[3:a]asetpts=PTS-STARTPTS+82.55/TB,aresample=async=1,pan=1c|c0=c0,apad[a2a];
[4:a]asetpts=PTS-STARTPTS+2687.265/TB,aresample=async=1,pan=1c|c0=c0,apad[a3a];
[a1a][a1b][a1c][a2a][a3a]amerge=inputs=5

-c:v libx264 -c:a aac -ac 2 output.mp4