0

avconv を使用して .mov ファイルを .mpg ファイルに変換しています。私のphpアプリケーションで実行されているコマンドは次のとおりです。

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

小さな .mov ファイルを問題なく .mpg に変換できます。ただし、10 分または 15 分を超える動画は変換できません。ログ ファイルは完全に空です。コマンドを直接実行すると、どのビデオを選択しても、フレームは 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でバグを投稿しました

ご協力いただきありがとうございます。

4

2 に答える 2

2

より高いログ レベルで avconv を実行してみてください: -loglevel debug。これにより、より多くのデータが得られるはずです。また、試し-dumpてみてください-debug

ストレージの上限に達しているからではありませんか?

于 2011-11-03T21:16:15.830 に答える
0

最近、いくつかの奇妙なサイズのビデオクリップをmp4コンテナ内の「標準」16:9 x264およびAACストリームに変換しているときに、ffmpegでこれに遭遇しました。「コーデック 'ac3' に対して互換性のないサンプル フォーマット 's16'、自動選択フォーマット 'flt'」というメッセージが表示されると、私の ffmpeg プロセスは頻繁に 100% の CPU 使用率で無期限にハングします。

最終的に、少なくとも私の場合、問題は私が行っていた変換(中間フォーマットへのトランスコードから最終的な目的の出力へのトランスコード)が原因で、実際にはエンコードを引き起こしたオーディオストリームチャネルの数であることがわかりましたハングするプロセス。オーディオ ストリームを 2 チャンネルに変換するように ffmpeg に指示することで、この問題を完全に修正することができました。

同じ解決策がおそらく avconv にも適用されます。ffmpeg の世界では (そして、古いバージョンで立ち往生しているため)、-ac 2ffmpeg コマンドに追加するだけで、すべてが完全に機能しました!

それが役立つことを願っています:)

于 2015-07-09T03:19:11.407 に答える