Как конвертировать MP3 в видео в формате YouTube?

У меня есть много файлов MP3 на моем веб-сайте, и я решил загрузить их на Youtube, но, к сожалению для меня, Youtube не позволяет мне это делать. Требуется только видео формат.

Как я могу преобразовать эти MP3-файлы в видео и добавить один и тот же набор изображений (одно или несколько изображений) в полученный формат видео.

Мне нужно сделать это оптом, а не индивидуально, у меня есть сотни файлов MP3.

Это может быть приложение на базе Windows или Linux.

4 ответа

Здесь есть некоторая информация об использовании ffmpeg для кодирования звука с помощью неподвижного изображения для YouTube, а также несколько советов по выполнению массовых преобразований в Windows здесь.

Что касается кодирования, я считаю, что это работает:

ffmpeg -loop 1 -r 1 -i pic.jpg -i audio.mp3 -c:a copy -shortest output.avi

Вы также можете рассмотреть простой bash oneliner вместо сценария python -

for i in *.mp3; do ffmpeg -v quiet -i "picture.jpg" -i "$i" -shortest -acodec copy "`sed 's/mp3/mp4/g'<<<$i`"; done

Это преобразует все mp3 файлы в вашем текущем каталоге в mp4 видео с picture.jpg.

Для конвертации flac в mp3 это будет

for i in *.flac; do ffmpeg -v quiet -i "$i" -ab 320k -ac 2 -ar 48000 "`sed 's/flac/mp3/g'<<<$i`"; done

Обратите внимание на "-v quiet", который закрывает громкий рот ffmpeg, а также двойные кавычки вокруг $i и sed - это гарантирует, что он не будет ошибаться с именами файлов, содержащими пробелы.

Совет: преобразование в видео занимает довольно много времени (по крайней мере, для меня). Попробуйте использовать -threads 4 (или любое другое значение, конечно. Это не имеет никакого смысла для одноядерного процессора)

Редактировать: я обнаружил, что "-loop 1" (предложенный другими) создает цикл (как удивительно!), Который на самом деле бесконечен. На моем gentoo это означает, что он съест все ваши вкусные кусочки. Без "-loop 1" он работает просто отлично, поэтому я предлагаю вам пойти на это.

Некоторые решения для Ubuntu и других систем Linux можно найти по адресу http://ubuntuforums.org/showthread.php?t=1686664. Большинство из них представляют собой команды оболочки или какой-либо другой язык быстрого написания сценариев, который можно зациклить для всех файлов MP3 и выводить видеофайлы. Затем вы можете просто поставить видеофайлы в очередь для загрузки на YouTube. Среди решений, перечисленных на странице:

  1. FFmpeg, затем загрузите файлы на YouTube
    ffmpeg -loop 1 -i picture.jpg -i music.mp3 -shortest -acodec copy video.mp4Зациклите соответственно все mp3-файлы, затем загрузите все полученные видеофайлы.

  2. Python, конвертировать в mp4, а затем загружать файлы на YouTube

    #! /usr/bin/env python

    import sys, os

    inputOne = sys.argv[1]inputTwo = sys.argv[2]

    for i in sys.argv[1:]:if '.mp3' in i:output = i.replace('mp3','mp4')

    cmd = 'ffmpeg -loop_input -i "'+inputOne+'" -i "'+inputTwo+'" -shortest -acodec copy "'+output+'"'

    os.system(cmd)

Он также использует ffmpeg и принимает музыку и изображение в качестве аргументов.

Конвертировать рекурсивно в подкаталоги

Вот простой find версия, которая конвертирует все .mp3 в текущем каталоге и его подкаталогах в mp4:

find . -iname *.mp3 | sort | while IFS="" read -r f; do
  ffmpeg \
    -nostdin \
    -loop 1 \
    -r 1 \
    -i image.jpg \
    -i "$f" \
    -vcodec libx264 \
    -acodec copy \
    -shortest \
    "$(basename "${f%.*}.mp4")" \
  ;
done

Получите некоторые тестовые данные:

wget -O image.jpg https://upload.wikimedia.org/wikipedia/commons/8/83/Lama_Portrait_06072007_01.jpg
wget -O audio.ogg https://upload.wikimedia.org/wikipedia/commons/4/4f/BackUpAndPush.ogg
ffmpeg -i audio.ogg audio.mp3

Загруженный вывод: https://www.youtube.com/watch?v=tv3a6kP6BDA

Если ffmpeg жалуется, что размер изображения не кратен 2 (требуется для libx264), вы можете сначала найти размер изображения с помощью Imagemagick:

identify image.jpg

а затем округлите ширину и высоту вниз, чтобы сделать их равными, например, если бы размер был 1023x513, мы бы использовали:

 convert image.jpg -resize 1024x512! imag2.jpg

где ! вынуждает использовать этот размер: https://unix.stackexchange.com/questions/319504/force-graphicsmagick-to-resize-image-to-specific-width

-nostdin требуется, потому что ffmpeg читает байты из стандартного ввода в противном случае, и ломает наш read!!! https://stackoverflow.com/questions/52374260/bash-variable-changes-in-loop-with-ffmpeg

-vcodec libx264 резко уменьшает конечный размер видео, чтобы он был намного ближе к исходному MP3: стандартный видеокодек выглядит намного хуже. Возможно было бы еще больше уменьшить увеличение размера за счет меньшего количества ключевых кадров: https://stackoverflow.com/questions/30979714/how-to-change-keyframe-interval-in-ffmpeg В наших примерах данных у нас было +3 МБ на 3 минуты 3 МБ MP3 с изображением 1,1 МБ.

Смотрите также: Объедините одно изображение + один аудиофайл, чтобы сделать одно видео, используя FFmpeg

Процедурное видео представление аудио

ffmpeg очень полезен, и вы можете сгенерировать несколько видео-представлений вашего аудио, используя команды вида:

ffmpeg -i audio.mp3 \
  -filter_complex "[0:a]avectorscope=s=1920x1080,format=yuv420p[v]" \
  -map "[v]" -map 0:a avectorscope.mp4

Вот avectorscope это конкретный тип представления.

Вот удобный список таких форматов: https://gist.github.com/seyoum/4455e9bed74241bfbd640a8083fd38b3 все из которых описаны в: http://ffmpeg.org/ffmpeg-filters.html

См. Также: Создание видеофайла из аудиофайла и добавление визуализаций из аудио.

Протестировано в Ubuntu 19.04, ffmpeg 4.1.3. По состоянию на август 2019 года файлы загружены на YouTube в порядке штрафа.

Скопируйте ваши mp3-файлы (или, что бы вы ни хотели кодировать, измените формат аудио соответственно) в одну папку. Также поместите в него экземпляр ffmpeg с обложкой под названием herringbone.jpg,

Затем перейдите в CMD и перейдите в папку.

Скопируйте это:

for %a in (*.mp3) do "ffmpeg" -loop 1 -r 1 -i "Herringbone.jpg" -vcodec mpeg4 -i %a -acodec copy -shortest %a".mp4"

(Чтобы вставить в окно CMD, нажмите на левое верхнее окно строки cmd. Выберите EDIT / Paste.)

Нажмите Ввод.

Работает с последней версией кодировщика ffmpeg (4.1.1)

Я думаю, вы можете изменить формат видео тоже. Просто перейдите с mp4 на то, что вы хотите и что поддерживает ffmpeg.

Я нашел это на другом форуме, но он не работал, пока я не поменял место -shortest в сценарии.

Другие вопросы по тегам