Главная страница


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Vladimir Mosgalin                    2:5030/1041.17 24 Jul 2003  18:30:12
 To : Eugene Vlasov
 Subject : Re: Консольная программа определения свойств AVI и MPG
 -------------------------------------------------------------------------------- 
 
 
 On Tue, 22 Jul 2003 21:45:10 +0400, Eugene Vlasov <si1verf0x@tyumen.ru>
 wrote about 'Консольная программа определения свойств AVI и MPG':
 
  EV> Ищется программа, выдающая продолжительность видео-файла в минутах
  EV> и секундах, размер кадра, видео и аудио-кодеки. Hашел программу
  EV> tcscan из пакета transcode, но она не устраивает по нескольким
  EV> критериям:
  EV>   1. Выдает _слишком_ много информации.
 
 grep уже отменили?
 
  EV>   2. Та информация что выдается не совсем удобна, например для
  EV>      определения продолжительности, необходимо поделить два числа.
 
 awk или expr тоже?
 
  EV>   3. Так и не понял, как с ее помощью определить продолжительность 
  EV>      MPEG-файла.
 
 С этим вообще тяжко. Я тебе покажу, чем я пользуюсь, но оно не корректно
 определяет размер mpeg2 файлов. Требуются mplayer и plaympeg. Могу дать
 вариант для старых mplayer'ов. Тут заточка под русский mplayer, но это
 думаю сам уберешь, если нужно ;)
 
 #!/bin/sh
 
 # use parsed mplayer output to get info about avi/mpg/etc, version 0.5
 # suited for mplayer-cvs (post-0.90)
 # (c) Vladimir Mosgalin.
 
 mplayer -ao null -vo null -frames 0 -nocache -identify "$1" -noautosub -vfm ,
 -afm , 2>/dev/null | awk -v vidname="$1" -F = '
 /^Обнаружен/ {
        flag = 1;
        split($0, ftype, " ");
        info["ftype"] = ftype[2]
        next;
        }
 /ID_FILENAME=/ { info["filename"] = $2; next}
 /ID_VIDEO_FORMAT=/ { info["vformat"] = $2; next}
 /ID_VIDEO_BITRATE=/ { info["vbitrate"] = $2; next}
 /ID_VIDEO_WIDTH=/ { info["vwidth"] = $2; next}
 /ID_VIDEO_HEIGHT=/ { info["vheight"] = $2; next}
 /ID_VIDEO_FPS=/ { info["vfps"] = $2; next}
 /ID_VIDEO_ASPECT=/ { info["vaspect"] = $2; next}
 /ID_AUDIO_CODEC=/ { info["acodec"] = $2; next}
 /ID_AUDIO_FORMAT=/ { info["aformat"] = $2; next}
 /ID_AUDIO_BITRATE=/ { info["abitrate"] = $2; next}
 /ID_AUDIO_RATE=/ { info["arate"] = $2; next}
 /ID_AUDIO_NCH=/ { info["anch"] = $2; next}
 /ID_LENGTH=/ { info["length"] = $2; next}
 /^=.*ASF.*START/ { while ($0 !~ /^=.*ASF.*END/)   getline; next}
 /Информация / { getline; while ($0 !~ /====/) { print $0; getline}; next}
 /^VIDEO:|^AUDIO:|^Selected/ { print $0 }
 { next }
 
 { if (flag) print $0 }
 END {
     print "Filename: " info["filename"]
     print "File type: " info["ftype"]
     print "Video format: " info["vformat"]
     print "Video bitrate: " info["vbitrate"]/1000 " kbps"
     print "Video resolution: " info["vwidth"] "x" info["vheight"]
     print "Video fps: " info["vfps"] " fps"
     if (info["ftype"] == "AVI") # get number of frames using aviinfo
      {
       avinforun = "aviinfo \"" info["filename"] "\""
       avinforun | getline avinforesult
       close(avinforun)
       split(avinforesult, frames, " ")
       info["frames"] = frames[2]
       print "Video frames: " info["frames"]
      }
     print "Video aspect: " info["vaspect"]
     print "Audio codec: " info["acodec"]
     print "Audio format: " info["aformat"]
     print "Audio bitrate: " info["abitrate"]/1000 " kbps"
     print "Audio rate: " info["arate"] "Hz"
     if (info["anch"] == 1)
      info["achdesc"] = " (mono)"
     else
      if (info["anch"] == 2)
         info["achdesc"] = " (stereo)"
     print "Audio channels: " info["anch"] " ch" info["achdesc"]
     if (info["vformat"] == "0x10000001") # mpeg1
      {
 # currently mplayer calculates incorrect total time for mpeg1/2 files
 # for mpeg1, plaympeg shows correct time, but it hangs for mpeg2 :(
       plaympegrun = "plaympeg --novideo --nosound \"" info["filename"] "\" |
 grep time"
       #for (a = 0; a < 4; a++)
       plaympegrun | getline plaympegresult
       close(plaympegrun)
       split(plaympegresult, size, " ")
       info["length"] = int(size[3])
      }
     print "Stream length: " info["length"] " s (" int(info["length"] / 3600) \
    ":" int(info["length"] / 60) - int(info["length"] / 3600) * 60 ":" \
    info["length"] - int(info["length"] / 60) * 60 ")"
     print ""
   }
 '
 
 # vim: ft=awk
 
 -- 
 
 Vladimir
 --- slrn/0.9.7.4-asp (Linux)
  * Origin: Me organized (2:5030/1041.17)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: Консольная программа определения свойств AVI и MPG   Vladimir Mosgalin   24 Jul 2003 18:30:12 
Архивное /ru.linux/452800000a8c.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional