У меня есть мое хранилище VPS, заполненное видео, и надеюсь, что я смогу освободить место, их разрешение довольно большое поэтому я решил повторно кодировать их с FFmpeg на меньшее разрешение, я делаю все, что вручную, сначала проверяю с помощью mediainfo test5.mkv
разрешенияпроверить разрешение мультимедиа, если разрешение велико ffmpeg, если выход меньше оригинала, удалите оригинал, иначе удалите вывод
...
Width : 1 280 pixels
...
если ширина больше, чем 720 pixels
я выполняю следующую команду:
ffmpeg -i 'test5.mkv' -vf scale=720:-2 -acodec copy -vcodec libx264 -scodec copy -threads 12 -crf 28 -x264-params keyint=240:min-keyint=20 -preset:v slow '[Encoded] test5.mkv'
, после чего я удаляю исходное видео, если результат имеет меньший размер, чем исходный.
Я надеюсь, что есть сценарий, который может автоматизировать это, так как я буду работать в каталоге, тогда он будет искать все .mkv
подкаталоги рекурсивно выполнять эти проверки и действия. Как это сделать?
Кроме того, я обеспокоен тем, что он может выйти из строя, если я дойду до автоматизации, так как в названии видео есть специальные символы, такие как одиночные кавычки, двойные кавычки или `, поэтому я могу его избежать.
Спасибо!
После некоторого гугле я оказался в следующем фрагменте кода, я беспокоюсь, если этого достаточно, но я боюсь, чтобы запустить его, так как я не уверен, если это может повредить мой UNIX
#!/bin/sh
for file in *.{mkv}; do
target="[720p]-${file%.*}.mkv"
[[ -f "$target" ]] && { echo "skipping $file - $target exists" ; continue; }
eval $(ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height,width "$file")
size=${streams_stream_0_width}x${streams_stream_0_height}
if [ "$streams_stream_0_width" -ge 720 ]; then
echo ffmpeg -i "$file" -vf scale=720:-2 -acodec copy -vcodec libx264 -scodec copy -threads 12 -crf 28 -x264-params keyint=240:min-keyint=20 -preset:v slow "$target"
fi
done
может кто-нибудь, пожалуйста, скажите мне, должен ли мой отрывок работать?
UPDATE
как выясняется if [ "$streams_stream_0_width" -ge 720 ]; then
терпит неудачу, потому что ширина не целое число? line 10: [: : integer expression expected
Я не уверен, почему это не целое число, как я могу сделать его целым?