web-dev-qa-db-ja.com

FFMPEGタイムラプス「上書き」エラー - グロビング/シェルの問題になる可能性がありますか?

私は私が簡単なffmpegスクリプトになるべきだと思います。私は特定のディレクトリ内のすべてのJPGファイルを取り、それらを時間経過ビデオに記入しようとしています。私はすべてのエンコーダのオプションとFFMPEGのそのものに慣れていますが、構文権を得ることはできません。

私が試している行(ええ、私は知っています... "")ディレクトリ内のすべての.jpgイメージを取り、それらを "out.mp4"としてエンコードします。しかし、下部を見ると、私が取得するものは、ディレクトリ内の2番目のファイルであるgopr3974.jpgを上書きするようなプロンプトです。これは、何らかの理由ですべてのファイルを正しく複合していないことを意味しています...私は一重引用符、二重引用符を試してみました

ffmpeg -i GOPR%04d.JPG out.mp4
 _

そのため、どこかに何かがある必要があります。それが重要な場合、これはBashを使ってCygwin環境で実行されています...

[lwobker:/dtop/hack]$ /usr/local/bin/ffmpeg.exe -i GOPR*.JPG out.mp4
ffmpeg version N-64919-ga613257 Copyright (c) 2000-2014 the FFmpeg developers
  built on Jul 23 2014 00:35:22 with gcc 4.8.3 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads
--enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r
--enable-gnutls --enable-iconv --enable-libass --enable-libbluray
--enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme
--enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame
--enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg
--enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr
--enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab
--enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis
--enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264
--enable-libx265 --enable-libxavs --enable-libxvid --enable-decklink
--enable-zlib
  libavutil      52. 92.101 / 52. 92.101
  libavcodec     55. 69.100 / 55. 69.100
  libavformat    55. 48.101 / 55. 48.101
  libavdevice    55. 13.102 / 55. 13.102
  libavfilter     4. 11.102 /  4. 11.102
  libswscale      2.  6.100 /  2.  6.100
  libswresample   0. 19.100 /  0. 19.100
  libpostproc    52.  3.100 / 52.  3.100
Input #0, image2, from 'GOPR3973.JPG':
  Duration: 00:00:00.04, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: mjpeg, yuvj422p(pc, bt470bg), 1920x1440 [SAR 72:72 DAR
4:3], 25 tbr, 25 tbn, 25 tbc
File 'GOPR3974.JPG' already exists. Overwrite ? [y/N]
 _
1
ljwobker

方法1:シーケンスパターンを使用する

あなたの最初のイメージが呼び出された場合、あなたが本当に必要なのはGOPR0001.JPGと呼ばれているのです。

ffmpeg.exe -i "GOPR%04d.JPG" -pix_fmt yuv420p out.mp4

または最初のイメージがGOPR3973.JPGと呼ばれている場合は、ffmpegをffmpegを探す必要があります。

ffmpeg.exe -start_number 3973 -i "GOPR%04d.JPG" -pix_fmt yuv420p out.mp4

方法2:グロビングパターンを使用する

FFMPEGバージョンがグロビングのサポートがある場合(Windowsがビルドがありません。

ffmpeg.exe -pattern_type glob -i "GOPR*.JPG" -pix_fmt yuv420p out.mp4

これは、開始番号がわからないか、単に正確なコントロールを気にしない場合に推奨されます。

なぜそれがうまくいかないのか

ffmpeg.exe -i GOPR*.JPG out.mp4

これは、このようなものに拡張されるため、機能しません(最初のイメージをGOPR0001.JPGと呼ばれていると仮定)。

ffmpeg.exe -i GOPR0001.JPG GOPR0002.JPG … out.mp4

FFMPEGは、出力ファイル名として、最後の名前の引数オプションを(すなわち、先頭の-)を出力ファイル名として扱われるので、GOPR2.JPGが出力され、out.mp4が適用されないまでは何でも。

いくつかのヒント

  • -pix_fmt yuv420pは、JPEGのYUV 4:2:2カラースペースから4:2のサブサンプリングに変換するために必要です。それ以外の場合は、(ほとんどのFFMPEGベースの)プレイヤーがビデオを表示できなくなります。

  • -crf 23オプションを設定し、18から28の間で何かを選択することによって品質を制御します。

  • 入力フレーム(画像)がキャプチャされた状態に従って、フレームレートを設定することをお勧めします。 ffmpeg.exe -framerate 30 -start_number …を実行してこれを行います。フレームレートを指定しないと、FFMPEGはあなたの元のフレームが25 Hzで記録されたと仮定します。

  • image2デルセル マニュアルの一部を読んでください。

  • パターンのシェルの拡張を防ぐために、二重引用符は常に使用するのに適しています。

4
slhck