Como procurar vídeos / imagens por proporção com o Windows 7 Explorer Search

4

Eu sei que posso pesquisar arquivos (fotos, vídeos) tendo dimensões específicas , usando width:1920, height:1080 .

Mas como eu procuro arquivos com, digamos, proporção 16: 9 no Windows 7?

    
por Wes 09.12.2014 / 22:13

1 resposta

3

Isso não é possível com a pesquisa do Windows 7 Explorer

No entanto, aqui está uma alternativa que depende de partes integrantes do Windows

Para imagens (PowerShell 2.0)

Ele lê todas as imagens de uma determinada pasta raiz, divide a altura da imagem pela largura, compara o resultado com, por exemplo, 16/10 e exibe o caminho completo quando a proporção corresponde a

Get-Childitem "D:\MyPictures" -include @("*.jpg","*.png") -recurse | Where {
    $img = New-Object System.Drawing.Bitmap $_.FullName

    if ($img.Width / $img.Height -eq 16/10 -or 
        $img.Height / $img.Width -eq 16/10) {
        Write-Host $_.FullName
        }           
  }

Para imagens (PowerShell 2.0) - Versão aprimorada para proporções de aspecto cortadas / não padrão

$folder      = "C:\Users\Public\Pictures\Sample Pictures"
$searchRatio = 4/3
$AllRatios   = (16/10),(16/9),(4/3),(5/4),(21/10),(21/9)
$filetypes   =  @("*.jpg","*.png","*.bmp")

Clear-Host
Get-Childitem $folder -include $filetypes -recurse | foreach {
    $img = New-Object System.Drawing.Bitmap $_.FullName        
    if ($img.Width -gt $img.Height){ $fileRatio = $img.Width / $img.Height }
    else {$fileRatio = $img.Height / $img.Width}

    $differences = $AllRatios | %{  [math]::abs($_ - $fileRatio) } 
    $bestmatch = $differences | measure -Minimum
    $index = [array]::IndexOf($differences, $bestmatch.minimum)
    $closestRatio = $($AllRatios[$index])

    if ($closestRatio -eq $searchRatio) {
        Write-Host $fileRatio 't't $_.FullName        
        }           
  }

Explicação

  1. Digamos que você tenha uma pasta com fotos em que a maioria delas foi recortada. Então eles não têm uma proporção padrão como 16: 9. Para eles, esse script sempre pesquisa a correspondência mais próxima de uma proporção padrão. Você pode expandi-los em $AllRatios = (16/10),(16/9),(4/3),(5/4),(21/10),(21/9) se quiser

  2. As outras 3 variáveis devem ser auto-explicativas. $folder é a pasta em que você deseja pesquisar. $searchRatio é a proporção que você está procurando e $fileTypes define em quais tipos de imagem você está interessado

Para vídeos (PowerShell 2.0 + ffprobe )

$folder      = "D:\My Videos\*"
$ffprobe     = "D:\ffmpeg\ffprobe.exe"
$searchRatio = "13:7"
$filetypes   = @{"*.avi","*.mp4"}

Clear-Host
Get-ChildItem $folder -include $filetypes -recurse | foreach {
    $details = & $ffprobe -loglevel quiet -show_streams -print_format flat=h=0 $_.Fullname
    $fileratio = $details | Select-String '(?<=stream.0.display_aspect_ratio=")\d+:\d+' |
       Foreach {$_.Matches} | ForEach-Object {$_.Value}

    if ($fileratio -eq $searchRatio ) {
        Write-Host $fileratio 't't $_.FullName
    }   
}  

Explicação

  1. Você pode usar o ffmpeg do ffmpeg para recuperar todas as informações dos vídeos

    Comando

    ffprobe -loglevel quiet -show_streams -print_format flat=h=0 input.mp4
    

    Exemplo de saída

    stream.0.index=0
    stream.0.codec_name="mpeg4"
    stream.0.codec_long_name="MPEG-4 part 2"
    stream.0.profile="Advanced Simple Profile"
    stream.0.codec_type="video"
    stream.0.codec_time_base="911/21845"
    stream.0.codec_tag_string="XVID"
    stream.0.codec_tag="0x44495658"
    stream.0.width=624
    stream.0.height=336
    stream.0.has_b_frames=1
    stream.0.sample_aspect_ratio="1:1"
    stream.0.display_aspect_ratio="13:7"
    stream.0.pix_fmt="yuv420p"
    stream.0.level=5
    
  2. Em seguida, usamos o Regex para filtrar a proporção ( 13:7 em nosso exemplo)

  3. Por fim, comparamos a proporção de vídeos com sua taxa de pesquisa e exibimos o caminho do arquivo se eles corresponderem
por 09.12.2014 / 23:17