Как конвертировать весь каталог с помощью ffmpeg? - PullRequest
123 голосов
/ 26 апреля 2011

Как конвертировать весь каталог / папку с помощью ffmpeg через командную строку или с помощью пакетного скрипта?

Ответы [ 15 ]

176 голосов
/ 17 ноября 2015

Для Linux и macOS это можно сделать в одну строку, используя расширение параметра , чтобы изменить расширение имени файла выходного файла:

for i in *.avi; do ffmpeg -i "$i" "${i%.*}.mp4"; done
130 голосов
/ 20 ноября 2011

Предыдущий ответ создаст только 1 выходной файл с именем out.mov. Чтобы создать отдельный выходной файл для каждого старого фильма, попробуйте это.

for i in *.avi;
  do name=`echo "$i" | cut -d'.' -f1`
  echo "$name"
  ffmpeg -i "$i" "${name}.mov"
done
52 голосов
/ 18 июня 2014

И в Windows:

FOR /F "tokens=*" %G IN ('dir /b *.flac') DO ffmpeg -i "%G" -acodec mp3 "%~nG.mp3"
23 голосов
/ 03 июля 2011

Сценарий bash в одну строку будет легко сделать - замените *.avi на ваш тип файла:

for i in *.avi; do ffmpeg -i "$i" -qscale 0 "$(basename "$i" .avi)".mov  ; done
15 голосов
/ 12 декабря 2016

Для преобразования с подкаталогами используйте, например,

find . -exec ffmpeg -i {} {}.mp3 \;
9 голосов
/ 25 апреля 2018

Для тех, кто хочет что-то пакетно конвертировать с помощью ffmpeg, но хотел бы иметь удобный интерфейс Windows, я разработал этот интерфейс:

https://sourceforge.net/projects/ffmpeg-batch

Он добавляет к ffmpeg aинтерфейс оконной моды, индикаторы выполнения и оставшееся время, функции, которые я всегда упускал при использовании ffmpeg.

4 голосов
/ 10 мая 2018

Если у вас GNU параллельный , вы можете конвертировать все файлы .avi ниже vid_dir в mp4 параллельно, используя все, кроме одного из ваших процессорных ядер с

find vid_dir -type f -name '*.avi' -not -empty -print0 |
    parallel -0 -j -1 ffmpeg -loglevel fatal -i {} {.}.mp4

Чтобы преобразовать из / в разные форматы, измените '*.avi' или .mp4, если необходимо. Параллель GNU указана в репозиториях большинства дистрибутивов Linux в пакете, который обычно называется parallel.

3 голосов
/ 14 сентября 2018

Я знаю, что это может быть избыточно, но я использую этот скрипт для пакетного преобразования файлов.

old_extension=$1
new_extension=$2

for i in *."$old_extension";
  do ffmpeg -i "$i" "${i%.*}.$new_extension";
done

Чтобы сделать его более гибким, требуется 2 аргумента:

  1. расширение, которое вы хотите конвертировать из
  2. новое расширение, которое вы хотите преобразовать в

Я создаю для него псевдоним, но вы также можете использовать его вручную следующим образом:

sh batch_convert.sh mkv mp4

Это преобразовало бы все файлы mkv в mp4 файлы.

Как видите, он немного более универсален. Пока ffmpeg может конвертировать его, вы можете указать любые два расширения.

3 голосов
/ 05 апреля 2014

Если вам нужен графический интерфейс для пакетной обработки с помощью ffmpegX, попробуйте Quick Batcher . Это бесплатно и примет ваши последние настройки ffmpegX, чтобы конвертировать файлы, которые вы вставили в него.

Обратите внимание, что вы не можете перетащить папки в Quick Batcher. Поэтому выберите файлы, а затем поместите их в Quick Batcher.

2 голосов
/ 30 января 2019

windows:

@echo off
for /r %%d in (*.wav) do (
    ffmpeg -i "%%~nd%%~xd" -codec:a libmp3lame -c:v copy -qscale:a 2 "%

%~nd.2.mp3"
)

это переменный битрейт качества 2, вы можете установить его на 0, если хотите, но если у вас нет действительно хорошей акустической системы, это бесполезно imo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...