因此,我使用以下命令将所有视频转换为/home/vids
mp4 并将其输出,/home/vids2
但现在我想添加另一个在/home/vids
.
视频链接是/home/intro/play.mp4
该视频应在 中的每个视频之前和之后播放/home/vids
。为了澄清是否/home/intro/play.mp4
为 10 秒长,如果“/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
从这里调整命令以适应您需要的任何其他细节。