Как конвертировать 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. Среди решений, перечисленных на странице:
FFmpeg, затем загрузите файлы на YouTube
ffmpeg -loop 1 -i picture.jpg -i music.mp3 -shortest -acodec copy video.mp4
Зациклите соответственно все mp3-файлы, затем загрузите все полученные видеофайлы.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
в сценарии.