Добавляем в название видеофайла метаданные
Полезно добавлять в название файла с видео его метаданные, прежде всего кодек, размер картинки, поток. Это позволяет косвенно оценить качество и знать основные характеристики видео не тратя время скачивая файл.
Под Linux (Ubuntu) задача решается относительно просто:
- установите MPlayer, если он еще не установлен в системе
- запустите следующий shell-скрипт, установив в нём корневой каталог, где хранятся видеофайлы
- скрипт генерирует другой скрипт, проверив и запустив который можно добавить к концу имени файлов блок информации в виде
[Video "кодек" "размер картинки" "частота кадров" "поток (битрейт)"]
#!/bin/sh
#
# Shell script to add or replace metadata in video file name
# GPL (c) 2011, Serguei TARASSOV, st@arbinada.com
#
# Set "files_root_dir" variable to root directory where video files are stored
# This script will proceed it recursively
# and will create another script "video_files_rename.sh" in current directory
# that contains all commands to rename your video files
# Check it and run like $bash video_files_rename.sh
# You should also install "mplayer" package if it is not installed yet
#
files_root_dir="/home/user name/some videos"
function process_recursive() {
for f in *
do
if [ -d "$f" ]; then
cd "$f"
echo "Processing subdirectory $f"
process_recursive
cd ..
continue
fi
echo
echo "Processing $f"
file_ext=${f##*.}
file_name=${f%.*}
# Remove old information
new_file_name=$(echo $file_name | sed -e 's/\(.*\)\.\[Video.*\]$/\1/')
mplayer -vo null -ao null -frames 0 -identify "$f" 2>/dev/null 1>"$info_file"
video_format=$(cat "$info_file" | grep 'ID_VIDEO_FORMAT=' | sed -e 's/ID_VIDEO_FORMAT=//g' -e 's/0x10000001/MPEG1/' -e 's/0x10000002/MPEG2/')
if test "$video_format" != ""; then
video_width=$(cat "$info_file" | grep 'ID_VIDEO_WIDTH=' | sed -e 's/ID_VIDEO_WIDTH=//g')
video_height=$(cat "$info_file" | grep 'ID_VIDEO_HEIGHT=' | sed -e 's/ID_VIDEO_HEIGHT=//g')
video_fps=$(cat "$info_file" | grep 'ID_VIDEO_FPS=' | sed -e 's/ID_VIDEO_FPS=//g' | sed -e 's/\.000$//g')
video_bitrate=$(cat "$info_file" | grep 'ID_VIDEO_BITRATE=' | sed -e 's/ID_VIDEO_BITRATE=//g')
len=${#video_bitrate}; len=$[$len-3]
if [ $len -gt 0 ]; then
video_bitrate=" "${video_bitrate:0:$len}"kbps"
else
video_bitrate=""
fi
video_properties="[Video "$video_format" "$video_width"x"$video_height" "$video_fps"fps"$video_bitrate"]"
file_dir=$(pwd)
if test "$file_name" = "$new_file_name.$video_properties"; then
echo "No changes required"
else
files_processed=$[$files_processed+1]
old_file="$file_dir"/"$f"
new_file="$file_dir"/"$new_file_name"."$video_properties"."$file_ext"
echo "mv -T" \""$old_file"\" \""$new_file"\" >> "$batch_name"
fi
else
echo "Warning: cannot proccess. Probably \"$f\" is not a video file"
fi
done
}
files_processed=0
curr_dir=$(pwd)
batch_name=$curr_dir"/video_files_rename.sh"
info_file=$curr_dir"/video_metadata.txt"
echo "#!/bin/sh" > $batch_name
echo "echo \"Renaming files...\"" >> $batch_name
cd "$files_root_dir"
process_recursive
rm "$info_file"
echo
if [ $files_processed -gt 0 ]; then
echo $files_processed "file(s) to process. Check and run" $batch_name
else
echo "All files are OK. There are no files to rename"
fi
exit 0
blog comments powered by Disqus