Для первой точки пули я не вижу прямой команды.Я предлагаю использовать ffprobe
для расчета продолжительности обоих файлов и подсчета количества циклов видео, которые необходимо воспроизвести в течение продолжительности аудио.
Следующее приведет к продолжительности входных данных.
ffprobe -i input_media -show_entries format=duration -v quiet -of csv="p=0"
Затем вы можете зациклить видео вручную до тех пор, пока не будете удовлетворены вычисленное значение видеоэкземпляров.
ffmpeg -i input_audio -f concat -i <(for i in {1..n}; do printf "file '%s'\n" input_video; done) -c:v copy -c:a copy -shortest output_video
1..n
обозначает количество циклов зацикливания видео,Вместо -shortest
вы можете использовать -t
, так как вы уже рассчитали продолжительность аудио.
Ниже приведен связанный скрипт оболочки.
#!/bin/bash
audio_duration=$(ffprobe -i ${1} -show_entries format=duration -v quiet -of csv="p=0")
video_duration=$(ffprobe -i ${2} -show_entries format=duration -v quiet -of csv="p=0")
n_loops=$(echo "(${audio_duration} / ${video_duration}) + 1"|bc)
ffmpeg -i ${1} -f concat -i <(for i in {1..${n_loops}}; do printf "file '%s'\n" ${2}; done) -c:v copy -c:a copy -shortest ${3}
Для окон вы можете конвертировать этоСценарий оболочки для пакетного сценария.
Дополнительная информация:
Надеюсь, это поможет!