Как добавить видеофайлы .mkv в одну папку в ffmpeg, конвертировать их в .mp4 и поместить результаты в другую папку

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

У меня есть несколько видеофайлов .mkv в одной папке, и я хочу использовать ffmpeg для их конвертации в .mp4 и помещать результаты в другую папку.

Вот моя попытка, которая не сработала:

cd ~/private/tv/017;
inpath = "~/private/rtorrent/data/";
for file in *.mkv; do ffmpeg -threads 1 -i $inpath$file -map 0 -c:v copy -c:a aac -c:s mov_text -movflags +faststart ${file/%mkv/mp4}; done

Части, которые могут вызывать проблемы, это $inpath$file и ${file/%mkv/mp4}. Являются ли эти выражения корректными или что-то другое не так?

Ответ или решение

Чтобы конвертировать видеофайлы формата .mkv в .mp4 с помощью ffmpeg и сохранить результаты в другой папке, вам необходимо внести несколько исправлений в ваш скрипт. Прежде всего, исправим путь к входным файлам и путь для сохранения выходных файлов. Ваш текущий код содержит несколько ошибок, связанных с синтаксисом и неправильным использованием переменных.

Вот исправленный пример скрипта:

#!/bin/bash

# Путь к папке с файлами .mkv
inpath=~/private/rtorrent/data/
# Путь к папке для сохранения файлов .mp4
outpath=~/private/tv/converted/

# Создаем папку для выходных файлов, если она не существует
mkdir -p "$outpath"

# Перемещаемся в папку с видеофайлами
cd "$inpath" || exit

# Цикл для конвертации каждого файла .mkv
for file in *.mkv; do
    # Получаем имя файла без расширения
    filename="${file%.mkv}"
    # Выполняем конвертацию
    ffmpeg -threads 1 -i "$file" -map 0 -c:v copy -c:a aac -c:s mov_text -movflags +faststart "$outpath$filename.mp4"
done

Пояснение к коду:

  1. Переменные inpath и outpath – определяют пути к папкам с входными и выходными файлами соответственно.
  2. mkdir -p "$outpath" – создаёт выходную папку, если она не существует.
  3. cd "$inpath" || exit – перемещается в папку с видеофайлами. Если переход не удался, скрипт завершится.
  4. Цикл for обрабатывает все файлы с расширением .mkv.
    • filename="${file%.mkv}" – извлекает имя файла без расширения.
  5. Команда ffmpeg – отвечает за конвертацию с нужными параметрами, включая копирование видеодорожки, кодирование аудиодорожки в AAC и сохранение субтитров, если такие имеются.

Завершение

Запустите этот скрипт в терминале, убедившись, что у вас установлен ffmpeg. Скрипт преобразует все файлы .mkv из указанной папки и сохранит результаты в формате .mp4 в указанной выходной папке. Если у вас возникли вопросы или проблемы с этим процессом, не стесняйтесь обращаться за дополнительной помощью.

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

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