![Я хочу использовать ffmpeg-normalize для нормализации громкости 100 видеофайлов mp4.](https://rvso.com/image/1606692/%D0%AF%20%D1%85%D0%BE%D1%87%D1%83%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20ffmpeg-normalize%20%D0%B4%D0%BB%D1%8F%20%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8%20%D0%B3%D1%80%D0%BE%D0%BC%D0%BA%D0%BE%D1%81%D1%82%D0%B8%20100%20%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%20mp4..png)
Я хочу использовать ffmpeg-normalize для нормализации громкости 100 видеофайлов mp4. Есть ли способ, чтобы программа прошлась по всем ним, чтобы определить правильный уровень, или мне нужно указать один файл в качестве входных данных? Может ли она преобразовать целую папку, не перечисляя 100 имен файлов? Я пробовал использовать ffmpeg-normalize *.mp4 (при этом приглашение командной строки находилось в каталоге видео), но оно выдало ошибку «файл *.mp4 не существует». Я использую ffmpeg в системе Windows, но буду воспроизводить файлы через проигрыватель KODI на nVidia Shield. Я просто хочу иметь возможность воспроизводить видео без больших перепадов громкости.
решение1
Инструмент ffmpeg-normalize
может использовать несколько файлов в качестве входных данных. Подстановочный знак *.mp4
специфичен для Linux. В Windows вы можете использовать простой цикл, как описано в README
ffmpeg-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 для экономии места, но это приведет к тому, что все будет работать очень медленно.
Любые другие улучшения, которые вы можете придумать.
Спасибо.
~Лум