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


8

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

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

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


Ответы:


6

Если вы работаете в 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 13.09.10

@nayrsllew Я только что узнал, что код не работает, извините .. Ну, главное - конвертировать его в видео с помощью ffmpeg -f image2 -i image% d.jpg video.mpg, а затем соединять видео и аудио
subanki

обновил мой ответ, это было сложно, но мой 1-часовой поиск в Google нашел его, я счастлив :)
subanki

Ответ правильный, почему внизу голосование :(
subanki

Привет не могу, вы можете помочь мне здесь. Полученное видео слишком большое. Мне нужно видео того же размера, mp3-файла. Мой файл изображения очень маленький. Также мне нужно загрузить это видео на Youtube.
Парминдер

7

Существует гораздо более простой способ, чем предложенный здесь, который не требует вычисления количества кадров или ввода длины отдельных файлов (особенно лучше для пакетной обработки). В последней версии 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 стандартных, если хотите.



5

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

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

Этот простой скрипт 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

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

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

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

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

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

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

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

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


Спасибо StephanV .. Мне нужно использовать FFMpeg, но это хорошее предложение .. спасибо
user41559 13.09.10
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.