ffmpeg将视频添加到另一个视频的开头和结尾

ffmpeg将视频添加到另一个视频的开头和结尾

因此,我使用以下命令将所有视频转换为/home/vidsmp4 并将其输出,/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从这里调整命令以适应您需要的任何其他细节。

参考

相关内容