Сценарий FFmpeg для рекурсивного преобразования аудио DTS в AC3

У меня есть видео с 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.

Также следующий шаг, если у кого-либо есть идеи:

  • Используйте обработанные видео во временном dir для замены исходных непреобразованных файлов.
2
задан 30 December 2019 в 17:51

1 ответ

Для создания этого рекурсивным можно или использовать find или активироваться globstar опция удара:

  1. 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 и затем добавляете его, таким образом, я предположил, что это было ошибкой.

  2. 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
    
2
ответ дан 4 January 2020 в 19:48

Другие вопросы по тегам:

Похожие вопросы: