web-dev-qa-db-ja.com

FFMpegはjpeg画像をビデオに変換します

タイムラプスビデオを作成するために、1秒間隔で撮影された一連の画像を撮影しようとしています。これはffmpegで簡単だと思いましたが、不可解なエラーが発生しています。

すべての画像は、Androidカメラから取得したyuv420jpegです。フォルダに個別のjpegとして保存され、すべて同じサイズと形式になっています。7つのシーケンスとして名前が付けられています。 -ゼロから始まる数字の名前(例として、「0000000.jpg」から「0001000.jpg」)。

これは私の文字列です(わかりやすくするためにフォルダ名は編集されています):

avconv -r 1 -f image2 -i %07d.jpg -vcodec libx264 -crf 18 -preset slower video.mp4

素晴らしいようです、私はそれが彼らのために働くと言う人々からのたくさんの投稿を見ます。

しかしffmpegは私にこれを与えます(太字はエラーを示します)

 ffmpegバージョン0.8.5-6:0.8.5-1、Copyright(c)2000-2012Libav開発者
 2013年1月13日12:05:48にgcc4.7.2でビルド.____。] ***このプログラムIS非推奨*** 
このプログラムは互換性のためにのみ提供されており、将来のリリースで削除される予定です。代わりにavconvを使用してください。
 [mjpeg @ 0x233aea0] overread 8 
入力#0、image2、from '%07d.jpg':
期間:00:00:00.04、開始:0.000000、ビットレート:N /A
ストリーム#0.0:ビデオ:mjpeg、yuvj420p、640x480 [PAR 1:1 DAR 4:3]、25 tbr、25 tbn、25 tbc 
ファイル 'video.mp4'は既に存在します。上書きしますか?[y/N] y 
 [buffer @ 0x233b340] w:640 h:480 pixfmt:yuvj420p 
 [libx264 @ 0x2339fa0] SAR = 1/1 
 [ libx264 @ 0x2339fa0] cpu機能の使用:MMX2 SSE2Fast FastShuffle SSEMisalign LZCNT 
 [libx264 @ 0x2339fa0]プロファイルメイン、レベル3.1 
 [libx264 @ 0x2339fa0] 264-コア123r2189 35cf912-H.264/MPEG -4AVCコーデック-Copyleft2003-2012-http://www.videolan.org/x264.htm l-オプション:cabac = 1 ref = 8 deblock = 1:0:0 analyse = 0x1:0x131 me = umh subme = 9 psy = 1 psy_rd = 1.00:0.00 mixed_ref = 0 me_range = 16 chroma_me = 1 trellis = 2 8x8dct = 0 cqm = 0 deadzone = 21,11 fast_pskip = 1 chroma_qp_offset = -2threads = 1sliced_threads = 0 nr = 0 decimate = 1 interlaced = 0bluray_compat = 0constrained_intra = 0 bframes = 3 b_pyramid = 0 b_adapt = 2 b_bias = 0 direct = 3 weightb = 0 open_gop = 1 weightp = 2 keyint = 250 keyint_min = 25 scenecut = 40 intra_refresh = 0 rc_lookahead = 60 rc = crf mbtree = 1 crf = 18.0 qcomp = 0.60 qpmin = 0 qpmax = 69 qpstep = 4 ip_ratio = 1.25 aq = 1:1.00 
出力#0、mp4、 'video.mp4':
メタデータ:
エンコーダー:Lavf53.21.1 
ストリーム#0.0:ビデオ:libx264、yuvj420p、640x480 [PAR 1:1 DAR 4:3]、q = -1--1、25 tbn、25 tbc 
ストリームマッピング:
ストリーム#0.0->#0.0 
 ctrl-cを押してエンコードを停止します
 [mjpeg @ 0x233aea0]オーバーリード8 
 frame = 0 fps = 0 q = 0.0 Lsize = 0kB time = 10000000000.00 bitrate = 0.0kbits/s 
 video:0kB audio:0kBグローバルヘッダー:0 kB多重化オーバーヘッド610.000000%

インポート行(赤で表示)は、「[mjpeg @ 0x233aea0] overread 8 "」と表示されている行です。

これはおそらく、画像をプレーンなjpegファイルではなくモーションjpegとして読み取ろうとしていて、どういうわけか失敗しているのではないかと思います。 「-fimage2」の有無にかかわらず試してみましたが、同じ結果になりました。また、avconvを使用してみましたが、同じ結果になりました。

画像は有効であり、すべてを* .png(コストと時間のかかるプロセス)に変換すると、すべてが機能することに注意してください。しかし、私は中間的な変換なしで、jpegを使用できるようにしたいと思います。結局のところ、それがffmpegの目的であるトランスコーディングです。

Ffmpegを使用して* .jpgをビデオに変換する良い方法はありますか?

4
Knetic

[mjpeg @ 0x233aea0] overread 8は、ffmpegがJPEG画像(またはMJPEGストリームからのフレーム)をブロックごとに読み取ろうとしたときにスローされるエラーですが、まだビットが残っています。

その場合、あなたの画像が他のビューアでうまく表示されているかもしれませんが、それはFFmpegが処理できない(または処理できない)ものです。これを修正するには、前に試したようにPNGとして、またはJPEGとして画像を再保存する必要があります。この種のバッチ変換は、 ImageMagick を使用して実行できます。次に例を示します。

for f in *.JPG; do mogrify "$f"; done

これにより、JPEGファイルが同じ名前で再保存されます。そのプロセスでは品質が低下することに注意してください。そのため、理想的ではありません。PNGはロスレスであるため、中間体として使用します。

ちなみに、FFmpegの最新バージョンを使用することは常に良い考えです。これは静的ビルドとして ダウンロードできます (ダウンロード、抽出、使用するだけです) )、または 自分でコンパイル 。 Ubuntuに付属するパッケージは常に古く、Ubuntuのバージョンによっては、「実際の」FFmpegでさえなく、Libavフォーク(使用しても問題ありませんが、 知っておく必要があります)違い )。

ffmpeg%07d.jpg構文を使用する場合は、番号を失うことなく、画像に連続した名前を付ける必要があることを忘れないでください。その他のオプションについては、image2マルチプレクサの ドキュメント も参照してください。

6
slhck