У меня есть видео с dts аудио, которое я могу преобразовать в ac3 отдельно, но я нуждаюсь к пакетному преобразованию в наборе, но не могу выяснить как.
Это - моя работа ffmpeg для отдельных файлов:
for f in *.mkv;
do
ffmpeg -i "$f" -metadata:s:a:0 language=eng -metadata:s:a:0 title="AC3 5.1" -map 0:v -map 0:a:0 -map 0:a -map 0:s -c:v copy -c:a copy -c:s copy -c:a:0 ac3 -b:a:0 640k "/srv/dev-disk-by-label-hel/temp/${f%.mkv}".mkv;
done
Все видео расположены в отдельных папках под моими основными” медиа” папка. Некоторые папки с пробелами в них. В рабочем сценарии файл обрабатывается для разделения временного dir.
Я нуждаюсь в помощи с:
Чтобы ffmpeg преобразовал весь mkvs рекурсивно.
чтобы ffmmpeg обработал отдельный преобразованный mkvs к моему временному dir.
Также следующий шаг, если у кого-либо есть идеи:
Для создания этого рекурсивным можно или использовать find
или активироваться globstar
опция удара:
find -exec
:
find . -name '*.mkv' -exec ffmpeg -i {} -metadata:s:a:0 language=eng -metadata:s:a:0 title="AC3 5.1" -map 0:v -map 0:a:0 -map 0:a -map 0:s -c:v copy -c:a copy -c:s copy -c:a:0 ac3 -b:a:0 640k /srv/dev-disk-by-label-hel/temp/{} \;
{}
внутренняя часть эти -exec
будет преобразована в текущее имя файла. Я не беспокоился Вашим ${f%.mkv}".mkv;
, так как это идентично входному имени файла, Вы удаляете .mkv
и затем добавляете его, таким образом, я предположил, что это было ошибкой.
globstar
. Эта опция позволяет **
, рекурсивно вызывают в 0 или больше подкаталогов.
shopt -s globstar
for f in **/*.mkv;
do
fname="${f##*/}"
ffmpeg -i "$f" -metadata:s:a:0 language=eng -metadata:s:a:0 title="AC3 5.1" -map 0:v -map 0:a:0 -map 0:a -map 0:s -c:v copy -c:a copy -c:s copy -c:a:0 ac3 -b:a:0 640k "/srv/dev-disk-by-label-hel/temp/"$fname";
done
Это - то, которое можно наиболее легко сделать копию файлами назад к оригиналу. , пока Вы не возражаете перезаписывать оригиналы , можно сделать:
shopt -s globstar
for f in **/*.mkv;
do
fname="${f##*/}"
ffmpeg -i "$f" -metadata:s:a:0 language=eng -metadata:s:a:0 title="AC3 5.1" -map 0:v -map 0:a:0 -map 0:a -map 0:s -c:v copy -c:a copy -c:s copy -c:a:0 ac3 -b:a:0 640k "/srv/dev-disk-by-label-hel/temp/$fname" &&
mv "/srv/dev-disk-by-label-hel/temp/$fname" "$f"
done