Приєднуйтесь до аудіо та зображення -> Виведіть як відео за допомогою FFmpeg


8

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

Хтось знає, як використовувати FFMPEG для приєднання двох? Я хотів би показати зображення протягом тривалості звуку.

Будь-які ідеї?


Який ОС ви використовуєте
subanki

Відповіді:


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 60s + 3s) x 30fps = 14490 vf)

Ресурс звідси


Привіт Субанкі - дякую за Ваш коментар !! Я цього не розумію. Мені потрібно вивести відеофайл із аудіо та зображення. Як це робити?
user41559

@nayrsllew Я щойно з'ясував, що код не працює, вибачте. Ну, основне - перетворити його на відео за допомогою ffmpeg -f image2 -i зображення% 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

перезаписувати вихідні файли без запиту

-пук 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.

-аб

швидкість передачі звуку

результат.mp4

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


1

Цей простий скрипт bash / cygwin, який АВТОМАГАЛЬНО кодує всі файли з розширенням $ AUDIO в каталозі до відеофайлу mp4 10FPS mp4 у каталозі із вбудованим зображенням 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 секундами). Це значення називається x відтепер.

  3. Перейдіть до "відео> частота кадрів", виберіть "змінити на частоту кадрів (кадрів в секунду)" і введіть "1 / x" як значення. Крім того, якщо ви хочете мати нормальну частоту кадрів у отриманому файлі, наприклад 25 кадрів в секунду, виберіть "Перетворити в кадр в секунду" та введіть туди потрібну частоту кадрів.

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

  5. Перейдіть до "аудіо> аудіо з іншого файлу" і виберіть там своє аудіо. Якщо потрібно, виберіть компресію для аудіо.

  6. Збережіть файл.

Джерело: stephanV


Дякую StephanV .. Мені потрібно використовувати FFMpeg, але це хороша пропозиція .. дякую
user41559
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.