web-dev-qa-db-ja.com

ffmpegでディレクトリ全体をどのように変換しますか?

コマンドライン経由またはバッチスクリプトを使用してffmpegでディレクトリ/フォルダ全体をどのように変換しますか?

133
Eugene

前の回答では、out.movという1つの出力ファイルのみが作成されます。古いムービーごとに個別の出力ファイルを作成するには、これを試してください。

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

LinuxおよびmacOSの場合、これは-を使用して1行で実行できます。 パラメータ拡張 出力ファイルのファイル名拡張子を変更するには:

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

Windowsの場合:

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

1行のbashスクリプトを実行するのは簡単です-*.aviをファイルタイプに置き換えます:

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

サブディレクトリで変換するには、例えば.

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

Ffmpegで何かをバッチ変換したいが、便利なWindowsインターフェイスを持ちたい人のために、私はこのフロントエンドを開発しました:

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

Ffmpegにウィンドウファッションインターフェイス、プログレスバー、残り時間情報、ffmpegを使用するときに常に見逃していた機能を追加します。

10
Eibel

GNU parallel がある場合、vid_dir以下のすべての.aviファイルをmp4に並列に変換できます。

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

さまざまな形式から/に変換するには、必要に応じて'*.avi'または.mp4を変更します。 GNU parallelは、通常parallelと呼ばれるパッケージのほとんどのLinuxディストリビューションのリポジトリにリストされています。

4
sebbit

これは冗長かもしれませんが、このスクリプトを使用してファイルをバッチ変換します。

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が変換できる限り、2つの拡張子を指定できます。

3
Alexander Luna

ここでコードゴルフに少し似ていますが、これまでのほとんどすべての答えはbash(1つの孤独なcmdを除く)なので、ここにあります  クロスプラットフォーム powershellを使用するコマンド(素晴らしいため):

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

* .aviをソース映像に一致するものに変更できます。

3
stib

Windowsの場合:

ここでは、すべての(.mp4)ファイルを(.mp3)ファイルに変換しています。
cmdを開き、目的のフォルダーに移動してコマンドを入力します。

ショートカット:(オプション)
1。 (.mp4)ファイルが存在するフォルダーに移動します
2。 Shiftキーを押しながら左クリックして、「ここでPowerShellウィンドウを開く」を選択します
または「ここでコマンドプロンプトウィンドウを開く」
3。 「cmd」と入力します[注:PowerShellではなくcmdを直接開く場合は、この手順をスキップしてください]
4。コマンドを実行する

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

グラフィカルインターフェイスでffmpegXを使用してバッチ処理する場合は、 Quick Batcherを試してください。無料で、最後のffmpegX設定を使用して、ドロップしたファイルを変換します。

フォルダーをQuick Batcherにドラッグアンドドロップできないことに注意してください。そのため、ファイルを選択し、Quick Batcherを介して配置します。

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

[1][2] を使用して、flacファイルをmp3(スペースを含むファイル名に対して安全)にバッチ処理します。

2
César

窓:

@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に設定できますが、本当に優れたスピーカーシステムがない限り、それは価値がありません。

2
user151496

この1つだけが私のために働いた、plsは、ffmpeg.exeファイルが置かれている場所に手動で「newfiles」フォルダーを作成する必要があることに気付きます。

ファイルを.wavオーディオコードに変換:

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

それが助けたことを願っていますか????。

1
Mehrdad995

まだ提案されていない別の簡単な解決策は、xargsを使用することです。

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

1つの小さな落とし穴は、出力ファイルの扱いにくい命名です(例:input.avi.mp4)。これの可能な回避策は次のとおりです。

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

0
telenachos