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


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

11 85

11 ответов:

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

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

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

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

на Windows посмотреть ответ по lxs.

и на Windows:

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

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

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

преобразовать в поддиректории, например:

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

Если вы хотите графический интерфейс для пакетной обработки с ffmpegX, попробовать Быстрая Батчер. Это бесплатно и займет ваши последние настройки ffmpegX для преобразования файлов, которые вы бросаете в него.

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

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]

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

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

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

если у вас есть 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 parallel указан в большинстве репозиториев дистрибутивов Linux в пакете, который обычно называется parallel.

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

old_extension=
new_extension=

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

маленький php скрипт для этого:

#!/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' ) );
}