【问题标题】:How do I debug why avconv is stalling?如何调试 avconv 停止的原因?
【发布时间】:2015-07-09 11:19:11
【问题描述】:

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

avconv -y -i '$finalvideo' -target ntsc-dvd -aspect 4:3 '$mpgvideo' > $logs

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

cpu 在这个进程中显示 97% 的使用率,但是,什么都没有发生。

操作系统 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

感谢您的帮助。

【问题讨论】:

    标签: ffmpeg libav


    【解决方案1】:

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

    您确定不是因为您达到了存储上限吗?

    【讨论】:

    • 是的,我很确定这不是存储间隙,我一次可以运行 10 个视频,并且在播放到一半时全部停止。我已经放弃了我的 T 硬盘的 Gigs,我为 VPS 配置了更多内存。我很确定这不是空间问题。
    • 听起来很合理。你试过我指向的标志吗?应该给你很多数据来看看。
    • well -loglevel debug -debug 转储了大量信息,主要是关于每一帧的一个块。尽管如此,它并没有放慢速度。
    • 是的,它终于停止了,我收到了一条消息并更新了问题。关于如何解决这个问题的任何想法?
    【解决方案2】:

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

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

    同样的解决方案可能适用于 avconv。在 ffmpeg 世界中(并且因为我坚持使用过时的版本),我只需要将 -ac 2 添加到我的 ffmpeg 命令中,一切正常!

    希望有帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      • 2012-10-18
      • 1970-01-01
      相关资源
      最近更新 更多