2017-07-28 46 views
3

這使用mediainfo來提取視頻屬性,然後檢查軌道長度並將視頻相應地排序爲長或短目錄。按長度排序視頻,需要效率,如果可能的話可靠性

mediainfo.exe %1 >%temp%\vdata 
type %temp%\vdata | find ": 9 h" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 8 h" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 7 h" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 6 h" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 5 h" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 4 h" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 3 h" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 2 h" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 1 h" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 59 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 58 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 57 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 56 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 55 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 54 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 53 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 52 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 51 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 50 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 49 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 48 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 47 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 46 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 45 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 44 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 43 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 42 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 41 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 40 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 39 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 38 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 37 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 36 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 35 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 34 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 33 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 32 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 31 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 30 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 29 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 28 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 27 min" >nul && move %1 long && goto next 
type %temp%\vdata | find ": 26 min" >nul && move %1 long && goto next 
:: sort long making of videos, leave short ones for manual checkup 
echo "%~n1" | find /i "making of " >nul && goto next 
type %temp%\vdata | find ": 25 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 24 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 23 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 22 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 21 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 20 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 19 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 18 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 17 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 16 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 15 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 14 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 13 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 12 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 11 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 10 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 9 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 8 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 7 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 6 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 5 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 4 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 3 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 2 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 1 min" >nul && move %1 short && goto next 
type %temp%\vdata | find ": 59 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 58 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 57 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 56 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 55 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 54 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 53 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 52 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 51 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 50 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 49 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 48 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 47 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 46 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 45 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 44 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 43 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 42 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 41 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 40 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 39 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 38 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 37 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 36 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 35 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 34 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 33 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 32 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 31 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 30 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 29 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 28 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 27 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 26 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 25 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 24 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 23 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 22 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 21 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 20 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 19 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 18 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 17 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 16 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 15 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 14 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 13 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 12 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 11 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 10 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 9 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 8 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 7 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 6 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 5 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 4 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 3 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 2 s " >nul && move %1 short && goto next 
type %temp%\vdata | find ": 1 s " >nul && move %1 short && goto next 
:next 

正如您所看到的那樣效率很低。這可以減少到幾行?也作爲一個側面提示,這個軌道長度檢查不是很可靠,因爲有時視頻集成了錯誤的軌道(通常是字幕),這意味着不正確的長度的額外軌道將決定視頻應該去哪裏。

這是mediainfo如何將數據輸出到vdata文件的方式。視頻軌道的持續時間應始終在同線7

General 
Unique ID        : 46047801939398570510895581797401581513 (0x22A47BEB8AA8348EF96251DF04E557C9) 
Complete name       : Tomorrowland 2017 GoPro.mp4 
Format         : Matroska 
Format version       : Version 4/Version 2 
File size        : 3.86 GiB 
Duration         : 1 h 0 min 
Overall bit rate       : 9 074 kb/s 
Writing application      : Lavf57.41.100 
Writing library       : Lavf57.41.100/Lavf57.41.100 

Video 
ID          : 1 
Format         : HEVC 
Format/Info        : High Efficiency Video Coding 
Format profile       : [email protected]@Main 
Codec ID         : V_MPEGH/ISO/HEVC 
Duration         : 1 h 0 min 
Width         : 1 920 pixels 
Height         : 1 080 pixels 
Display aspect ratio      : 16:9 
Frame rate mode       : Constant 
Frame rate        : 25.000 FPS 
Color space        : YUV 
Chroma subsampling      : 4:2:0 
Bit depth        : 8 bits 
Writing library       : x265 1.9:[Windows][GCC 5.2.0][64 bit] 8bit 
Encoding settings      : wpp/ctu=64/min-cu-size=8/max-tu-size=32/tu-intra-depth=1/tu-inter-depth=1/me=1/subme=1/merange=57/no-rect/no-amp/max-merge=2/temporal-mvp/early-skip/rdpenalty=0/no-tskip/no-tskip-fast/strong-intra-smoothing/no-lossless/no-cu-lossless/no-constrained-intra/fast-intra/open-gop/no-temporal-layers/interlace=0/keyint=250/min-keyint=25/scenecut=40/rc-lookahead=15/lookahead-slices=6/bframes=4/bframe-bias=0/b-adapt=0/ref=2/limit-refs=3/no-limit-modes/weightp/no-weightb/aq-mode=1/qg-size=32/aq-strength=1.00/cbqpoffs=0/crqpoffs=0/rd=2/psy-rd=2.00/rdoq-level=0/psy-rdoq=0.00/signhide/deblock/sao/no-sao-non-deblock/b-pyramid/cutree/no-intra-refresh/rc=crf/crf=21.0/qcomp=0.60/qpmin=0/qpmax=51/qpstep=4/ipratio=1.40/pbratio=1.30 
Language         : English 
Default         : Yes 
Forced         : No 
DURATION         : 01:00:58.103000000 

Audio 
ID          : 2 
Format         : AAC 
Format/Info        : Advanced Audio Codec 
Format profile       : LC 
Codec ID         : A_AAC 
Duration         : 1 h 0 min 
Channel(s)        : 2 channels 
Channel positions      : Front: L R 
Sampling rate       : 44.1 kHz 
Frame rate        : 43.066 FPS (1024 spf) 
Compression mode       : Lossy 
Delay relative to video     : -743 ms 
Writing library       : Lavc57.48.101 aac 
Default         : Yes 
Forced         : No 
DURATION         : 01:00:58.028000000 

回答

2

這將有可能通過使用串他們的數學等價物代替「H」,「分鐘」,和「s」到h min s公約轉換爲整數替換,然後用set /a將整個數學計算成幾秒鐘。一旦你有這個秒整數,除以60分鐘。

另外,不需要將mediainfo的輸出轉儲到文本文件。只需使用for /f即可獲取。

@echo off & setlocal 

set "video=%~f1" 

rem // Change "args" to whatever arguments mediainfo requires. I don't know its syntax. 
for /f "tokens=2*" %%I in (
    'mediainfo args "%video%" ^| findstr /irc:"Duration.*[0-9] [hms]"' 
) do if not defined duration set "duration=%%J" 

set "duration=%duration: h=*3600%" 
set "duration=%duration: min=*60%" 
set "duration=%duration: s=%" 
set /a "minutes=%duration: =+%/60" 

if %minutes% leq 25 (
    move "%video%" short\ 
) else (
    move "%video%" long\ 
) 

...或相似。


雖然有一個更好的工具來抓取視頻文件的持續時間。 ffprobe(FFmpeg的軟件包的一部分)將讓你獲得視頻的全球持續時間seconds.microseconds使用下面的命令:

ffprobe -v quiet -show_entries "format=duration" -of csv "filename.mkv" 

輸出類似於此:

格式,5028.080000

與上面的mediainfo示例一樣,使用for /f循環捕獲ffprobe的輸出。

@echo off & setlocal 

set "video=%~f1" 

for /f "tokens=2 delims=,." %%I in (
    'ffprobe -v quiet -show_entries "format=duration" -of csv "%video%"` 
) do set /a "minutes = %%~I/60" 

if %minutes% leq 25 (
    move "%video%" short\ 
) else (
    move "%video%" long\ 
) 
+0

史詩簡單!將遷移到ffprobe版本......謝謝! – bricktop

+0

最近我從ffprobe獲得'Access is denied.'錯誤。世界上可能會造成什麼? – bricktop

+1

@bricktop你可能應該嘗試一下簡單的重新啓動。如果這不能解決它,請運行chkdsk。我的猜測是它是一個導致共享衝突的掛起進程,或者可能是文件系統損壞。 – rojo