我如何调试avconv拖延的原因?

时间:2011-11-03 21:05:18

标签: ffmpeg libav

我正在使用avconv将.mov文件转换为.mpg文件。我的php应用程序运行的命令如下:

  

avconv -y -i'$ finalvideo'-target ntsc-dvd -aspect 4:3'mp mpvideo'> $日志

我可以将小.mov文件转换为.mpg而不会出现任何问题。但是,我无法转换超过十或十五分钟的视频。日志文件完全为空。当我直接运行命令时,无论我选择哪个视频,帧都会在34000左右停止。

cpu在此过程中显示97%的使用率,但是,没有任何事情发生。

OS Ubuntu 10~

如何收集有关此停滞过程的更多信息?

这是冻结输出

avconv version 0.7, Copyright (c) 2000-2011 the Libav developers
  built on Nov  3 2011 13:39:09 with gcc 4.3.3

Seems stream 0 codec frame rate differs from container frame rate: 180000.00 (180000/1) -> 23.98 (24000/1001)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/var/www/sites/default/files/compiled_videos/573-stream.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 512
    compatible_brands: qt  
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf53.0.3
  Duration: 00:18:53.49, start: 0.000000, bitrate: 1430 kb/s
    Stream #0.0(eng): Video: h264 (Main), yuv420p, 854x480, 1387 kb/s, 25.60 fps, 23.98 tbr, 90k tbn, 180k tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
    Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, s16, 126 kb/s
    Metadata:
      creation_time   : 1970-01-01 00:00:00
[buffer @ 0x9d88820] w:854 h:480 pixfmt:yuv420p
[scale @ 0x9d88b60] w:854 h:480 fmt:yuv420p -> w:720 h:480 fmt:yuv420p flags:0x4
Incompatible sample format 's16' for codec 'ac3', auto-selecting format 'flt'
Output #0, dvd, to '/var/www/sites/default/files/compiled_videos/573.mpg':
  Metadata:
    major_brand     : qt  
    minor_version   : 512
    compatible_brands: qt  
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf53.10.0
    Stream #0.0(eng): Video: mpeg2video, yuv420p, 720x480 [PAR 8:9 DAR 4:3], q=2-31, 6000 kb/s, 90k tbn, 29.97 tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
    Stream #0.1(eng): Audio: ac3, 48000 Hz, stereo, flt, 448 kb/s
    Metadata:
      creation_time   : 1970-01-01 00:00:00
Stream mapping:
  Stream #0.0 -> #0.0 (h264 -> mpeg2video)
  Stream #0.1 -> #0.1 (aac -> ac3)
Press ctrl-c to stop encoding
[mpeg2video @ 0x9d8bf20] rc buffer underflow
Input stream #0.1 frame changed from rate:48000 fmt:s16 ch:2 to rate:48000 fmt:flt ch:2
frame=33910 fps= 91 q=2.0 size=  151922kB time=336.58 bitrate=3697.7kbits/s dup=5475 drop=530    
有趣的哦。我使用了-loglevel debug -debug。我看到了这个信息

stream #0:
  keyframe=0
  duration=0.000
  dts=1133.449  pts=1133.533
  size=103
*** 1 dup!
stream #0:
  keyframe=0
  duration=0.000
  dts=1133.449  pts=1133.449
  size=104

直到我收到此消息

*** drop!

我已经用libav发布了我的错误 http://bugzilla.libav.org/show_bug.cgi?id=67

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

尝试运行更高日志级别的avconv:-loglevel debug。 这应该会给你更多的数据。另外,请尝试-dump-debug

你确定不是因为你正在购买存储帽吗?

答案 1 :(得分:0)

我最近用ffmpeg遇到了这个问题,同时将一些奇怪大小的视频剪辑转换为“标准”16:9 x264& AAC在mp4容器内流动。当“编解码器'ac3'的”不兼容的样本格式's16',自动选择格式'flt'“消息将显示时,我的ffmpeg进程经常只会在100%CPU使用时无限期挂起。

我终于发现问题,至少在我的情况下,是因为我正在进行的转换(转码为中间格式然后转换为最终的所需输出),实际上是音频流通道的数量导致编码过程挂起。通过告诉ffmpeg将音频流转换为2声道,我能够永久地解决这个问题。

同样的解决方案可能适用于avconv。在ffmpeg世界中(因为我遇到了过时的版本),我只需要将-ac 2添加到我的ffmpeg命令中,一切运行完美!

希望有所帮助:)