Добавить комментарий

Добавляем в название видеофайла метаданные

Полезно добавлять в название файла с видео его метаданные, прежде всего кодек, размер картинки, поток. Это позволяет косвенно оценить качество и знать основные характеристики видео не тратя время скачивая файл.

Под Linux (Ubuntu) задача решается относительно просто:
- установите MPlayer, если он еще не установлен в системе
- запустите следующий shell-скрипт, установив в нём корневой каталог, где хранятся видеофайлы
- скрипт генерирует другой скрипт, проверив и запустив который можно добавить к концу имени файлов блок информации в виде [Video "кодек" "размер картинки" "частота кадров" "поток (битрейт)"]

  1. #!/bin/sh
  2. #
  3. # Shell script to add or replace metadata in video file name
  4. # GPL (c) 2011, Serguei TARASSOV, st@arbinada.com
  5. #
  6. # Set "files_root_dir" variable to root directory where video files are stored
  7. # This script will proceed it recursively
  8. # and will create another script "video_files_rename.sh" in current directory
  9. # that contains all commands to rename your video files
  10. # Check it and run like $bash video_files_rename.sh
  11. # You should also install "mplayer" package if it is not installed yet
  12. #
  13.  
  14. files_root_dir="/home/user name/some videos"
  15.  
  16. function process_recursive() {
  17.    for f in *
  18.    do
  19.       if [ -d "$f" ]; then
  20.          cd "$f"
  21.          echo "Processing subdirectory $f"
  22.          process_recursive
  23.          cd ..
  24.          continue
  25.       fi
  26.  
  27.       echo
  28.       echo "Processing $f"
  29.       file_ext=${f##*.}
  30.       file_name=${f%.*}
  31.       # Remove old information
  32.       new_file_name=$(echo $file_name | sed -e 's/\(.*\)\.\[Video.*\]$/\1/')
  33.       mplayer -vo null -ao null -frames 0 -identify "$f" 2>/dev/null 1>"$info_file"
  34.       video_format=$(cat "$info_file" | grep 'ID_VIDEO_FORMAT=' | sed -e 's/ID_VIDEO_FORMAT=//g' -e 's/0x10000001/MPEG1/' -e 's/0x10000002/MPEG2/')
  35.       if test "$video_format" != ""; then
  36.          video_width=$(cat "$info_file" | grep 'ID_VIDEO_WIDTH=' | sed -e 's/ID_VIDEO_WIDTH=//g')
  37.          video_height=$(cat "$info_file" | grep 'ID_VIDEO_HEIGHT=' | sed -e 's/ID_VIDEO_HEIGHT=//g')
  38.          video_fps=$(cat "$info_file" | grep 'ID_VIDEO_FPS=' | sed -e 's/ID_VIDEO_FPS=//g' | sed -e 's/\.000$//g')
  39.          video_bitrate=$(cat "$info_file" | grep 'ID_VIDEO_BITRATE=' | sed -e 's/ID_VIDEO_BITRATE=//g')
  40.          len=${#video_bitrate}; len=$[$len-3]
  41.          if [ $len -gt 0 ]; then
  42.             video_bitrate=" "${video_bitrate:0:$len}"kbps"
  43.          else
  44.             video_bitrate=""
  45.          fi
  46.          video_properties="[Video "$video_format" "$video_width"x"$video_height" "$video_fps"fps"$video_bitrate"]"
  47.          file_dir=$(pwd)
  48.          if test "$file_name" = "$new_file_name.$video_properties"; then
  49.             echo "No changes required"
  50.          else
  51.             files_processed=$[$files_processed+1]
  52.             old_file="$file_dir"/"$f"
  53.             new_file="$file_dir"/"$new_file_name"."$video_properties"."$file_ext"
  54.             echo "mv -T" \""$old_file"\" \""$new_file"\" >> "$batch_name"
  55.          fi
  56.       else
  57.          echo "Warning: cannot proccess. Probably \"$f\" is not a video file"
  58.       fi
  59.    done
  60. }
  61.  
  62. files_processed=0
  63. curr_dir=$(pwd)
  64. batch_name=$curr_dir"/video_files_rename.sh"
  65. info_file=$curr_dir"/video_metadata.txt"
  66. echo "#!/bin/sh" > $batch_name
  67. echo "echo \"Renaming files...\"" >> $batch_name
  68. cd "$files_root_dir"
  69. process_recursive
  70. rm "$info_file"
  71. echo
  72. if [ $files_processed -gt 0 ]; then
  73.    echo $files_processed "file(s) to process. Check and run" $batch_name
  74. else
  75.    echo "All files are OK. There are no files to rename"
  76. fi
  77. exit 0