web-dev-qa-db-ja.com

avconv =>破損したビデオでjpegからビデオを作成します

Jpegフレームでいっぱいのディレクトリからビデオ(フォーマットに関係なく)を作成しようとしています。

インターネット上の多くのトピックで見られるように、avconv(v0.8)と、libavのドキュメントを試してみました。

avconv -i samples/*.jpeg output.mpeg

うまく機能し、output.mpegファイルを作成しているようです。

ただし、ファイルはどのリーダー(vlc、banshee、totemなど)でも読み取ることができません。エラーはありませんが、[再生]を押しても何も起こりません。

ビデオファイルのサイズを確認すると、元のビデオは10MBであるのに対し、約20kBです。したがって、データはファイルに保存されていないと想定できます(入力で指定されたフレーム数に関係なく、約20kBです)。

処理のデバッグログのペーストビンを作成しました。私はコーデックの世界に精通していないので、多くのことを理解していません: http://Pastebin.com/9dfxFWZe

-s、-r、-b、-vcodec、-f形式などとの組み合わせもたくさん試しますが、問題はまだあります。

私は何か間違ったことをしていますか?

あなたを助けることができることは何でも私に尋ねてください、私は非常に迅速に答えます。

ご協力ありがとうございました :)

12
OoDeLally

avconvは、入力ファイル名をprintfのような構文で指定することを想定しています。シェルワイルドカード(samles/*。jpegなど)を使用するだけでは不十分です。

サンプルの名前はsample/lapinsnipermin/.jpegのようですので、次のコマンドラインを試してください。

avconv -f image2 -i samples/lapinsnipermin/%03d.jpeg output.mpeg

これは機能しますか?ビットレートのオプションを追加することもできます(例:-r25)。

10
Sjlver

標準のワイルドカードを使用して選択を制御できるように、必要なjpgファイルをパイプ処理する方がよいことがわかりました。次のようにしてみてください。これにより、Webおよびモバイルで(つまり、標準のブラウザータグを使用して)ユーザーが使用できるビデオも出力されます。

cat samples/*.jpeg | avconv -r 30 -f image2pipe -codec:v mjpeg -i - -pix_fmt yuvj420p -r 30 -c:v libx264 -vf scale=480:300 -y output.mp4
5
Ben

グーグルで解決策を探したときに出てきたので、これを復活させます。私はついにこれを使ってそれを動かしました:

knoppix@Microknoppix:~$ avconv -r 1 -i /tmp/photo%d.jpg -r 24 -s 320x240 -vsync cfr /tmp/video.mpg

Avconvに元の名前の入力ファイルを認識させることができませんでした。これは理由を示しています:

knoppix@Microknoppix:~$ strace avconv -i /media/sdb1/DCIM/188_0408/IMGP%04d.JPG /tmp/video.mpg 2>&1 | grep 188_0408
execve("/usr/bin/avconv", ["avconv", "-i", "/media/sdb1/DCIM/188_0408/IMGP%0"..., "/tmp/video.mpg"], [/* 36 vars */]) = 0
stat64("/media/sdb1/DCIM/188_0408/IMGP0000.JPG", 0xbf925b00) = -1 ENOENT (No such file or directory)
stat64("/media/sdb1/DCIM/188_0408/IMGP0001.JPG", 0xbf925b00) = -1 ENOENT (No such file or directory)
stat64("/media/sdb1/DCIM/188_0408/IMGP0002.JPG", 0xbf925b00) = -1 ENOENT (No such file or directory)
stat64("/media/sdb1/DCIM/188_0408/IMGP0003.JPG", 0xbf925b00) = -1 ENOENT (No such file or directory)
stat64("/media/sdb1/DCIM/188_0408/IMGP0004.JPG", 0xbf925b00) = -1 ENOENT (No such file or directory)
write(2, "/media/sdb1/DCIM/188_0408/IMGP%0"..., 66/media/sdb1/DCIM/188_0408/IMGP%04d.JPG: No such file or directory

開始番号を設定するオプションが表示されなかったので、次のようにしました。

i=0; for file in /media/sdb1/DCIM/188_0408/IMGP28*.JPG; do cp $file /tmp/photo$i.jpg; i=$((i+1)); done

最終結果は私の写真のビデオで、毎秒1枚ずつ表示されます。 -vsync cfrは、出力フレームレートに一致するように入力フレームをパディングするようにavconvに指示します。

5
jcomeau_ictx