22

Я запускаю следующую команду:

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 просматривает только видео дорожку по длине, и поскольку картинка имеет длину всего кадра или что-то в этом роде, может быть, это мешает ей.

5 ответов5

12

Вот что сработало:

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: лучший инструмент для обработки видео и аудио

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
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
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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .