FFmpeg: пакетное преобразование всего аудио (mp3) в папке в видео (mp4) с обложкой альбома

Я ищу пакетное преобразование всего аудио (mp3) в папке в видео (mp4) с обложкой альбома. Это для загрузки аудио на YouTube. У меня есть практически рабочий код, но я хочу все это автоматизировать.

Вот код из файла .bat, который я использую.

(источник: Пакетное изображение FFMpeg + несколько аудио в видео)

echo off
for %%a in ("*.mp3") do "C:\ffmpeg\bin\ffmpeg" -loop 1 -i  "C:\ffmpeg\bin\input.jpg.jpg" -i "%%a" -c:v libx264 -preset veryslow -tune stillimage -crf 18 -pix_fmt yuv420p -c:a aac -shortest -strict experimental -b:a 192k -shortest "C:\mp4\%%~na.mp4"
pause
  • "C: \ ffmpeg \ bin \ ffmpeg" папка кодека
  • Путь к изображению "C: \ ffmpeg \ bin \ input.jpg"
  • Папка вывода "C: \ mp4 \ %% ~ na.mp4"
  • -vf scale = 854: 480 вы можете указать разрешение вашего видео 16: 9 для видео на YouTube
  • -c: aac -shortest использовать кодек aac, указав -shortest, длина видео будет соответствовать длине аудио

Это отлично работает, за исключением того, что мне каждый раз приходится вручную ставить обложку альбома. Я хочу, чтобы ffmpeg автоматически извлекал обложку альбома из каждого аудиофайла, а затем конвертировал ее в видео в пакетном режиме.

Это код для извлечения обложек альбомов из файлов .mp3.

ffmpeg -i input.mp3 -an -vcodec copy cover.jpg

Спасибо.


person coden00b    schedule 24.01.2020    source источник


Ответы (2)


Просто переместите команду извлечения в цикл. Что-то вроде (непроверенного):

echo off
for %%a in ("*.mp3") do (
  ffmpeg -i "%%a" -an -vcodec copy "C:\mp4\%%~na.jpg"
  "C:\ffmpeg\bin\ffmpeg" -loop 1 -i  "C:\mp4\%%~na.jpg" -i "%%a" -c:v libx264 -preset veryslow -tune stillimage -crf 18 -pix_fmt yuv420p -c:a aac -shortest -strict experimental -b:a 192k -shortest "C:\mp4\%%~na.mp4" )
pause
person L. Scott Johnson    schedule 24.01.2020
comment
Большое спасибо за Вашу помощь. Он автоматически извлекает обложки альбомов из файлов .mp3 в папку. К сожалению, это не работает после этого .. Я не перехожу к преобразованию музыки в видеофайлы после этого ... Просто показывает эту ошибку .. [png @ 000001cb67b4ce00] Неверная подпись PNG 0x89504E470D0A1A. [png @ 000001cb67b49e80] Недопустимая подпись PNG 0x89504E470D0A1A. Ошибка при декодировании потока № 0: 0: При обработке ввода обнаружены неверные данные. Последнее сообщение повторяется 1 раз i.imgur. com / lQ2WPrq.png - person coden00b; 25.01.2020
comment
У меня было несоответствие в именах файлов jpg. Я отредактировал свой ответ, чтобы исправить это. Опять же, не тестировалось - поэтому вам, возможно, придется настроить вторую команду ffmpeg, чтобы она соответствовала имени / формату или тому, что было создано первой. Если это не удается, просто попробуйте различные конструкции для второй команды (используя в качестве примера один из выходных файлов jpg цикла), пока не выясните, что работает, а затем используйте это в цикле. - person L. Scott Johnson; 25.01.2020
comment
В очередной раз благодарим за помощь. К сожалению, это не работает. Показывает ту же ошибку .. i.imgur.com/uN90IKh.png Я абсолютный noob, когда дело доходит до кодирования. Так что у меня нет шансов решить эту проблему. Если можете, когда у вас будет время, пожалуйста, изучите это. Должно быть довольно просто, так как большая часть работы уже сделана. Я буду вечно благодарен. Еще раз спасибо за вашу помощь. - person coden00b; 25.01.2020
comment
Какая команда (не в цикле) правильно работает с одним из файлов jpg, выводимых циклом? Как только вы это обнаружите, вы сможете использовать это в качестве шаблона для второй команды в цикле. - person L. Scott Johnson; 26.01.2020
comment
К сожалению, я не умею программировать. Итак, я понятия не имею, как это исправить. Если можете, пожалуйста, изучите это. Спасибо еще раз. - person coden00b; 04.02.2020

Я понял это. Спасибо @ Л. Скотту Джонсону за помощь.

Вот код

echo off
for %%a in ("*.mp3") do (
  "C:\ffmpeg\bin\ffmpeg.exe" -i "%%a" -an -y -vcodec copy "E:\songgs\%%~na.jpg"
  "C:\ffmpeg\bin\ffmpeg.exe" -loop 1 -i  "E:\songs\%%~na.jpg" -i "%%a" -y -c:v libx264 -preset veryslow -tune stillimage -crf 18 -pix_fmt yuv420p -c:a aac -shortest -strict experimental -b:a 192k -shortest "E:\songs\%%~na.mp4" )
pause

Это базовая версия кода.

Вы можете редактировать многие вещи из кода.

Например, с помощью этого кода вы можете добавить субтитры для синхронизированных текстов песен.

-vf "subtitles=%%~na.srt"

Измените размер обложки с помощью этого кода

-vf "scale=1500:1500"

И если вы хотите, чтобы они оба были вместе, просто добавьте их через запятую (,) Вот так:

-vf "pad=ceil(iw/2)*2:ceil(ih/2)*2,subtitles=%%~na.srt"

вы также можете изменить кодировщик на Nvidia NVENC для более быстрого кодирования ...

И многое другое ... вы поняли.

Опять же, спасибо @ L. Скотту Джонсону за помощь с этим кодом. Не стесняйтесь задавать любой вопрос, и я постараюсь помочь. Я только учусь этому, как говорит мое имя пользователя, я новичок :)

person coden00b    schedule 20.06.2020