ffmpeg
数がゼロから始まらない一連のシーケンスからビデオを作成することは可能ですか?
たとえば、いくつかの画像[test_100.jpg、test_101.jpg、test_102.jpg、...、test_200.jpg]があり、それらをビデオに変換したい。私は次のコマンドを試しましたが、うまくいきませんでした(数字はゼロから始まるはずです):
ffmpeg -i test_%d.jpg -vcodec mpeg4 test.avi
何かアドバイスはありますか?
ffmpeg
数がゼロから始まらない一連のシーケンスからビデオを作成することは可能ですか?
たとえば、いくつかの画像[test_100.jpg、test_101.jpg、test_102.jpg、...、test_200.jpg]があり、それらをビデオに変換したい。私は次のコマンドを試しましたが、うまくいきませんでした(数字はゼロから始まるはずです):
ffmpeg -i test_%d.jpg -vcodec mpeg4 test.avi
何かアドバイスはありますか?
回答:
次の-start_number
ようなスイッチを使用する場合、ファイルの名前を変更する必要はありません。
ffmpeg -start_number n -i test_%d.jpg -vcodec mpeg4 test.avi
どこn
静止画のシーケンスの開始です。
これは、シーケンスが開始されて途切れない限り機能します。ギャップがあり、すべての静止画を含める場合は、ギャップを埋めるために番号を付け直す必要がある場合があります。
他にも便利なスイッチがいくつかあります。
次のワンライナーを使用して、フレームレートを遅くし、画像を圧縮して、結果のビデオを小さくします。
ffmpeg.exe -f image2 -framerate 25 -pattern_type sequence -start_number 1234 -r 3 -i Imgp%04d.jpg -s 720x480 test.avi
この-r 3
オプションは、結果のビデオのフレームレートを3フレーム/秒に設定し、短時間で各静止画像を表示できるようにします。この-s
オプションは、結果のビデオのサイズを管理するために、必要な解像度に画像を再スケーリングします。
(Windowsシェルで、これをMike Fitzpatrick https://superuser.com/a/344178/153054に置き換え-i Imgp%04d.jpg
てください。)-i "Imgp%%04d.jpg"
以下のコードスニペットを使用できます。
cat *.jpg | ffmpeg -f image2pipe -r 1 -vcodec mjpeg -i - -vcodec libx264 out.mp4
ffmpegのドキュメントでサンプルスクリプトを見つけることができます。
3.2単一の画像をムービーにエンコードするにはどうすればよいですか?
名前を変更する画像が多数ある場合は、次のコマンドを使用して負担を軽減できます。このコマンドは、bourneシェル構文を使用して、* jpgが
/tmp' directory in the sequence of
img001.jpg '、 `img002.jpg'などに一致する現在のディレクトリ内のすべてのファイルをシンボリックリンクします。
x=1; for i in *jpg; do counter=$(printf %03d $x); ln "$i" /tmp/img"$counter".jpg; x=$(($x+1)); done
次に実行します:
ffmpeg -f image2 -i /tmp/img%03d.jpg /tmp/a.mpg
cp
リンクが機能しない場合の使用に関して、ファイルシステムがリンクをサポートしていれば、cp --reflink=auto
はるかに優れた速度/スペースの使用が実現します。
ffmpegは、bashスタイルのグロビングもサポートしています(*は任意の数の文字を表します)。
これは、画像が連続しているが、前の例のように必ずしも数値的に連続しているわけではない場合に役立ちます。
ffmpeg -r 1 -pattern_type glob -i 'test_*.jpg' -c:v libx264 out.mp4
そのため、ファイルが並べ替えられている限り、-pattern_type glob
スイッチを使用しても問題はありません。
私が知る限り、あなたは乱数でシーケンスを開始することはできません(0または1で開始する必要があるかどうか覚えていません)、さらに、ギャップがあることはできません。画像の追加を停止します。
また、私の答えに対するコメントで述べたように、インデックスの幅を指定する必要があることを忘れないでください。好む:
image%03d.jpg
また、%03dインデックスタイプを使用する場合、次のようにファイル名に0を埋め込む必要があります。
image001.jpg image002.jpg image003.jpg
等
調べる
x=1; for i in *jpg; do counter=$(printf %03d $x); ln "$i"
/tmp/img"$counter".jpg; x=$(($x+1)); done
これは古い質問であることは知っていますが、同じ答えを探しているときにGoogleで見つけました。ここでの答えはどれも私を完全に満足させるものではなかったので、私はより多くの検索と読書をしました。これは私自身の問題のために思いついたコマンドです。
cat {0032..1501}*.png | ffmpeg -f image2pipe -framerate 5 -i - -s 720x480 test2.avi
このようなコマンドを使用する理由は...
-start_number
必要なのはそれだけです。
私のビデオはフラッシュプレーヤー(Jwplayer)で使用されていたため、flvエンコーダーを使用しました
ffmpeg -i%d.jpg -vcodec flv test.flv
これを行うにはconvert -morph
:
convert *.jpg -delay 10 -morph 10 %05d.jpg
使用したい場合ffmpeg
、私は使用しました
ffmpeg -pattern_type glob -i '*.jpg' -vf "setpts=10*PTS" movie.mp4
ここでは、10*PTS
ffmpegに10倍遅くするように指示しています。また、速度を上げるために小数を使用することもできます。
-pattern_type glob
オーディオ付きの具体例
このオプションはhttps://superuser.com/a/782520/128124で言及されましたが、出力ビデオに音声を追加するなど、使用方法の具体例をいくつか示します。
1秒間に1つの画像を含むスライドショービデオ
ffmpeg -framerate 1 -pattern_type glob -i '*.png' \
-c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
それにいくつかの音楽を追加し、画像が終わるときに音声をカットオフします:
ffmpeg -framerate 1 -pattern_type glob -i '*.png' -i audio.ogg \
-c:a copy -shortest -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
YouTubeの2つのデモは次のとおりです。
ヒッピーになり、Theoraの特許を取得していないビデオ形式を使用します。
ffmpeg -framerate 1 -pattern_type glob -i '*.png' -i audio.ogg \
-c:a copy -shortest -c:v libtheora -r 30 -pix_fmt yuv420p out.ogg
もちろん、画像はアルファベット順で、通常は次のようにソートする必要があります。
0001-first-thing.jpg
0002-second-thing.jpg
0003-and-third.jpg
等々。
参照:http : //unix.stackexchange.com/questions/68770/converting-png-frames-to-video-at-1-fps/339399#339399
30 FPSでフレームごとに1つの画像を含む通常速度のビデオ
ffmpeg -framerate 30 -pattern_type glob -i '*.png' \
-c:v libx264 -pix_fmt yuv420p out.mp4
これは次のようなものです。
生成されるGIF:https : //askubuntu.com/questions/648603/how-to-create-an-animated-gif-from-mp4-video-via-command-line/837574#837574
オーディオを追加します。
ffmpeg -framerate 30 -pattern_type glob -i '*.png' \
-i audio.ogg -c:a copy -shortest -c:v libx264 -pix_fmt yuv420p out.mp4
結果:https : //www.youtube.com/watch?v=HG7c7lldhM4
1つの音楽ファイルをYouTubeアップロード用の固定画像付きのビデオに変換します
回答:MP3をYoutube対応のビデオ形式に変換する方法は?
いくつかの合成テスト入力画像を取得する
これらは私がこの回答で使用しているテスト画像です。
wget -O opengl-rotating-triangle.zip https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.zip?raw=true
unzip opengl-rotating-triangle.zip
cd opengl-rotating-triangle
wget -O audio.ogg https://upload.wikimedia.org/wikipedia/commons/7/74/Alnitaque_%26_Moon_Shot_-_EURO_%28Extended_Mix%29.ogg
生成される画像:https : //stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292
特殊なアルゴリズムを使用してフレーム間で圧縮できるため、ビデオがZIPよりも画像シーケンスをどれだけ圧縮するかを観察するのはクールです。
opengl-rotating-triangle.mp4
:340K opengl-rotating-triangle.zip
:730万 CLIオプションについて
名前にもかかわらず、ことに注意してください-glob
例えば、これはシェルのグロブpattersほど一般的ではありません:-i '*'
失敗:https://trac.ffmpeg.org/ticket/3620(どうやらファイルタイプは拡張子から推定されているため)。
-r 30
-framerate 1
低フレームレートのVLCなどのプレーヤーのバグを克服するために、ビデオを30 FPSにします:https : //stackoverflow.com/questions/19267443/playback-issues-in-vlc-with-low-fps-video-from-images-using- ffmpeg / 41797724#41797724したがって、各フレームを30回繰り返して、1秒あたり1枚の効果を維持します。
次のステップ
次のことも必要になります。
動画の長さに合わせて音声をカットします:https : //stackoverflow.com/questions/18444194/cutting-the-videos-based-on-start-and-end-time-using-ffmpeg
ffmpeg -i in.mp3 -ss 03:10 -to 03:30 -c copy out.mp3
カットアップオーディオの追加:ffmpegでオーディオファイルとビデオファイルをマージする方法
ffmpeg -i video.mp4 -i audio.mp3 -c copy output.mkv
TODO:コマンドラインから複数のオーディオファイルをカットしてビデオに連結する方法を学習します。
テスト済み
ffmpeg 3.4.4、vlc 3.0.3、Ubuntu 18.04。
書誌