Question

Im essayant d'automatiser la conversion vidéo avec PowerShell et l'outil FFMPEG. FFMPEG a une sortie détaillée sur la vidéo si elle est appelée sans tous les paramètres nessesaires. Habituellement, il rapporte des informations sur l'erreur et afficher le fichier d'entrée si l'on a spécifié. Ex j'ai exécuté de manière interactive une telle commande:

d: video.enc ffmpeg.exe -id: video.enc 1.wmv

C'est la sortie de la console PowerShell

ffmpeg.exe : FFmpeg version SVN-r20428, Copyright (c) 2000-2009 Fabrice Bellard, et al.
row:1 char:24
+ d:\video.Enc\ffmpeg.exe <<<<  -i d:\video.Enc\1.wmv
    + CategoryInfo          : NotSpecified: (FFmpeg version ...Bel 
   lard, et al.:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

  built on Nov  1 2009 04:03:50 with gcc 4.2.4
  configuration: --enable-memalign-hack --prefix=/mingw --cross-pre
fix=i686-mingw32- --cc=ccache-i686-mingw32-gcc --target-os=mingw32 
--arch=i686 --cpu=i686 --enable-avisynth --enable-gpl --enable-vers
ion3 --enable-zlib --enable-bzlib --enable-libgsm --enable-libfaad 
--enable-pthreads --enable-libvorbis --enable-libtheora --enable-li
bspeex --enable-libmp3lame --enable-libopenjpeg --enable-libxvid --
enable-libschroedinger --enable-libx264 --enable-libopencore_amrwb 
--enable-libopencore_amrnb
  libavutil     50. 3. 0 / 50. 3. 0
  libavcodec    52.37. 1 / 52.37. 1
  libavformat   52.39. 2 / 52.39. 2
  libavdevice   52. 2. 0 / 52. 2. 0
  libswscale     0. 7. 1 /  0. 7. 1
[wmv3 @ 0x144dc00]Extra data: 8 bits left, value: 0

Seems stream 1 codec frame rate differs from container frame rate: 
1000.00 (1000/1) -> 15.00 (15/1)
Input #0, asf, from 'd:\video.Enc\1.wmv':
  Duration: 00:12:0
2.00, start: 5.000000, bitrate: 197 kb/s
    Stream #0.0(eng): Audio: wmav2, 44100 Hz, 1 channels, s16, 48 k
b/s
    Stream #0.1(eng): Video: wmv3, yuv420p, 1024x768, 137 kb/s, 15 tbr, 1k tbn, 1k tbc Metadata
    title           : Silverlight 2.0 Hello World Application
    author          : Sergey Pugachev
    copyright       : 
    comment         : 
    WMFSDKVersion   : 11.0.6001.7000
    WMFSDKNeeded    : 0.0.0.0000
    IsVBR           : 1
    ASFLeakyBucketPairs: 
    VBR Peak        : 715351
    Buffer Average  : 127036
At least one output file must be specified

Mais je ne peux pas comprendre comment scripter cela et capturer la sortie vers n'importe quel type d'objets chics. J'ai essayé le script direct, où le fichier ps1 contenait l'expression exacte "d: video.enc ffmpeg.exe -id: video.enc 1.wmv" - cela n'a pas fonctionné. J'ai également essayé de le faire avec l'invocat et l'invocation de l'expression. Le premier renvoie une chaîne exacte avec la commande, deuxième - du vidage d'erreur sur la console de sortie mais pas sur -ErrorVariable J'ai spécifié (j'ai définie toutes les variables, pas seulement l'erreur une - toutes étaient vides).

Quelqu'un peut-il indiquer la syntaxe de corriger pour invoquer des applications de console dans Posh et la capture de sortie?

La deuxième question concernera l'analyse de cette sortie - j'aurai besoin de données de résolution vidéo pour calculer le rapport d'aspect correct pour la conversion. Il sera donc cool si quelqu'un indique comment travailler avec une sortie d'erreur capturée et une chaîne d'analyse comme

Stream # 0.1 (Eng): Vidéo: WMV3, YUV420P, 1024x768,

Était-ce utile?

La solution

Essayez de rediriger le flux d'erreur vers STDOUT comme tel, puis vous devriez pouvoir capturer STDOUT et STDERR dans une seule variable, par exemple:

$res = d:\video.Enc\ffmpeg.exe -i d:\video.Enc\1.wmv 2>&1

Pour capturer les données, essayez ceci:

$res | Select-String '(?ims)^Stream.*?(\d{3,4}x\d{3,4})' -all | 
    %{$_.matches} | %{$_.Groups[1].Value}

Je ne sais pas si $ res sera une chaîne ou plusieurs, mais ce qui précède devrait fonctionner pour les deux cas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top