web-dev-qa-db-ja.com

avconv:MP4プロセスハングの保存

これをaskubuntuとstackoverflowのどちらに投稿するべきか完全にはわかりません。

ユーザーが動画をアップロードして共有できるウェブサイトを開設しています。私はavconvを使用してビデオサイズを縮小し、2回保存しています。1回はmp4として、もう1回はwebmとして保存しています。

携帯電話から.MOVをアップロードすると、ビデオ変換が迅速かつ管理しやすくなります。

サムスンギャラクシーS3から.mp4をアップロードすると、webmへのビデオ変換も迅速になります。しかし、別のmp4への変換には永遠にかかります-文字通り数時間。どうして?誰かが問題に光を当てることができますか?

私のavconv出力は以下の通りです。

avconv -i /path/video.mp4 -c:v libx264 -vf transpose=1,transpose=1,transpose=1 -s 640x480 /path/video-out.mp4
avconv version 0.8.17-4:0.8.17-0ubuntu0.12.04.1, Copyright (c) 2000-2014 the Libav developers
built on Mar 16 2015 13:26:50 with gcc 4.6.3
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/path/video.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 0
    compatible_brands: isom3gp4
    creation_time   : 2015-09-04 15:08:21
Duration: 00:00:07.76, start: 0.000000, bitrate: 11756 kb/s
Stream #0.0(eng): Video: h264 (Constrained Baseline), yuv420p, 1280x720, 11967 kb/s, 29.81 fps, 90k tbr, 90k tbn, 180k tbc
Metadata:
  creation_time   : 2015-09-04 15:08:21
Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, s16, 119 kb/s
Metadata:
  creation_time   : 2015-09-04 15:08:21
File '/path/video-out.mp4' already exists. Overwrite ? [y/N] y
[buffer @ 0xc3d580] w:1280 h:720 pixfmt:yuv420p
[scale @ 0xc3dac0] w:1280 h:720 fmt:yuv420p -> w:640 h:480 fmt:yuv420p flags:0x4
[transpose @ 0xc3e280] w:640 h:480 dir:1 -> w:480 h:640 rotation:clockwise vflip:0
[transpose @ 0xc3e7c0] w:480 h:640 dir:1 -> w:640 h:480 rotation:clockwise vflip:0
[transpose @ 0xc3ede0] w:640 h:480 dir:1 -> w:480 h:640 rotation:clockwise vflip:0
[libx264 @ 0xc2b100] MB rate (108000000) > level limit (983040)
[libx264 @ 0xc2b100] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX
[libx264 @ 0xc2b100] profile Main, level 5.1
[libx264 @ 0xc2b100] 264 - core 120 r2151 a3f4407 - H.264/MPEG-4 AVC codec - Copyleft 2003-2011 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x1:0x111 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=1 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=3 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=0 b_adapt=1 b_bias=0 direct=1 weightb=0 open_gop=1 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.25 aq=1:1.00
Output #0, mp4, to '/path/video-out.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 0
    compatible_brands: isom3gp4
    creation_time   : 2015-09-04 15:08:21
    encoder         : Lavf53.21.1
    Stream #0.0(eng): Video: libx264, yuv420p, 480x640, q=-1--1, 180k tbn, 90k tbc
    Metadata:
      creation_time   : 2015-09-04 15:08:21
    Stream #0.1(eng): Audio: libvo_aacenc, 48000 Hz, stereo, s16, 200 kb/s
    Metadata:
      creation_time   : 2015-09-04 15:08:21
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> libx264)
  Stream #0:1 -> #0:1 (aac -> libvo_aacenc)
Press ctrl-c to stop encoding

フレーム出力の例を次に示します。

frame=124398 fps=142 q=33.0 size=   16885kB time=1.38 bitrate=100110.2kbits/s dup=124356 drop=0

私はこの質問を書いている間ずっとプロセスを実行してきました、そして今のところそれは完了しています... 22フレーム。

何が問題なのですか?

編集:そして、これも巨大なファイルではありません。 11メガ、1280 x720のようなものです。

もう一度編集:質問を投稿してから、プロセスがハングし始めたばかりで、フレームを超えて移動することはありません... 32程度。

もう一度編集:CPUが他のプロセスに圧倒された場合に備えて、サーバーをハードリブートしました。サイコロなし、同じ問題。

1
CGriffin

ffmpegを取得します

avconvとLibavの偽造品「ffmpeg」はバグがあります。最近のffmpegビルドを取得します。 4つの主なオプションがあります。

  • 静的ビルドをダウンロード 。簡単で高速ですが、カスタマイズすることはできず、一部のエンコーダーなどのフリーでないものはサポートしていません。システムに干渉しません。

  • コンパイル 。コピー&ペーストのステップバイステップガイドに従うことができます。システムに干渉することはありません。

  • PPAを使用 (信頼できるユーザーの場合)。

  • Ubuntu Vivid15.04以降にアップグレードします。 VividにはFFmpegのffmpeg2.5.8が含まれています。ただし、FFmpegの開発は非常に活発であるため、静的ビルドまたはコンパイルを使用することをお勧めします。

静的ビルドの使用

ダウンロードして解凍した後、次のように使用できます(自宅のDownloadsディレクトリにあると仮定します)。

  • フルパスを含めます。

    /home/user/Downloads/ffmpeg -i …
    

    または

    ~/Downloads/ffmpeg -i …
    
  • または、ffmpegを含むディレクトリに移動して、次のコマンドを実行します。

    ./ffmpeg -i …
    
  • または、PATHのディレクトリに移動します。 ~/binディレクトリはそのような場所の1つです(同じユーザーがffmpegを実行すると仮定します)。

    1. ホームディレクトリにbinという名前のディレクトリを作成します。
    2. ffmpegバイナリを~/binに移動します。
    3. source ~/.profileを実行するか、単にログアウトしてからログインします。
    4. これで、任意の端末でffmpegコマンドを実行するだけで、正常に機能するはずです。
3
llogan