.gif
ビデオから.mp4
アニメーションを作成したいです。コマンドラインから実行したいので、コマンドラインツールのみをリストしてください。
ffmpeg
3.4.4はUbuntu 18.04で直接実行できます
次のようなものを使用したいと思うでしょう。
Sudo apt-get install ffmpeg
wget -O opengl-rotating-triangle.mp4 https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.mp4?raw=true
ulimit -Sv 1000000
ffmpeg \
-i opengl-rotating-triangle.mp4 \
-r 15 \
-vf scale=512:-1 \
-ss 00:00:03 -to 00:00:06 \
opengl-rotating-triangle.gif
テストデータ生成手順 この投稿で説明 。
より直接的な:
Sudo apt-get install ffmpeg
ffmpeg -i in.mp4 out.gif
動作しますが、ビデオ形式はフレーム間でインテリジェントに圧縮されるため、出力GIFは入力ビデオよりもはるかに大きくなります。
引数の内訳:
ulimit -Sv 1000000
:プログラムの最大1Gbメモリサイズを設定します。
主に、以前の特定の試行のように、コマンドが無制限のメモリを使用しないようにします。
500MBでffmpegが共有ライブラリのロードに失敗する... RAMをアップグレードする時間
-ss 00:00:03 -to 00:00:06
:ビデオをカットする開始時間と終了時間。
いいえ、GIFは最適な方法ではありません 海賊 オンラインでビデオを配布します。
-vf scale=512:-1
:出力を512
ピクセルの高さにし、幅を調整してアスペクト比を維持します。
これは、ビデオよりも解像度がはるかに低い傾向があるWeb用の画像の一般的な使用例です。
このオプションを削除すると、出力GIFは入力ビデオと同じ高さになります。
元のビデオの高さは、たとえばffprobe
で見つけることができます。 https://superuser.com/questions/595177/how-to-retrieve-video-file-information-from-command-line- under-linux/1035178#1035178 であり、この例では1024 x 1024です。
-r 15
:FPSのサンプリング。
たとえば、元のビデオは30 FPSであったため、-r 15
は、ffmpeg
が2つごとに1つのフレームを選択することを意味します(= 30 / 15
)。
ただし、知覚される出力FPSは入力に一致するように調整されるため、速度の向上は見られず、粒度が大きくなるだけです。
入力FPSはffprobe
で見つけることができ、入力フレームの総数はmediainfo
で見つけることができます: https://superuser.com/questions/84631/how -do-i-get-the-number-of-frames-in-a-video-on-the-linux-command-line/1044894#1044894
通常、ビデオ形式は解像度が高いためフレームレートが高いため、このオプションをお勧めします。小さいGIFを使用すると、フレームレートの低下が目立たなくなるため、一部のフレームをスキップして小さいGIFを作成できます。
18.04より前:ffmpeg
+ convert
中間ファイルなしのワンライナー
ffmpeg
は、以前はGIFを処理できませんでした。私が持っていた最高のものは次のものでした:
Sudo apt-get install ffmpeg imagemagick
ffmpeg -i input.mp4 -r 10 -f image2pipe -vcodec ppm - | \
convert -delay 5 -loop 0 - output.gif
引数のいくつかの説明:
-loop 0
:Netscape Gif拡張ループカウントフィールドを出力に追加します。 0は、次で説明されている無限ループを意味します。 http://www.vurdalakov.net/misc/gif/netscape-looping-application-extensioneog
、firefox
、およびすべてのクロムそれがなくてもデフォルトで無限にループするので、それがどれほど必要かはわかりません。
-delay 5
:次のフレームを表示する前に待機した時間(秒単位)、 https://en.wikipedia.org/wiki/GIF#Animated_GIF バイト324。したがって100
は1 FPSを意味し、5
は1 / 0.5 == 20FPS
を意味します。
「実際の」非GIFビデオ形式はフレーム間で圧縮するのに対し、GIFは個々のフレームのみを圧縮するため、高さとフレームレートを小さくしても、出力GIFはビデオよりも大きい場合があります。
直接:
convert input.mp4 rpi2-bare-metal-blink.gif
動作しましたが、メモリオーバーフローが原因でコンピュータがほぼ殺され、2秒の1Mb入力ファイルに対して100倍の出力が生成されました。いつかImageMagickが追いつくかもしれません。
Ubuntu 17.10。でテスト済み。
2つのステップ:
ビデオから画像を抽出する
.mp4
ファイルと同じディレクトリに、framesというディレクトリを作成します。コマンドを使用:
ffmpeg -i video.mp4 -r 5 'frames/frame-%03d.jpg'
-r 5 stands for FPS value
for better quality choose bigger number
adjust the value with the -delay in 2nd step
to keep the same animation speed
%03d gives sequential filename number in decimal form
cd frames
convert -delay 20 -loop 0 *.jpg myimage.gif
-delay 20 means the time between each frame is 0.2 seconds
which match 5 fps above.
When choosing this value
1 = 100 fps
2 = 50 fps
4 = 25 fps
5 = 20 fps
10 = 10 fps
20 = 5 fps
25 = 4 fps
50 = 2 fps
100 = 1 fps
in general 100/delay = fps
-loop 0 means repeat forever
ドキュメント: gifオプションの変換
最終的にはかなり大きなファイルになります。2番目のステップのコマンドに追加して小さなファイルを取得できるオプションについては、 gifを最適化するための画像マジックガイド を参照してください。
gifify は、変換を簡素化するオールインワンのノードベースのユーティリティです。 nodejs
、npm
、ffmpeg
、およびimagemagick
に依存します。これらはすべてリポジトリで利用できます。
npm
をインストールしたら、次を使用してgifify
をグローバルにインストールできます。
npm install -g gifify
ビデオは、次の方法で.GIFに変換できます。
gifify video.mp4 -o video.gif
オプションで、ビデオの開始位置と終了位置を設定し、テキストキャプションを追加することもできます。
gifify clip.mp4 -o clip.gif --from 01:48:23.200 --to 01:48:25.300 --text 'we are the knights who say nip!'
smaller️小さいビデオでも変換が完了するまで数分かかる場合があります。
注:
ffmpeg
およびimagemagick
は、いくつかの特定のライブラリ(つまり、libassとfontconfigに応じて)でコンパイルする必要がある場合があります。