それで、次のコマンドを使ってすべての画像を/home/vids
mp4に変換して出力しましたが、/home/vids2
今/home/vids
。
ビデオリンクは、で/home/intro/play.mp4
すべてのビデオの前後に再生する必要があるビデオです/home/vids
。 10秒かどうかを明確にするために、/home/intro/play.mp4
「/home/vids」の動画の長さが30秒であれば、それをマージしてから完成した動画の長さは50秒にする必要があります。
find /home/vids -type f -execdir ffmpeg -i '{}' -filter:v drawtext="fontfile=/root/FreeSans.ttf:text='TEXT EXAMPLE':[email protected]:fontsize=24:y=h-line_h-30:x=w/20*mod(t\,60)" -f mp4 -vcodec libx264 -preset fast -profile:v main -acodec aac -movflags +faststart '/home/vids2/{}.mp4' \;
答え1
ビデオが同じコーデックを使用してエンコードされている場合は、このconcat
演算子を使用できます。
コーデックとコーデックパラメータがまったく同じメディアファイルを持っている場合は、「同じコーデックを使用したファイルの関連付け」の説明に従ってそれをリンクできます。メディアに異なるコーデックがある場合は、以下の「別のコーデックを使用したファイルの関連付け」の説明に従って接続できます。
$ cat build_ffmpegs.bash
#!/bin/bash
intro=/home/intro/play.mp4
outro=/home/intro/play.mp4
cd /home/vid
for i in vid*; do
ffmpeg -f concat -safe 0 \
-i < <(printf "file '%s'\n" $intro $(readlink -f $i) $outro) \
-c copy /home/vid2/output_${i}
done
ffmpeg
このコマンドを実行すると、次のコマンドが生成されます。
ffmpeg -f concat -safe 0 -i < <(printf "file '%s'\n" /home/intro/play.mp4 /home/vid/vid1.mp4 /home/intro/play.mp4) -c copy /home/vid2/output_vid1.mp4
ffmpeg -f concat -safe 0 -i < <(printf "file '%s'\n" /home/intro/play.mp4 /home/vid/vid2.mp4 /home/intro/play.mp4) -c copy /home/vid2/output_vid2.mp4
ffmpeg -f concat -safe 0 -i < <(printf "file '%s'\n" /home/intro/play.mp4 /home/vid/vid3.mp4 /home/intro/play.mp4) -c copy /home/vid2/output_vid3.mp4
ffmpeg -f concat -safe 0 -i < <(printf "file '%s'\n" /home/intro/play.mp4 /home/vid/vid4.mp4 /home/intro/play.mp4) -c copy /home/vid2/output_vid4.mp4
ffmpeg -f concat -safe 0 -i < <(printf "file '%s'\n" /home/intro/play.mp4 /home/vid/vid5.mp4 /home/intro/play.mp4) -c copy /home/vid2/output_vid5.mp4
ffmpeg
必要な他の詳細に合わせてここでコマンドを調整できる必要があります。