さまざまな期間のFFMPEG画像シーケンス


16

長さ1分のmp3ファイルがあるとします。20個のpng画像があります。これらの画像と音声をビデオファイルに結合したいのですが、各画像が画面上で3秒続くのは望ましくありません。一部の画像は5秒、他の画像は1秒などです。

私が考えることができる唯一の方法は、より長く続くはずの画像をコピーすることです。たとえば、image1、image2、image3をまったく同じにすると、ビデオの時間が3倍になります。

ただし、これは非常に時間とスペースを消費します。ffmpegにそれを可能にするスイッチ/パラメーターはありますか?


あなたが知ったように、ffmpegは同じ長さの各画像を表示するはずです。長さを変えたい場合は、事前に画像を複製するか、希望する期間ごとに別々のビデオを作成してから連結する必要があります。たぶん、いくつかの他のユーザーが、より良いアイデアを持っていますが、このタイプのタスクは、などKdenlive、などのエディタで簡単になります
llogan

私はPHPスクリプトからそれをやっているので、エディタは私が探しているものではありません。
Flot2011

回答:


21

ffmpeg 2.0を使用して、これを行う方法がいくつかあります。

  1. 1つの方法は、ファイルの変更時間を使用することです。最初に、画像ファイルの変更時刻設定して、各画像ファイルの変更時刻がそれよりも前になるようにします。時間差は、前の画像の持続時間です(1秒の解像度)。次に、image2 demuxerオプションを使用します-ts_from_file 1。例えば:

    touch -t 01010000.00 image01.png
    touch -t 01010000.03 image02.png
    touch -t 01010000.08 image03.png
    ...
    ffmpeg -ts_from_file 1 -i image%2d.png -i audio.mp3 -c:a copy -vf fps=25 out.avi
    
  2. 別の方法は、concatdemuxerを使用することです。これは、オプションの期間で連結するファイルのリストを取得します。最初に、次のような画像と期間をリストしたファイルを作成します。

    ffconcat version 1.0
    file image01.png
    duration 3
    file image02.png
    duration 5
    file image03.png
    

    次に、このファイルをffmpegへの入力として提供します。例えば:

    ffmpeg -i in.ffconcat -i audio.mp3 -c:a copy -vf fps=25 out.avi
    

最終期間の後、最後のファイルを複製する必要がある場合があります。 -c:a copymp3オーディオをそのままコピーします。別のオーディオコーデックに変換する場合は、の代わりにそれを指定できますcopy。あなたはまたと異なるビデオコーデックを指定することができます-c:vかで異なるピクセルフォーマット-pix_fmtなどを、-c:v libx264 -pix_fmt yuv420p-vf fps=25出力フレームレートを25 fpsにします。オーディオが長く、画像の後に切り取る場合は、-shortestオプションを使用します。


これがうまくいかないように見える理由(つまり、文字の2番目の(そして最初に試した)オプションを選択しましたが、画像のない黒いビデオを出力するか、画像が数フレームではなく1フレームだけ点滅するだけですffconcatファイルで指定された秒
sup

@sup:これはまだ機能します。ビデオが黒の場合、プレーヤーは使用しているビデオ形式をサポートしていない可能性があります。試す-c:v libx264 -profile:v baseline -pix_fmt yuv420p out.mp4out.aviの代わりに、またはそのようなMPVやffplayなど、さまざまなプレイヤーを試してみてください。また、FFmpegの現在のバージョンを使用していることを確認し、最終期間後に最後の画像ファイル名を複製してください。
mark4o

うーん、奇妙な、Uはmpvとffmpeg.orgからダウンロードしたffmpeg静的ビルドを使用しますが、期間は無視されます。:それは重要ではありませんので、とにかく、私は、これを行うにはどのように別の方法を見つけたffmpeg.org/pipermail/ffmpeg-user/2015-July/027702.html
supの

1

想定 ffmpeg -i in.ffconcat -vf fps=25 out.avi

(2018:in.ffconcatファイルの内容)-これは機能します:

ffconcatバージョン1.0
ファイルtext.png
持続時間30.0
ファイルtext.png

これはしませんが

ffconcatバージョン1.0
ファイルtext.png
持続時間30.0

すなわち、2番目の場合

ffprobe out.avi -show_entries format=duration -v 0

[フォーマット]
期間= 0.040000
[/フォーマット]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.