Створення відео з аудіо та нерухомим зображенням для YouTube


23

Я виконую наступну команду:

ffmpeg -i audio.mp3 -ar 44100 -f image2 -i logo.jpg -r 15 -b 1800 -s 640x480 foo.mov

Що успішно виводить відео з моїм записаним аудіо та зображенням на ньому.

Коли я намагаюся завантажувати це на YouTube, його не вдається обробити, незалежно від форматів, які я намагаюся: .mov, .avi, .flv, .mp4

Чи є якесь налаштування, яке я відсутній у вищезазначеному, який би створив формат, який Youtube прийме? Я спробував переглянути документацію на ffmpeg, але я перебуваю над головою.

Я зробив експеримент, поставивши 2-секундне відео із 30-секундним mp3. Коли я завантажив у youtube, отримане відео було всього 2 секунди. Тож може бути так, що YouTube дивиться лише на відеодоріжку за довжиною, а оскільки зображення є лише кадром довгим чи будь-яким іншим, можливо, це йому притаманне.

Відповіді:


13

Ось що працювало:

ffmpeg -i audio.mp3 -f image2 -loop 1 -i logo.jpg 
-r 15 -s 640x480 \
-c:v libx264 -crf 18 -tune stillimage -preset medium \
-shortest foo.mov

Зокрема, loopваріант, який буде дублювати зображення як кадри. Тоді також знадобиться shortestможливість утримувати файл від росту та зростання (таким чином він скорочує його до довжини найкоротшого потоку - ось, аудіофайл).

Цей rпараметр змінює частоту кадрів і crf 18встановлює якість (використовуйте тут вище значення для нижчої якості відео). Дивіться тут для більш детальної інформації: FFmpeg: Найвищий інструмент для маніпуляції відео та аудіо


2
Не працює для мене. Я отримую однокадровий фільм.
Павло Власов

Я зараз працюю для мене.
molnarg

4

Код, який працює для мене, з іншого форуму:

ffmpeg -loop 1 -r ntsc -i image.jpg -i song.mp3 -c:a copy -c:v libx264 -preset fast -threads 0 -shortest output.mkv 

2

Я взяв код Павла, який теж працював на мене, і скоротив його, обрізаючи непотрібні варіанти:

ffmpeg -loop 1 -shortest -i <audio file> -i <image file> <output video file>

це загальна форма, яка працює з будь-яким зображенням і звуковим файлом як вхідним і створює відеофайл як вихідний.

Це означає, що оскільки ваш відеопотік буде створений з однієї картини, повторюваної нескінченно, ви можете встановити низьку частоту кадрів (тобто кількість зображень, що з’являються за секунду) -r. Зауважте, що не всі вихідні контейнери допускають низьку частоту кадрів. Одне з них - aviце ви можете зробити:

ffmpeg -loop 1 -shortest -r 0.1 -i <audio file> -i <image file> output.avi

це створить відеофайл із частотою кадрів 0,1 (тобто одне зображення кожні 10 секунд), а не 25 за замовчуванням. Це вплине на розмір файлу, але не на якість відео. Зрештою, ви можете встановити бітрейт аудіо для покращення якості звуку -ab. Це команда, яку я насправді використовую для створення такого роду відео для youtube:

ffmpeg -loop 1 -shortest -r 0.1 -i <audio file> -i <image file> -ab 128k output.avi

Спасибі. Я побіг, ffmpeg -loop 1 -shortest -r 0.1 -i audio.mp3 -i image.jpg output.aviале дістав "Опцію циклу не знайдено". Будь-які ідеї?
Полковник Паніка

@col Якщо ви все ще зацікавлені: вам потрібна опція циклу перед введенням зображення, а не перед звуком.
slhck

ось що для мене спрацювало:ffmpeg -i <audio file> -loop 1 -i <image file> -shortest <output video file>
Каролінгер

2

з avconv:

avconv -i input.mp3 -loop 1 -f image2 -i logo.png -r 30 -s 640x480 -ab 128k -ar 44100 -ac 1 -ss 00:00:00.000 -t 01:02:03.123 foo.ogv

Ласкаво просимо до SuperUser і дякуємо за вашу відповідь. Ще детальніше про те, що ви пропонуєте, і чому було б корисно.
Бред Паттон

1
відповідь через ffmpeg застаріла
ZiTAL

2
Жоден проект ffmpeg не триває. Виникла суперечка, яка призвела до застарілого повідомлення. Дивіться stackoverflow.com/questions/9477115/…
Бред Паттон

2
Використовуйте параметри -shortestвиводу замість того, щоб вручну оголошувати час (також використовуйте ffmpegзамість, avconvякщо можливо).
логіан

2
Склав баш сценарій на випадок, коли когось цікавить
Даллайлен

0

Я почав це працювати після довгих експериментів: https://www.youtube.com/watch?v=qjlDT819Q3s

  1. Перетворення зображень у відео відповідно до https://trac.ffmpeg.org/wiki/Create%20a%20video%20slideshow%20from%20images :

    ffmpeg -framerate 1/20 -i png/img-%03d.png -c:v libx264 -vf "fps=25,format=yuv420p" png.mp4

    Тут я використовую кілька зображень і змушую їх змінюватися кожні 20-ті.

  2. З’єднайте достатньо копій вищевказаного відео, щоб охопити тривалість звуку відповідно до https://trac.ffmpeg.org/wiki/Concatenate . Інші рішення, як-от сподівання ffmpeg -i wav.wav -i png.mp4 youtube.mp4зробити правильно, YouTube відкинув (також такі гравці, як VLC, плутаються і не можуть шукати належним чином). Я здогадуюсь, що часові позиції потрібно коригувати в копіях, що ffmpegне робить, якщо вони не з'єднані:

    ffmpeg -f concat -i pngs.txt -c copy pngs.mp4

    (де файл pngs.txtвиготовляється вручну, щоб містити стільки копій, скільки потрібно: копії = довжина аудіо / довжина відео)

  3. Змішайте аудіо з відео, отриманим у 2 відповідно до https://www.virag.si/2015/06/encoding-videos-for-youtube-with-ffmpeg/ :

    ffmpeg -i pngs.mp4 -i wav.wav -shortest -codec:v libx264 -crf 21 -bf 2 -flags +cgop -pix_fmt yuv420p -codec:a aac -strict -2 -b:a 384k -r:a 48000 -movflags faststart youtube.mp4

Тепер файл youtube.mp4повинен бути прийнятий YT.

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