Como concatenar vídeos com um intervalo de silêncio de 4 segundos entre cada um sobreposto por uma imagem pic.jpg
:
#Create a silence.mp4 file with audio silence over any given image:
#note this is all one line with the backslashes removed.
ffmpeg -loop 1 -i /home/youruser/pic.jpg -f lavfi \
-i anullsrc=channel_layout=5.1:sample_rate=48000 -t 4 \
-c:v libx264 -t 4 -pix_fmt yuv420p -vf scale=480:320 -y silence.mp4
#transform silence.mp4 to silence.ts so that its type is
#fluid and conforms to the original
ffmpeg -i silence.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts silence.ts
#loop over all the mp4 files numerically making sure '10' doesn't come before '2'
for f in $(ls ./*.mp4 | sort -V)
do
#Transform all the given mp4 files to ts files.
ffmpeg -i $f -c copy -bsf:v h264_mp4toannexb -f mpegts $f.ts
if [ $counter -eq 0 ]; then
all_transport_files="$(basename $f.ts)"
else
#inject the silence in between the previous and next
all_transport_files="$all_transport_files|silence.ts|$(basename $f.ts)"
fi
#keep track of which one we're on, first is not like the others
((counter++))
echo $counter
done
#final concate string with all videos in order, with silence between
concat_and_all_files="concat:$all_transport_files"
#Join all the ts files back together into output.mp4
ffmpeg -async 1 -i "$concat_and_all_files" -c copy -bsf:a aac_adtstoasc output.mp4
Voila, todos os seus arquivos de vídeo separados por algum silêncio. Se isso não funcionar para você, certifique-se de que channel_layout, sample_rate, taxa de quadros e outros atributos sejam idênticos para todos os vídeos, incluindo o silence.mp4. Audio e Video codec hell é um incêndio em aterros de ofuscação e abuso de pessoas tentando eliminar concorrentes do espaço de vídeo.