2

長さが 2 秒の 8 フレームのアニメーション GIF があるとします。ソースGIFが何度も繰り返される30秒のビデオファイル(この時点ではコーデックは重要ではありません)を作成したいと思います。

のみを使用ffmpegしてこれを行うことは可能ですか? または他の前処理ユーティリティを使用する回答convertはカウントされません [理由は、そのユーティリティを持たない PandaStream でこれを使用したいからです]。複数の ffmpeg コマンドでもかまいませんが、シェル スクリプトも問題外であると仮定しましょう。


私が試したことはうまくいきませんでした(おそらく私は間違っていたかもしれませんが、私はffmpegにあまり慣れていません):

  1. ffmpeg docs-loop_inputにある-loop_outputオプションを使用します。ffmpeg 1.2 と 2.0 の両方を使用すると、エラー メッセージが表示されます。エラーはオプションを認識しないことに関するものなので、私はこれを間違って使用している可能性がありますが、ドキュメントでは非推奨であると書かれています。Unrecognized option 'loop_[input|output]'

  2. -loopオプション。GIF -> ビデオでは何もしないようです。このフラグと上記のフラグは、アニメーション GIF を出力として生成することに関連していると思います。

  3. 連結。次のようなことをします:

    ffmpeg -i "concat:image.gif|image.gif|image1.gif|image2.gif|image3.gif|image4.gif" image-long.gif

    出力gifの品質ははるかに低くなりますが、16フレームのgif(2つのgifが連結されるため)が生成されます。


私はここで少し知恵を絞っています (上記の概念の他の多くの順列を試しました)。私は今、「棒で突く」ところまで来ています。

4

1 に答える 1

7

出来ますか?はい。

How to concatenate (join, merge) media filesを見ると、gif を取り、トランスコードして mpeg ストリームにすることができます (最初のものを 2 回コピーできます)。

ffmpeg -i image.gif -f mpegts image1.ts
ffmpeg -i image.gif -f mpegts image2.ts
ffmpeg -i image.gif -f mpegts image3.ts

それらを連結し、gifとして出力します

ffmpeg -i "concat:image1.ts|image2.ts|image3.ts" -pix_fmt rgb24 output.gif

mp4 などから始めると、より良い結果が得られるようです。最初のステップを

ffmpeg -i image.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts image1.ts

他のコピーについても繰り返します。

concat:同じファイルに複数回アクセスしようとすると ( concat:image1.ts|image1.ts|image1.ts) 機能しないため、同じファイルの複数のコピーを作成します。

楽しみ

于 2013-10-23T04:05:19.340 に答える