私は、いくつかがaacオーディオを持ち、いくつかがwav、raw PCM、または他の同様のフォーマットを持っているビデオファイルのセットをバッチ変換しようとしています。
私は次の方法を探しています:
-c:a copy
)-c:a aac -b:a 160k
)私の現在のアプローチは、どのファイルにaacオーディオストリームがないかを手動で識別し、それらを個別に変換することですが、すべてのファイルを一緒に変換するとよいでしょう。
次のようなオーディオの条件文をFFMpegコマンドに挿入する方法はありますか?
for f in *.mkv; do
ffmpeg -i "$f" -c:v libx264 -c:a [some magic here] "${f%.*}_new.mkv"
done
入力が特定の形式でない場合、コピーをエンコードまたはストリーミングするための条件ステートメントはffmpeg
にありません。ただし、ffprobe
を使用してオーディオ形式を決定してから、ffmpeg
を使用してオーディオをエンコードまたはストリームコピーすることができます。
これを行う方法を示す簡単なスクリプトを次に示します。コピーして保存し、chmod +x yourscriptname
で実行権限を付与してから、./yourscriptname input.foo
で実行します。
#!/bin/bash
audioformat=$(ffprobe -loglevel error -select_streams a:0 -show_entries stream=codec_name -of default=nw=1:nk=1 "$1")
if [ "$audioformat" = "aac" ]; then
ffmpeg -i "$1" -c:v libx264 -c:a copy "${1%.*}_new.mkv"
else
ffmpeg -i "$1" -c:v libx264 -c:a aac "${1%.*}_new.mkv"
fi
ニーズに合わせてこれを簡単に変更できます。
これは驚くほど微妙な問題です。すべてのコーナーケースを解決するのにかなりの時間がかかり、多くのパスが必要でした。私は自分のソリューションをオンラインにしました ここ 。
私の特定の使用例は、macOSを使用してiPad Air2で再生するための*.mp4
ファイルを作成することですが、使用されているツールはすべてLinuxで一般的に利用可能であり、ソリューションは他のデバイスタイプに容易に適合します。
プロジェクトのホームページから、その適応を行うことに関する私のメモのいくつかを次に示します。
このプロジェクトは、 ffmpeg
、 ffprobe
、 mediainfo
を駆動する3つのBashシェルスクリプトで構成されています。 =、および atomicparsley
これらのプログラムでサポートされている任意のタイプのファイルを、iPad Air2クラスのデバイスでの再生に適したH.264 * .mp4ファイルに変換します。
スクリプトにはいくつかの macOS ismsが含まれているため、Linuxで使用する場合、またはWindowsで Cygwin 、 [〜#〜 ] msys [〜#〜] 、または [〜#〜] wsl [〜#〜] :
rmtrash
プログラムは、ファイルがユーザーのごみ箱フォルダに移動されることを除いて、 rm
のように動作します。他のシステムにも同様のツールが多数存在します。または、ipad-h264
のこの行をrm
呼び出しまたは他の「邪魔にならない」タイプのコマンドに置き換えることができます。
open
呼び出しは、関連付けられたGUIプログラムを使用してファイルを開くためのmacOSメカニズムです。 Subler に関連付けられた*.mp4
ファイルがあります remuxing または transcoding の後の次のステップはタグを確認し、カバーを適用することですアートなど。Cygwinでは、 cygstart
でも同じ効果が得られます。 Linuxでも同様の効果を得る方法があると思います。または、open
コマンドの代わりに次のステップをハードコーディングすることもできます。
ホームページの[ダウンロード]セクションにあるリンクを使用して、リポジトリからソフトウェアをダウンロードできます。