Вопрос или проблема
У меня есть несколько видеофайлов .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
Пояснение к коду:
- Переменные
inpath
иoutpath
– определяют пути к папкам с входными и выходными файлами соответственно. mkdir -p "$outpath"
– создаёт выходную папку, если она не существует.cd "$inpath" || exit
– перемещается в папку с видеофайлами. Если переход не удался, скрипт завершится.- Цикл
for
обрабатывает все файлы с расширением .mkv.filename="${file%.mkv}"
– извлекает имя файла без расширения.
- Команда
ffmpeg
– отвечает за конвертацию с нужными параметрами, включая копирование видеодорожки, кодирование аудиодорожки в AAC и сохранение субтитров, если такие имеются.
Завершение
Запустите этот скрипт в терминале, убедившись, что у вас установлен ffmpeg. Скрипт преобразует все файлы .mkv из указанной папки и сохранит результаты в формате .mp4 в указанной выходной папке. Если у вас возникли вопросы или проблемы с этим процессом, не стесняйтесь обращаться за дополнительной помощью.