这使用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 : Main@L4@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
答案 0 :(得分:3)
通过使用字符串替换替换“h”,“min”和“s”及其数学等价物,然后使用 1 2 3 4 5 6 7 8 9 10 11 12 Total
1 4 3 6 12 5 9 0 12 1 10 8 10 80.0
2 0 9 8 1 5 1 5 10 7 1 9 2 58.0
3 0 0 2 11 4 0 2 5 4 12 1 7 48.0
4 0 0 0 11 9 2 10 3 0 5 2 10 52.0
5 0 0 0 0 7 12 10 11 12 5 6 0 63.0
6 0 0 0 0 0 12 1 4 1 2 11 0 31.0
7 0 0 0 0 0 0 8 12 8 7 2 1 38.0
8 0 0 0 0 0 0 0 12 7 0 5 9 33.0
9 0 0 0 0 0 0 0 0 12 4 10 9 35.0
10 0 0 0 0 0 0 0 0 0 3 7 1 11.0
11 0 0 0 0 0 0 0 0 0 0 8 2 10.0
12 0 0 0 0 0 0 0 0 0 0 0 5 5.0
Total 4 12 16 35 30 36 36 69 52 49 69 56 464.0
数学,可以将 h min s
约定转换为整数整个事情变成了几秒钟。一旦你有了这个秒整数,除以60得到分钟。
此外,无需将set /a
的输出转储到文本文件中。只需使用mediainfo
抓住它。
for /f
......或类似的。
但是,有一个更好的工具可以用来抓取视频文件的持续时间。 ffprobe
(FFmpeg软件包的一部分)将使用以下命令以秒.microseconds获取视频的全局持续时间:
@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\
)
输出类似于:
格式,5028.080000
与上面的ffprobe -v quiet -show_entries "format=duration" -of csv "filename.mkv"
示例一样,使用mediainfo
循环来捕获for /f
的输出。
ffprobe