Я пытаюсь сделать видео из изображения и аудио с пакетом ffmpeg python, изображение будет зацикливаться до тех пор, пока звук не закончится, я попробовал цикл = 1 и самый короткий аргумент, но не работает, ffmpeg может работать бесконечно. Это мой код:
audio = ffmpeg.input("test/audios/1.mp3",)
image = ffmpeg.input("test/images/1.jpg", loop = "1")
video = ffmpeg.concat(image, audio, v=1, a=1).output("test/test.mp4", shortest=None, vcodec = "mjpeg", acodec = "mp3")
ffmpeg.run(video)
информация из get_args()
['-loop', '1', '-i', 'test/images/1.jpg', '-i', 'test/audios/1.mp3', '-filter_complex', '[0][1]concat=a=1:n=1:v=1[s0]', '-map', '[s0]', '-acodec', 'mp3', '-shortest', '-vcodec', 'mjpeg', 'test/test.mp4']






Основная проблема заключается в использовании ffmpeg.concat для слияния видео и аудио.
ffmpeg.concat применяет concat filer.
Можно использовать concat-фильтр для слияния видео- и аудиопотоков, но фильтр предназначен для конкатенации («сцепления») нескольких видео- (и/или аудио) потоков.
Аргумент shortest не влияет на фильтр concat, поэтому ffmpeg работает бесконечно.
Вместо использования фильтра concat используйте видео- и аудиовходы в качестве первых аргументов для ffmpeg.output (до "test/test.mp4").
Другие вопросы:
libx264).pix_fmt='yuvj420p' (для лучшей совместимости).framerate=fps.Пример кода:
import ffmpeg
fps = 10 # Use 10 fps (the default is 25fps).
audio = ffmpeg.input("test/audios/1.mp3").audio
image = ffmpeg.input("test/images/1.jpg", loop = "1", framerate=fps).video
ffmpeg_command = ffmpeg.output(image, audio, "test/test.mov", shortest=None, vcodec = "mjpeg", pix_fmt='yuvj420p', acodec = "mp3")
ffmpeg_command.overwrite_output().run()
Для лучшего качества и скорости мы можем избежать повторного кодирования с использованием аргумента codec = "copy":
ffmpeg_command = ffmpeg.output(image, audio, "test/test.mov", shortest=None, codec = "copy")
Большое спасибо. Я пытался использовать fluent-ffmpeg, без комплекса фильтров по умолчанию.