How to convert multiple video files (one directory) by FFMpeg on command line

for %a in ("*.3gp") do ffmpeg -i "%a" -c:v libx264 -c:a copy -q:v 0 -y "newfiles\%~na.mp4"
  • *.3gp – input files; what you want to convert
  • ffmpeg – ffmpeg executable; if you haven’t it in PATH, you have to insert absolut path to the ffmpeg (eg. c:\XXX\YYY\ffmpeg.exe)
  • -c:v libx264 – video codec – H.264 in this example
  • -c:a copy – audio code – „copy original audio stream“ in this example
  • -q:v 0 –  „same video quality“
  • newfiles\%~na.mp4 – output files; original file extension will be removed; directory must exists (newfiles in this example)

For more details and options, please use Google 🙂

Paralelní spuštění příkazu pro seznam souborů (bash)

Potřeboval jsem provézt konverzi několika videí na jiný formát, a jelikož pro daná kodek nešlo u ffmpeg použít vícevláknové zpracování, řešil jsem jak pouštět několik příkazu současně (a tím urychlit celkové zpracování seznamu souborů).

Nejjednodušší postup jsem našel s použitím xargs:

ls -1 /cesta/soubory* | xargs -n1 -P3 -ISOUBOR ffmpeg -i SOUBOR ...

  • pomocí ls se vyrobí seznam souborů, který se přehodí na xargs
  • -n1 určuje kolik záznamů si má xargs vzít najednou (1 je defaultní hodnota)
  • -P3 určuje kolik procesů se má pustit (tohle je ten „magický parametr“)
  • -I určuje řetězec, který se pak nahradí konkrétním parametrem ze seznamu