Вопрос или проблема
У меня есть серия файлов MP4, которые я собираюсь сжать в x265. Файлы имеют два аудиотрека, к которым задано имя и язык.
Я хочу сжать видеофайлы, но сохранить аудиотреки нетронутыми, включая имена.
Мой текущий скрипт сжимает и сохраняет языки, но теряет имена аудиотреков.
@echo off
setlocal enabledelayedexpansion
set FFmpegPath=ffmpeg.exe
:: Проходим через все файлы MP4 в текущей папке
for %%F in (*.mp4) do (
echo обрабатываем файл: %%F
echo создаем: %%F
:: Запускаем ffmpeg для каждого файла MP4, конвертируя в x265 с качеством 19 и сохраняя все метаданные, включая имена треков (что он не делает)
"%FFmpegPath%" -i "%%F" -c:v libx265 -crf 19 -c:a copy -map 0 -map_metadata 0 -map_chapters 0 "%%~dpF%%~nF_x265.mp4"
echo Создан %%F
)
pause
Ответ или решение
Для эффективного сжатия видеофайлов в формате MP4 с сохранением имен аудиотреков и других метаданных, нам необходимо использовать FFmpeg с правильными параметрами настройки. В данном руководстве мы подробно рассмотрим, как добиться этой цели, а также выявим возможные недочеты в вашем текущем скрипте.
Проблема
В вашем текущем скрипте происходит успешное сжатие видео с использованием кодека x265 и сохранение языковой информации аудиотреков. Тем не менее, названия аудиотреков теряются в процессе. Это может быть связано с тем, что параметры команды не настроены на явное сохранение имени дорожек.
Решение
Для достижения желаемого результата, выполните следующие шаги:
-
Обновите скрипт: Мы модифицируем ваш скрипт, добавив необходимые параметры для сохранения имен аудиотреков.
-
Используйте метаданные: В FFmpeg можно сохранять метаданные с использованием параметра
-map_metadata
, который уже присутствует в вашей команде. Нам нужно добавить дополнительный параметр для копирования имен аудиотреков.
Модифицированный скрипт
@echo off
setlocal enabledelayedexpansion
set FFmpegPath=ffmpeg.exe
:: Цикл по всем MP4 файлам в текущей папке
for %%F in (*.mp4) do (
echo Обработка файла: %%F
:: Запускаем ffmpeg для каждого MP4 файла, конвертируем в x265, сохраняем все метаданные
"%FFmpegPath%" -i "%%F" -c:v libx265 -crf 19 -c:a copy -map 0 -map_metadata 0 -map_chapters 0 -metadata:s:a:0 title="Audio Track 1" -metadata:s:a:1 title="Audio Track 2" "%%~dpF%%~nF_x265.mp4"
echo Завершение обработки: %%F
)
pause
Объяснение изменений
-
-metadata:s:a:0 title="Audio Track 1"
и-metadata:s:a:1 title="Audio Track 2"
: Эти параметры позволяют указать названия аудиотреков. Их можно заменить динамическими значениями, если ваша задача подразумевает сохранение оригинальных названий. -
Проверка наличия треков: Убедитесь, что вы знаете количество и названия аудиотреков в каждом исходном файле. Это можно сделать, используя команду:
"%FFmpegPath%" -i "%%F"
-
Копирование и сохранение метаданных: Параметр
-map_metadata 0
гарантирует, что все метаданные исходного файла будут перенесены в новый файл, включая названия аудиотреков.
Заключение
Теперь ваш скрипт будет корректно сжимать видеофайлы в формате x265, сохраняя при этом названия аудиотреков и другие важные метаданные. Прежде чем запускать скрипт на большом количестве файлов, рекомендуется протестировать его на одном или двух образцах, чтобы убедиться в корректности работы. Качественное сжатие видео и сохранение метаданных — важная задача, особенно когда речь идет о медиа-контенте, требующем высокой степени детализации.