Conversion du script Unix en batch Windows pour le redimensionnement FFmpeg

1

Je souhaite réduire la dimension vidéo à 720: 480 et conserver le rapport d’aspect original lorsque la largeur vidéo entrée est supérieure à 720, sinon, conservez la dimension et le rapport d’aspect originaux.

J'essaie de reproduire ce script dans un fichier de commandes Windows qui échoue:

Redimensionner des vidéos avec ffmpeg / avconv pour les adapter à un lecteur de taille statique

set $width=720
set $height=480
ffmpeg -i file8.3gp -vcodec libx264 -preset slow -crf 20 -filter:v "scale=iw*min($width/iw,$height/ih):ih*min($width/iw,$height/ih), pad=$width:$height:($width-iw*min($width/iw,$height/ih))/2:($height-ih*min($width/iw,$height/ih))/2" -threads 0 -acodec libvo_aacenc -b:a 128k out.mp4

Les erreurs que je reçois:

ffmpeg -i file8.3gp -vcodec libx264 -preset slow
-crf 20 -filter:v "scale=iw*min($width/iw,$height/ih):ih*min($width/iw,$height/i
h), pad=$width:$height:($width-iw*min($width/iw,$height/ih))/2:($height-ih*min($
width/iw,$height/ih))/2" -threads 0 -acodec libvo_aacenc -b:a 128k out.mp4
ffmpeg version N-54691-g7f4a1fd Copyright (c) 2000-2013 the FFmpeg developers
  built on Jul 12 2013 16:31:48 with gcc 4.7.3 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
le-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetyp
e --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --ena
ble-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-l
ibopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libsp
eex --enable-libtheora --enable-libtwolame --enable-libvo-aacenc --enable-libvo-
amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --
enable-libxvid --enable-zlib
  libavutil      52. 39.100 / 52. 39.100
  libavcodec     55. 18.102 / 55. 18.102
  libavformat    55. 12.102 / 55. 12.102
  libavdevice    55.  3.100 / 55.  3.100
  libavfilter     3. 80.101 /  3. 80.101
  libswscale      2.  3.100 /  2.  3.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  3.100 / 52.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'file8.3gp':
  Metadata:
    major_brand     : 3gp5
    minor_version   : 256
    compatible_brands: 3gp53gp4
    creation_time   : 2005-10-28 17:36:40
  Duration: 00:00:04.93, start: 0.000000, bitrate: 46 kb/s
    Stream #0:0(eng): Audio: amr_nb (samr / 0x726D6173), 8000 Hz, mono, flt, 8 k
b/s
    Metadata:
      creation_time   : 2005-10-28 17:36:40
      handler_name    : Apple Sound Media Handler
    Stream #0:1(eng): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p
, 176x144 [SAR 1:1 DAR 11:9], 35 kb/s, 15 fps, 15 tbr, 600 tbn, 1k tbc
    Metadata:
      creation_time   : 2005-10-28 17:36:40
      handler_name    : Apple Video Media Handler
File 'out.mp4' already exists. Overwrite ? [y/N] y
[Parsed_scale_0 @ 0000000000318640] Invalid size 'iw*min($width/iw'
[AVFilterGraph @ 00000000024c0540] Error initializing filter 'scale' with args '
iw*min($width/iw:flags=0x4'
Error opening filters!
kheya
la source
Bonjour slhck: J'ai essayé la commande que vous aviez dans un autre post, mais elle échoue dans Windows batch. S'il vous plaît voir ma mise à jour ci-dessus sous modifier.
kheya
La commande que vous avez donnée échoue mal dans Windows. Beaucoup d'erreurs de syntaxe.
kheya
1
Regardez les messages d'erreur que vous obtenez: Invalid size 'iw*min($width/iw'. Cela suggère que ffmpegcasser votre scale=iw*min($width/iw,$height/ih)expression en morceaux à la virgule. Maintenant, regardez votre commande, et regardez la commande que vous prétendez copier - elle comporte des barres obliques inverses avant les virgules. La barre oblique inverse signifie souvent que le caractère suivant est spécial - par exemple, une virgule fait partie d' une expression plutôt que d'un séparateur.
Scott
De plus, votre conversion de la commande Unix de slhck ♦ en langage de commande invite de commande Windows est erronée.
Scott
J'ai rouvert la question car il ne s'agit plus que d'un problème de script Windows. S'il vous plaît, à l'avenir, cinglez le nom d'utilisateur avec @slhck afin que je reçoive une notification. Merci!
Slhck

Réponses:

1

Je n'ai pas ffmpegsur ma machine, donc je ne peux pas tester cela, mais en commençant par l'observation que l'invite de commande n'utilise pas de signes dollar, j'ai appliqué les transformations suivantes:

  • Changer en .set $var=$valueset var=$value
  • Changer en .$var%var%

et j’ai restauré les barres obliques inverses de la réponse de slhck ♦ , et j’ai trouvé:

@echo off set width=720 set height=480
ffmpeg -i file8.3gp -vcodec libx264 -preset slow -crf 20 -filter:v "scale=iw*min(%width%/iw\,%height%/ih):ih*min(%width%/iw\,%height%/ih), pad=%width%:%height%:(%width%-iw*min(%width%/iw\,%height%/ih))/2:(%height%-ih*min(%width%/iw\,%height%/ih))/2" -threads 0 -acodec libvo_aacenc -b:a 128k out.mp4

(Ligne vide ajoutée pour plus de clarté.) Pour plus de clarté, vous pouvez séparer cette longue ligne de cette manière:

ffmpeg -i file8.3gp -vcodec libx264 -preset slow -crf 20 -filter:v ^     "scale=iw*min(%width%/iw\,%height%/ih):ih*min(%width%/iw\,%height%/ih), pad=%width%:%height%:(%width%-iw*min(%width%/iw\,%height%/ih))/2:(%height%-ih*min(%width%/iw\,%height%/ih))/2" ^     -threads 0 -acodec libvo_aacenc -b:a 128k out.mp4

Je ne suis pas sûr que vous puissiez le faire à l'intérieur de la chaîne citée. Bonne chance!

Scott
la source