Как я могу преобразовать все видеофайлы во вложенных папках? (пакетное преобразование)

У меня есть много больших видеофайлов моих детей (.MTS формат). Теперь я хотел бы преобразовать их в divx / xvid, чтобы оставить свободное место HDD и также иметь способность смотреть на моем телевизоре.

Видеофайлы хранятся во вложенных папках на моем HDD (на основе стреляющих времен или специальных мероприятий). Так, сохраняя существующую структуру папок, я хотел бы преобразовать все видео (который может взять в некоторые дни, я верю), автоматически.

Буду признателен, если можно вести меня, как достигнуть его?

2
задан 3 March 2018 в 18:42

2 ответа

Вы можете использовать ffmpeg для конвертирования видео форматов. Если он еще не установлен, получите его, используя:

sudo apt install ffmpeg

Я успешно попробовал следующую команду для преобразования примера видео в формат DivX 5.0 на основе AVI:

ffmpeg -i sample.mp4 -f avi -vtag DX50 sample.divx

Сначала вы указываете входной видеофайл, например, -i Videos/sample.mts, затем мы говорим, что хотим, чтобы выходным форматом был AVI с тегом DivX 5.0, используя -f avi -vtag: DX50. Последний аргумент - это выходной файл, который нужно сгенерировать, здесь Videos/sample.divx.

Я рекомендую вам сначала попробовать один небольшой видеоролик и убедиться, что все работает должным образом, и ваш проигрыватель распознает как формат, так и качество видео и размер файла в порядке. Вы можете настроить последний с помощью дополнительного аргумента -q:v N, где N - это число, а меньшие числа означают более высокое качество и размер файла. Хорошие значения, вероятно, находятся в диапазоне 2-8, возможно, попробуйте 5:

ffmpeg -i sample.mp4 -f avi -vtag DX50 -q:v 5 sample.divx

Затем, когда тест пройден успешно, и формат и качество в порядке, вы можете пакетно конвертировать все ваши видеофайлы .mts внутри определенный исходный каталог рекурсивно с помощью сценария Bash, например:

#!/bin/bash

# Change the directories and quality level (lower=better) below accordingly:
inputfolder="/path/to/somewhere"
outputfolder="/path/to/elsewhere"
videoquality=5

shopt -s globstar nocaseglob nocasematch  # enable ** and globs case-insensitivity

for inputfile in "$inputfolder"/**/*.mts ; do
    outputfile="$outputfolder/$(basename "${inputfile%.mts}").divx"
    ffmpeg -i "$inputfile" -f avi -vtag DX50 -q:v "$videoquality" "$outputfile"
done

Или, если вы хотите, чтобы выходные файлы находились в том же каталоге, что и входные, вот более короткая версия:

#!/bin/bash

# Change the directory and quality level (lower=better) below accordingly:
folder="/path/to/somewhere"
videoquality=5

shopt -s globstar nocaseglob nocasematch  # enable ** and globs case-insensitivity

for inputfile in "$folder"/**/*.mts ; do
    ffmpeg -i "$inputfile" -f avi -vtag DX50 -q:v "$videoquality" "${inputfile%.mts}.divx"
done
2
ответ дан 2 December 2019 в 03:34
find -mindepth 1 -type d | xargs -n1 -I '{}' convert '{}'/* '{}'.pdf
  • find находит все файлы
  • -mindepth 1 гарантирует, что это не включает текущий каталог
  • -type d гарантирует, что только каталоги найдены
  • xargs выполняет команду для каждого найденного каталога
  • -n1 говорит, что каждая строка (1) выполнит команду
  • -I '{}' говорит, что любое время мы видим '{}' мы заменяем его названием найденного каталога
  • convert инструмент ImageMagick для преобразования изображений (в этом случае к PDFs)
  • '{}'/* находит все изображения в каталоге
  • '{}'.pdf говорит вывод, с которым файл PDF должен быть названием каталога .pdf добавленный
0
ответ дан 2 December 2019 в 03:34

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

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