Как сжать видео, но при этом сохранить названия аудиотреков?

Вопрос или проблема

У меня есть серия файлов 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 и сохранение языковой информации аудиотреков. Тем не менее, названия аудиотреков теряются в процессе. Это может быть связано с тем, что параметры команды не настроены на явное сохранение имени дорожек.

Решение

Для достижения желаемого результата, выполните следующие шаги:

  1. Обновите скрипт: Мы модифицируем ваш скрипт, добавив необходимые параметры для сохранения имен аудиотреков.

  2. Используйте метаданные: В 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

Объяснение изменений

  1. -metadata:s:a:0 title="Audio Track 1" и -metadata:s:a:1 title="Audio Track 2": Эти параметры позволяют указать названия аудиотреков. Их можно заменить динамическими значениями, если ваша задача подразумевает сохранение оригинальных названий.

  2. Проверка наличия треков: Убедитесь, что вы знаете количество и названия аудиотреков в каждом исходном файле. Это можно сделать, используя команду:

    "%FFmpegPath%" -i "%%F"
  3. Копирование и сохранение метаданных: Параметр -map_metadata 0 гарантирует, что все метаданные исходного файла будут перенесены в новый файл, включая названия аудиотреков.

Заключение

Теперь ваш скрипт будет корректно сжимать видеофайлы в формате x265, сохраняя при этом названия аудиотреков и другие важные метаданные. Прежде чем запускать скрипт на большом количестве файлов, рекомендуется протестировать его на одном или двух образцах, чтобы убедиться в корректности работы. Качественное сжатие видео и сохранение метаданных — важная задача, особенно когда речь идет о медиа-контенте, требующем высокой степени детализации.

Оцените материал
Добавить комментарий

Капча загружается...