Я запускаю следующую команду:
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 просматривает только видео дорожку по длине, и, поскольку картинка имеет длину всего кадра или что-то в этом роде, возможно, это мешает ей.
Кусок кода, который работает для меня, с другого форума:
источник
Я взял код Павла, который тоже работал для меня, и сократил его, обрезав ненужные опции:
это общая форма, которая работает с любым изображением и аудиофайлом в качестве входных данных и создает видеофайл в качестве выходных данных.
Тем не менее, поскольку ваш видеопоток будет состоять из одного изображения, повторяющегося бесконечно, вы можете установить низкую частоту кадров (то есть количество изображений, которые появляются в секунду) с помощью
-r
. Обратите внимание, что не все выходные контейнеры допускают низкую частоту кадров. То, что делаетavi
, так что вы могли бы сделать:это приведет к созданию видеофайла с частотой кадров 0,1 (т.е. одно изображение каждые 10 секунд) вместо значения по умолчанию 25. Это повлияет на размер файла, но не на качество видео. В конце концов, вы можете установить битрейт аудио, чтобы получить лучшее качество звука
-ab
. Это команда, которую я на самом деле использую для создания такого рода видео для YouTube:источник
ffmpeg -loop 1 -shortest -r 0.1 -i audio.mp3 -i image.jpg output.avi
но получил «Вариант цикла не найден». Любые идеи?ffmpeg -i <audio file> -loop 1 -i <image file> -shortest <output video file>
с помощью avconv:
источник
-shortest
вывода вместо ручного объявления времени (также используйтеffmpeg
вместо,avconv
если возможно).Я заставил это работать после долгих экспериментов: https://www.youtube.com/watch?v=qjlDT819Q3s
Преобразуйте изображения в видео согласно 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 секунд.
Объедините достаточное количество копий вышеупомянутого видео, чтобы охватить продолжительность вашего аудио согласно 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
сделан вручную, чтобы содержать столько копий, сколько необходимо: копии = длина аудио / видео)Смешайте ваш аудио с видео, полученным в 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.источник