Я хочу использовать ffmpeg-normalize для нормализации громкости 100 видеофайлов mp4.

Я хочу использовать ffmpeg-normalize для нормализации громкости 100 видеофайлов mp4.

Я хочу использовать ffmpeg-normalize для нормализации громкости 100 видеофайлов mp4. Есть ли способ, чтобы программа прошлась по всем ним, чтобы определить правильный уровень, или мне нужно указать один файл в качестве входных данных? Может ли она преобразовать целую папку, не перечисляя 100 имен файлов? Я пробовал использовать ffmpeg-normalize *.mp4 (при этом приглашение командной строки находилось в каталоге видео), но оно выдало ошибку «файл *.mp4 не существует». Я использую ffmpeg в системе Windows, но буду воспроизводить файлы через проигрыватель KODI на nVidia Shield. Я просто хочу иметь возможность воспроизводить видео без больших перепадов громкости.

решение1

Инструмент ffmpeg-normalizeможет использовать несколько файлов в качестве входных данных. Подстановочный знак *.mp4специфичен для Linux. В Windows вы можете использовать простой цикл, как описано в READMEffmpeg-normalize:

for %%f in ("*.mp4") do ffmpeg-normalize "%%f" -c:a aac -b:a 192k -ext mp4

Это создаст выходные файлы в папке normalizedс mp4расширением и аудиопотоками в кодировке AAC (нормализованными).

Поскольку настройка по умолчанию использует нормализацию громкости EBU R 128 с заданной целевой громкостью, вам не нужно беспокоиться о «выравнивании» нескольких файлов. Просто запустите его на всех из них.

Если у вас есть вопросы по использованию, сначала прочтите файл README; в противном случае опубликуйте вопрос на GitHub.

решение2

Я видел решение для Windows, похожее на то, что я создал здесь, созданное кем-то другим много лет назад, но я не знаю, как оно называлось и где его теперь взять. Я также думаю, что оно было только для файлов AVI. Я прибегнул к написанию своего собственного с нуля, чтобы работать с MP4. Я хотел бы поделиться этим со всеми, кому это интересно, поскольку этот сайт очень помог мне достичь этой точки.

Я написал пакетный скрипт DOS в Windows 10, который может принимать несколько файлов *mp4 (и да - с пробелами в имени) и нормализовать громкость с помощью mp3gain. (Я пробовал MP4GAIN, но пробный период закончился где-то через 1 час). Я обнаружил, что этот будет обрабатываться намного быстрее, чем MP4GAIN. Я делаю это, потому что я могу специально контролировать ffmpeg и mp3gain на каждом этапе и делать то, что mp4gain или ffmpeg-normalize, возможно, не смогут.

Конечно, это не защищено от дурака и не оптимизировано. Скорее, это может быть трамплином для кого-то, чтобы настроить/подправить для своих собственных целей. Я извлекаю аудио как mp3 VBR и позволяю mp3gain творить с ним свою магию, а затем возвращаю его обратно. Я обнаружил, что могу обрабатывать 5 одновременных нормализаций, но это зависит от доступного места на жестком диске, если вы хотите попробовать больше сразу.

Создайте папки - C:\Vids может находиться где угодно, но внутри должны быть исходные, рабочие и завершенные папки.

C:\Vids
C:\Vids\original
C:\Vids\working
C:\Vids\completed

Загрузите последнюю версию — они бесплатны по состоянию на 01.09.2020, насколько я знаю. Я использую следующее:

C:\Vids\ffmpeg.exe  ( ffmpeg version git-2020-08-28-ccc7120 )
C:\Vids\mp3gain.exe ( mp3gain version 1.4.6 )

Создайте C:\Vids\normalize.batи поместите туда это:

echo off
setlocal enableextensions enabledelayedexpansion

for %%I in (original\*.mp4) DO (

  echo Creating working\%%~nI.bat
  echo echo off > "working\%%~nI.bat"
  echo echo Unpacking audio and video from %%I . >> "working\%%~nI.bat"
  echo echo ..\ffmpeg.exe -v 0 -i "..\%%I" -q:a 0 -map a ".\%%~nI_audio_only.mp3" -vcodec copy -map 0:v ".\%%~nI_video_only.mp4" >> "working\%%~nI.bat"
  echo ..\ffmpeg.exe -v 0 -i "..\%%I" -q:a 0 -map a ".\%%~nI_audio_only.mp3" -vcodec copy -map 0:v ".\%%~nI_video_only.mp4" >> "working\%%~nI.bat"
  echo echo . >> "working\%%~nI.bat"
  echo echo Normalizing extracted audio with Mp3Gain. >> "working\%%~nI.bat"
  echo echo ..\mp3gain.exe ".\%%~nI_audio_only.mp3" >> "working\%%~nI.bat"
  echo ..\mp3gain.exe ".\%%~nI_audio_only.mp3" >> "working\%%~nI.bat"
  echo echo Reconstructing normalized video from component parts. >> "working\%%~nI.bat"
  echo echo .\ffmpeg.exe -v 0 -i ".\%%~nI_video_only.mp4" -i ".\%%~nI_audio_only.mp3" -codec copy "..\completed\%%~nI%%~xI" >> "working\%%~nI.bat"
  echo ..\ffmpeg.exe -v 0 -i ".\%%~nI_video_only.mp4" -i ".\%%~nI_audio_only.mp3" -codec copy "..\completed\%%~nI%%~xI" >> "working\%%~nI.bat"
  echo echo Post-process clean up. >> "working\%%~nI.bat"
  echo del ".\%%~nI_audio_only.mp3" >> "working\%%~nI.bat"
  echo del ".\%%~nI_video_only.mp4" >> "working\%%~nI.bat"
  echo echo Done. >> "working\%%~nI.bat"
  echo echo on >> "working\%%~nI.bat"
  
)
pause
echo on

Поместите исходные mp4 в свою C:\Vids\originalпапку и запустите normalize.bat. Я делаю это из командной строки cmd.exe DOS, но вы также можете дважды щелкнуть пакетный файл в проводнике Windows. Он выполнит поиск mp4 в исходной папке и создаст отдельные пакетные файлы в C:\Vids\working. Вы можете запустить один, два или четыре таких пакетных файла C:\Vids\workingодновременно.

Каждый оригинальный mp4 будет распакован в mp4 без звука и mp3 VBR без видео.
Извлечение видео и аудио выполняется одновременно, думая, что это, скорее всего, создаст два файла, которые можно будет объединить позже без того, чтобы видео или аудио были короче другого. Извлечения видео и аудио идут в C:\Vids\working.

Затем mp3gain.exe будет запущен для извлеченного mp3, а затем аудио- и видеопотоки будут снова объединены с помощью ffmpeg и помещены в C:\Vids\completedпапку.

Временные распакованные файлы mp4 и mp3 будут удалены после завершения процесса.

=======

ОГРАНИЧЕНИЯ:

Имя файла mp4 не может содержать некоторые специальные символы (например, ! или ♫), но такие символы, как пробелы ( ) [ ] # ' @ - _ допустимы. Если вы обнаружите, что сгенерированный скрипт дает сбой или завершается слишком быстро и не обрабатывает видеофайл, попробуйте переименовать исходный файл.

У меня нет проверки ffprobe, чтобы увидеть, является ли встроенный звук уже mp3, и я обнаружил, что не все аудио aac можно нормализовать с помощью aacgain.exe. Поэтому я заставляю все выходить как mp3 VBR с наивысшим качеством. Если исходный звук достаточно высокого качества, я не против сделать это.

ЗАПРОС

Если бы люди могли расширить этот скрипт, чтобы он знал о различных типах аудио и делал аудиокопию, если это уже mp3, это было бы полезно. Или распознавать, что аудио AAC нужно преобразовать в mp3 или оставить как AAC.

Настройте его на обработку других типов видеофайлов (Avi, mkv, wmv и т. д.)

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

Добавить флаги для включениясжатиевидеофайл с использованием libx264 -crf 18 -preset veryslow для экономии места, но это приведет к тому, что все будет работать очень медленно.

Любые другие улучшения, которые вы можете придумать.

Спасибо.

~Лум

Связанный контент