Как мне отладить, почему avconv останавливается?

#ffmpeg #libav

#ffmpeg #libav

Вопрос:

Я конвертирую файлы .mov в файлы .mpg с помощью avconv. Команда, выполняемая моим php-приложением, выглядит следующим образом:

avconv -y -i ‘$ finalvideo’ -целевой ntsc-dvd -аспект 4: 3 ‘$ mpgvideo’> $logs

Я могу конвертировать небольшие файлы .mov в .mpg без каких-либо проблем. Однако я не могу конвертировать видео длиной более десяти или пятнадцати минут. Файл журнала полностью пуст. Когда я запускаю команду напрямую, кадр останавливается где-то около 34000, независимо от того, какое видео я выбираю.

Процессор показывает 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

спасибо за вашу помощь.

Ответ №1:

Попробуйте запустить avconv с более высоким уровнем журнала : -loglevel debug . Это должно дать вам больше данных. Кроме того, попробуйте -dump и -debug .

Вы уверены, что это не потому, что вы нажимаете ограничение на хранилище?

Комментарии:

1. да, я почти уверен, что это не пробел в памяти, я могу запускать 10 видео одновременно, и все они останавливаются примерно на полпути. Я сбросил гигабайты с моего жесткого диска T, я выделил больше оперативной памяти для VPS. Я почти уверен, что это не проблема с пространством.

2. Звучит разумно. Вы пробовали с флагами, на которые я указал? Должно дать вам много данных для просмотра.

3. хорошо отладка на уровне журнала — отладка сбрасывает много информации, в основном блок о каждом кадре. Это совсем не замедлилось.

4. Да, это наконец остановилось, я получил сообщение о сбросе и обновил вопрос. Есть идеи, как это исправить?

Ответ №2:

Недавно я столкнулся с этим с помощью ffmpeg при преобразовании некоторых видеоклипов странного размера в «стандартные» потоки 16: 9 x264 и AAC внутри контейнера mp4. Когда появится сообщение «Несовместимый формат образца ‘s16’ для кодека ‘ac3’, автоматический выбор формата ‘flt'», мой процесс ffmpeg часто зависал бы на неопределенный срок при 100% загрузке процессора.

Я, наконец, обнаружил, что проблема, по крайней мере, в моем случае, заключалась в том, что из-за выполняемых мной преобразований (перекодирование в промежуточный формат, а затем в конечный желаемый результат), на самом деле количество каналов аудиопотока привело к зависанию процесса кодирования. Указав ffmpeg преобразовать аудиопоток в 2-канальный, я смог навсегда устранить эту проблему.

То же самое решение, вероятно, будет применимо к avconv. В мире ffmpeg (и потому, что я застрял с устаревшей версией) мне просто нужно было добавить -ac 2 в свою команду ffmpeg, и все работало отлично!

Надеюсь, это поможет 🙂