Как преобразовать весь каталог с помощью ffmpeg?

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

Ответ 1

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

for i in *.avi;
  do name='echo "$i" | cut -d'.' -f1'
  echo "$name"
  ffmpeg -i "$i" "${name}.mov"
done

Ответ 2

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

for i in *.avi; do ffmpeg -i "$i" "${i%.*}.mp4"; done

Ответ 3

И в Windows:

FOR /F "tokens=*" %G IN ('dir /b *.flac') DO ffmpeg -i "%G" -acodec mp3 "%~nG.mp3"

Ответ 4

Однострочный скрипт bash будет прост в использовании - замените *.avi на свой файл:

for i in *.avi; do ffmpeg -i "$i" -qscale 0 "$(basename "$i" .avi)".mov  ; done

Ответ 5

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

find . -exec ffmpeg -i {} {}.mp3 \;

Ответ 6

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

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

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

Ответ 7

Для Windows:

Здесь я конвертирую все (.mp4) файлы в (.mp3) файлы.
Просто откройте cmd, перейдите в нужную папку и введите команду.

Ярлык: (необязательно)
1. Перейдите в папку, где находятся ваши (.mp4) файлы
2. Нажмите Shift и щелкните левой кнопкой мыши и выберите "Открыть окно PowerShell здесь"
или "Открыть окно командной строки здесь"
3. Введите "cmd" [ПРИМЕЧАНИЕ. Пропустите этот шаг, если он непосредственно открывает cmd вместо PowerShell]
4. Запустите команду

for %i in (*.mp4) do ffmpeg -i "%i" "%~ni.mp3"

Ответ 8

Если вы используете 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.

Ответ 9

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

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 может его преобразовать, вы можете указать любые два расширения.

Ответ 10

Это немного похоже на Code Golf здесь, но так как почти все ответы пока что bash (за исключением одного одиночного cmd), здесь кроссплатформенная команда windows, которая использует powershell (потому что это здорово):

ls *.avi|%{ ffmpeg -i $_ <ffmpeg options here> $_.name.replace($_.extension, ".mp4")}

Вы можете изменить *.avi на то, что соответствует исходному материалу.

Ответ 11

for i in *.flac;
  do name=`echo "${i%.*}"`;
  echo $name;
  ffmpeg -i "${i}" -ab 320k -map_metadata 0 -id3v2_version 3 "${name}".mp3;
done

Пакетный процесс flac файлов в mp3 (безопасен для имен файлов с пробелами) с помощью [1] [ 2]

Ответ 12

окна:

@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, если хотите, но если у вас нет действительно хорошей акустической системы, это бесполезно

Ответ 13

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

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

Ответ 14

Я поставил этот php вместе для моих собственных потребностей. Вы можете потянуть его и изменить в соответствии со своими собственными.

Win10, GeForce GTX 1060, Cygwin, Vixies Cron

/* Вам понадобится графический процессор nVidia 10x (или лучше) для этого script */

Мои медиа-каталоги находятся в массиве вверху, а значения по умолчанию - внизу. script принимает один из четырех аргументов [tv, new, movies, all], который коррелирует с предварительно сконфигурированными медиаресурсами или всеми из них. Постановка без аргументов приведет к тому, что script будет рекурсивно работать с текущим рабочим каталогом.

Есть некоторая логика, чтобы рассматривать ТВ и фильмы немного по-другому для аудио. 384k max bitrate для телевизора, 512k для MOVIES. Если аудиопоток соответствует или меньше этих битрейтов, аудиокодек копируется, а не повторно кодируется. script использует HEVC.H265 для новых графических инструкций NVIDIA nvenc. Обычно я получаю от 4x (1080) до 10x (720) скоростей, если аудио копируется (в 2 раза по 5x). Конечным результатом является BlueRay H.264 12GB, уменьшенный до H.265 3GB с таким же качеством, насколько человеческий глаз может восприниматься.

Скорость передачи данных рассчитывается с использованием качества видео (ширина + высота) *.

например.

(1280 + 720) * 0.842 = 1680k VBR
(1920 + 1080) * 0.842 = 2526k VBR
(3840 + 2160) * 0.842 = 5052k VBR

Это рассчитано для H.265 - вы можете свободно настраиваться по желанию. Переменная качества находится в функции по умолчанию для кодеков в нижней части script. Я использую Vixie Cron для сканирования всех медиа-каталогов в ночное время для преобразования. script использует ffprobe для анализа реальных медиапотоков для принятия решений о том, следует ли перекодировать или пропускать. Он хранит данные зонда в. /.xml/title.xml для быстрого сканирования каталога... У меня есть ffmpeg под низким приоритетом (nice -n15), чтобы не захватить компьютер, если вы делаете что-то еще.

В любом случае, это довольно близко к тому, где я хочу, и подумал, что я поделюсь им со всеми. Он намного лучше, чем любой из премиальных интерфейсов стиля Wondershare (который пока еще не делает H.265), и мне не нужно тратить деньги или время на соединение с ручным кодированием.

Загрузите PHP в tar gzip - hevc.tgz

Ответ 15

Только этот работал для меня, пожалуйста, обратите внимание, что вам нужно вручную создать папку "newfiles", где находится файл ffmpeg.exe.

Перерабатывать. файлы в .wav audio Код:

for %%a in ("*.*") do ffmpeg.exe -i "%%a" "newfiles\%%~na.wav"
pause

То есть, если вы хотите преобразовать все файлы .mp3 в .wav, измените ("*.*") на ("*.mp3").

Автор этого сценария:

https://forum.videohelp.com/threads/356314-How-to-batch-convert-multiplex-any-files-with-ffmpeg

  надеюсь, это помогло 🙏.

Ответ 17

немного php script, чтобы сделать это:

#!/usr/bin/env php
<?php
declare(strict_types = 1);
if ($argc !== 2) {
    fprintf ( STDERR, "usage: %s dir\n", $argv [0] );
    die ( 1 );
}
$dir = rtrim ( $argv [1], DIRECTORY_SEPARATOR );
if (! is_readable ( $dir )) {
    fprintf ( STDERR, "supplied path is not readable! (try running as an administrator?)" );
    die(1);
}
if (! is_dir ( $dir )) {
    fprintf ( STDERR, "supplied path is not a directory!" );
    die(1);
}
$files = glob ( $dir . DIRECTORY_SEPARATOR . '*.avi' );
foreach ( $files as $file ) {
    system ( "ffmpeg -i " . escapeshellarg ( $file ) . ' ' . escapeshellarg ( $file . '.mp4' ) );
}

Ответ 18

Другим простым решением, которое еще не было предложено, было бы использование xargs:

ls *.avi | xargs -i -n1 ffmpeg -i {} "{}.mp4"

Одна небольшая ловушка - это неудобное именование выходных файлов (например, input.avi.mp4). Возможный обходной путь для этого может быть:

ls *.avi | xargs -i -n1 bash -c "i={}; ffmpeg -i {} "\${i%.*}.mp4" ls *.avi | xargs -i -n1 bash -c "i={}; ffmpeg -i {} "\${i%.*}.mp4" "