web-dev-qa-db-ja.com

バッチプロセスffmpeg?

WMA2オーディオとMP4ビデオを含むAVIカプセル化ビデオを前提として、ビデオをパススルーするにはどうすればよいですか。オーディオをMP3に変換します。次に、ファイル全体をAVIに再カプセル化しますか?

ffmpeg -i "foo bar.avi" -acodec libmp3lame "Converted\foo bar.avi"

このディレクトリ内のすべての.aviファイルに対して同じコマンドを実行するにはどうすればよいですか?

(bashまたはWindows CLI [for?]を使用したソリューションが必要です)

2
A T

Pythonソリューション

from sh import ffmpeg
from os import listdir
from os.path import split
from sys import argv

[ffmpeg("-i '{0}' -acodec libmp3lame 'Converted\{0}'".format(_file))
 for _file in sum([listdir(split(arg)[0]) for arg in argv], [])]
0
A T

これは単に機能しませんか?

for file in *.avi;do ffmpeg -i "$file" -acodec libmp3lame "Converted\\$file";done

編集

バックスラッシュの問題があるようです...

これを試して:

for file in *.avi;do ffmpeg -i "$file" -acodec libmp3lame 'Converted\\'"$file";done

またはこれ:

for file in *.avi;do ffmpeg -i "$file" -acodec libmp3lame 'Converted\'"$file";done
4
F. Hauri

bashで、.aviファイルがあるディレクトリで実行すると、次のようになります。

#!/bin/bash
for file in *.avi; do
    ffmpeg -i "$file" -c:a libmp3lame "Converted\\$file";
done;
1
imp25

関連するコマンドとの試行錯誤の会話の後、これはbashシェルで機能することがわかりました

for i in *.ts; do ffmpeg -i "$i" -threads 6 -f mpegts -vcodec libx264 -preset slow -bufsize 8000 -async 48000 -acodec ac3 -ab 384k -n subdir/"${i%}"; done

これにより、同じ名前でサブディレクトリにある入力.tsファイルの高品質の圧縮バージョンが作成されます。サブディレクトリが存在しない場合は書き込まないので、「サブディレクトリ」と呼んでいるものの代わりにサブディレクトリを指定する必要があると思います。また、このバッチプロセスの適切な構文を見つける前に、個別にレンダリングしたファイルが上書きされないように-nを使用しました(6コアプロセッサを使用しているため、「-threads」もハードウェアに合わせて調整する必要があります)

0
Doug Jotblad