FFMPEG: Цикл видео по длине аудио

Например, если видео длится 1 минуту, а аудио — 1 час. Зациклить видео на протяжении 1 часа звуковой дорожки.

Я использую это решение для зацикливания изображения по длине аудио.

ffmpeg -y -loop 1 -r 6 -i image.jpg -i audio.mp3 -shortest -c:v libx264 -preset ultrafast -tune stillimage -pix_fmt yuv420p -c:a copy output.mp4

Но это не работает для видео, замена image.jpg на video.mp4 даст ошибку no loop found.

Ответы (2)

Для видео следует использовать опцию stream_loop.

ffmpeg -y -stream_loop -1 -i video -i audio.mp3 -fflags +shortest -max_interleave_delta 50000 -c copy output.mp4

Вам придется использовать самую последнюю версию ffmpeg (> Nov '17), так как в stream_loop была ошибка, исправленная совсем недавно.

Поскольку кодирование видео дорого с точки зрения времени и процессора, я использовал потоковое копирование. Для большинства видео это нормально. В противном случае вам придется перекодировать.


Изменить : еще одна ошибка, связанная с stream_loop, см. обходной путь ниже.

ffmpeg  -stream_loop -1 -i 1.mp4 -c copy -v 0 -f nut - | ffmpeg -thread_queue_size 10K -i - -i 1.mp3 -c copy -map 0:v -map 1:a -shortest -y out.mp4
Привет. Это просто обрезает звук до длины видео, я имел в виду наоборот. Зацикливайте видео на протяжении всего аудио. На данный момент я использую решение на video.stackexchange.com/questions/12905/…
Используйте отредактированную команду.
Я установил videoчасть на video.mp4, видео воспроизводится до исходной длины и останавливается, в то время как звук продолжает воспроизводиться, видео просто останавливает последний кадр на всем протяжении.
Поделитесь полным логом.
pastebin.com/nEcsD7H7 включает MediaInfo, поскольку вы можете видеть, что длина видео и аудио различается.
См. новую команду в конце
Первая команда создала видео без звука продолжительностью более 44 часов (из 3-минутной песни), прежде чем я заметил и остановил его, а вторая команда создает зацикленное видео без звука правильной длины.
первый зацикливается навсегда, создавая бесконечную длину видео, пока я его не отменю, второй не помещает звук
Этот работает: stackoverflow.com/a/55841289/3310334

Что ж, теперь поведение по умолчанию текущего/последнего ffmpeg через:

c:\sbin\ffmpeg.exe -i "D:\video.m4s" -i "\audio.m4s" -c:v copy -c:a copy "D:\combined.mp4"

дополняет/зацикливает последний кадр видео до audio.length=== video.length.

Посмотрите, приемлемо ли это для вас.

Подробнее о поведении:

  • если ( audio.length< video.length), то заполните звук тишиной, чтобыaudio.length === video.length
  • если ( audio.length> v ideo.length), то дополните видео последним кадром этого видео, чтобыaudio.length === video.length