Объединить аудио и изображения -> Вывести как видео, используя FFmpeg

11324
user41559

У меня есть 1 изображение (jpg) и 1 аудиофайл (MP3), и я хотел бы вывести его в виде видеофайла (например, AVI).

Кто-нибудь знает, как использовать FFMPEG для объединения двух? Я хотел бы показать изображение во время аудио.

Любые идеи кто-нибудь?

8
Какой Os вы используете subanki 14 лет назад 0

5 ответов на вопрос

7
evilsoup

Существует гораздо более простой способ, чем предложенный здесь, который не требует вычисления количества кадров или ввода длины отдельных файлов (особенно лучше для пакетной обработки). В последней версии ffmpeg вы можете использовать -shortestопцию, которая останавливает кодирование, когда заканчивается самый короткий поток - в данном случае, input.mp3 (поскольку изображение будет зацикливаться вечно, его длина будет бесконечной):

ffmpeg -i input.mp3 -f image2 -loop 1 -r 2 -i input.jpg \ -shortest -c:a copy -c:v libx264 -crf 23 -preset veryfast output.mp4 

Это использует 2 кадра в секунду для изображения / видео, что должно быть хорошо, но вы можете установить его на более 25 стандартных, если хотите.

https://stackoverflow.com/questions/48141471/create-video-from-images-and-audio-with-varying-image-durations-using-ffmpeg Muhammad Umer 6 лет назад 0
5
subanki

Если вы работаете в Windows, вы можете сделать это и в Windows Movie Maker ... если вам нужны инструкции, пожалуйста, оставьте комментарий

Для FFmpeg используйте это

ffmpeg -loop_input -vframes 14490 -i imagine.jpg -i audio.mp3 -y -r 30  -b 2500k -acodec ac3 -ab 384k -vcodec mpeg4 result.mp4 
  • vframes 14490 - это количество кадров, которые должны быть зациклены, чтобы иметь непрерывное изображение для всего файла audio.mp3

    Пример: в течение 8 минут и 3 секунд ((8 м x 60 с + 3 с) x 30 кадр / с = 14490 VF)

Ресурс отсюда

Привет Субанки - спасибо за ваш комментарий !! Я не понимаю этого, хотя .. Мне нужно вывести видео файл из аудио и изображения. Как это сделать? user41559 14 лет назад 0
@nayrsllew Я только что узнал, что код не работает, извините ... Ну, главное - конвертировать его в видео с помощью ffmpeg -f image2 -i image% d.jpg video.mpg, а затем объединять видео и аудио subanki 14 лет назад 0
обновил мой ответ, это было сложно, но мой 1-часовой поиск в Google нашел его, я счастлив :) subanki 14 лет назад 0
Ответ правильный, почему внизу проголосуй :( subanki 14 лет назад 0
Привет не могу, вы можете помочь мне здесь. Полученное видео слишком большое. Мне нужно видео того же размера, mp3-файла. Мой файл изображения очень маленький. Также мне нужно загрузить это видео на Youtube. Parminder 12 лет назад 0
@Parminder Невозможно получить тот же размер с кодировкой AVI, если вы не сожмете mp3 дальше. Несмотря на небольшой размер, ваше изображение будет многократно увеличено, чтобы соответствовать длине песни. clabacchio 12 лет назад 0
https://stackoverflow.com/questions/48141471/create-video-from-images-and-audio-with-varying-image-durations-using-ffmpeg Muhammad Umer 6 лет назад 0
5
Jon Hall

у субанки почти все было правильно. Рабочая командная строка выглядит следующим образом;

ffmpeg -y -loop 1 -i image.jpg -i audio.mp3 -r 30 -b:v 2500k -vframes 14490 -acodec libvo_aacenc -ab 160k result.mp4
-y

перезаписать выходные файлы без запроса

петля 1

Опция -loop_input устарела, используйте -loop 1. См. Документацию ffmpeg .

входной файл (ы)

Количество кадров в секунду
Может также быть выражена как: -r 30000/1001 дает ФПС 29.97nnn

-b: v

битрейт видео; Чем выше число, тем лучше качество и больше размер файла.

-vframes

Как объяснено выше; взять общее время вашего аудиофайла в секундах (например, 00:02:41 (2 минуты 41 секунда) равно 161 общее количество секунд (2 х 60) + 41). Затем умножьте общее количество секунд на количество кадров в секунду, указанное вами с помощью -r (например, 161 x 30 = 4830).

-vframes можно заменить на -t 161 (-t длительность записи или транскодирование «длительности» секунд аудио / видео)

-acodec

Используйте правильный аудиокодек для типа файла, который вы создаете. Для .mp4 это должен быть формат AAC. Кодек libvo_aacenc был правильным кодеком для моей системы Windows 7.

-ab

аудио битрейт

result.mp4

Это имя выходного файла. Это может быть любое допустимое имя файла для вашей системы. Расширение поможет ffmpeg определить правильный видеокодек, если вы не укажете его с помощью -vcodec.

1
user113368

Этот простой скрипт bash / cygwin, который АВТОМАГИЧЕСКИ закодирует все файлы с расширением $ AUDIO в каталоге в видеофайл MPF 10FPS в каталоге с вложенным изображением folder.jpg,

полезно для загрузки на YouTube;)

AUDIO=m4a;  $'\n'; for a in `ls -1 *.$AUDIO `; do ffmpeg -i $a &2> $a.info ; done; cat '' > do.sh IFS=$'\n';  for a in `ls -1 *.$AUDIO`; do D=`grep Duration $a.info | cut -d',' -f1 | cut -d' ' -f4 | cut -d'.' -f1 | head -n1 `; S=$(( $( echo $D | cut -d':' -f2 ) * 60 + 1 + ` echo $D | cut -d':' -f3 ` )) ; echo ffmpeg -loop_input -vframes $(( $S * 10 )) -i folder.jpg -i \"$a\" -y -r 10 -b 2500k -ab 384k -vcodec mpeg4 \"$a.mp4\" >> do.sh; done; split -l5 do.sh xa* & 
0
Grumpy ol' Bear

Скачайте VirtualDub и сделайте следующее:

  1. Откройте изображение, как если бы вы открыли обычный видеофайл.

  2. Вычислите продолжительность звука в секундах и округлите ее до ближайшей целой секунды (например, 78,34 секунды становятся 79 секундами). Это значение теперь называется х.

  3. Перейдите в «video> frame rate», выберите «change to frame rate (fps)» и введите «1 / x» в качестве значения. Кроме того, если вы хотите, чтобы в результирующем файле была нормальная частота кадров, например, 25 кадров в секунду, выберите «Преобразовать в кадры в секунду» и введите требуемую частоту кадров.

  4. Выберите «видео> сжатие» и выберите свой любимый вкус. Может случиться так, что вам нужно отрегулировать размер изображения с помощью фильтра изменения размера.

  5. Перейдите в «аудио> аудио из другого файла» и выберите там свой звук. При необходимости выберите сжатие для аудио.

  6. Сохраните файл.

Источник: СтефанВ

Спасибо StephanV .. Мне нужно использовать FFMpeg, но это хорошее предложение .. спасибо user41559 14 лет назад 0