У меня есть много больших видеофайлов моих детей (.MTS формат). Теперь я хотел бы преобразовать их в divx / xvid, чтобы оставить свободное место HDD и также иметь способность смотреть на моем телевизоре.
Видеофайлы хранятся во вложенных папках на моем HDD (на основе стреляющих времен или специальных мероприятий). Так, сохраняя существующую структуру папок, я хотел бы преобразовать все видео (который может взять в некоторые дни, я верю), автоматически.
Буду признателен, если можно вести меня, как достигнуть его?
Вы можете использовать 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
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
добавленный