web-dev-qa-db-ja.com

ffmpegで動画をバッチ圧縮

フォルダーに多くのビデオがあり、1つのコマンドですべてを圧縮したい。

私が使用する1つのビデオを圧縮するには:

Sudo apt-get install ffmpeg
ffmpeg -i input.mp4 output.mp4

しかし、圧縮したいビデオがたくさんある場合はどうなりますか?私は以下を試しました:

ffmpeg -i ./videos ./compressed-videos

しかし、それから私はこのエラーを受け取ります:

./videos: Is a directory
1
Florian Ludewig

私はこの目的のためにbash forループを使用します-_videos/_および_compressed/_ディレクトリを含む親ディレクトリにいるとします。

_for f in videos/*mp4; do ffmpeg -i "$f" "compressed/${f##*/}"; done
_

または、任意のタイプのビデオファイルをmkvに変換する場合は、次を使用できます。

_for f in videos/*; do ffmpeg -i "$f" "compressed/$(basename "${f%.*}").mkv"; done
_

上記の例では:

  • _${var##*/}_は、最後のスラッシュ_/_以降のすべての文字を出力するため、パスのないファイル名のみが残ります。
  • _${f%.*}_は最後のドットの前のすべての文字を出力するため、パスとファイル名は保持されますが、ファイル拡張子は削除されます。次に、コマンド置換$(basename "/path/name")は、パスなしで名前のみを出力します。

参照:

1
pa4080