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!

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!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.