Как преобразовать весь каталог с помощью ffmpeg?
Как вы конвертируете весь каталог / папку с помощью ffmpeg через командную строку или с помощью пакетного сценария?
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.
однострочный сценарий bash было бы легко сделать-заменить
*.aviС вашего типа:for i in *.avi; do ffmpeg -i "$i" -qscale 0 "$(basename "$i" .avi)".mov ; done
Если вы хотите графический интерфейс для пакетной обработки с ffmpegX, попробовать Быстрая Батчер. Это бесплатно и займет ваши последние настройки ffmpegX для преобразования файлов, которые вы бросаете в него.
обратите внимание, что вы не можете перетащить папки на быстрый дозатор. Поэтому выберите файлы, а затем поместите их через Быстрый дозатор.
для тех, кто хочет конвертировать что-либо с помощью 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 аргумента, чтобы сделать его более гибким:
- расширение, которое вы хотите конвертировать из
- новое расширение, которое вы хотите конвертировать в
создать псевдоним для него, но вы также можете использовать его вручную, как это:
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' ) ); }