ffmpegを使用してH.265 mkvをH.264にバッチ変換し、ファイルを再エンコードに対応させる


31

リソースを大量に消費するH.265エンコードファイルがあり、それらはうまく再生できず、変換ソフトウェア(mencoder)は(現在)H.265フォーマットをサポートしていません。コマンドラインバッチファイルでH.264に変換して、Devede / OGMripを使用して再圧縮のためにファイルをすばやく変換できますか?このサイトを検索しても、説明されていないため、有用な質問と思われるものを投稿し、質問に回答します。

回答:


37

はい、使用しffmpegます。

ターミナルを開き、H.265でエンコードされたファイルを含むディレクトリに移動します。ffmpeg適切なライブラリがインストールされ、MKV形式であると想定し、以下をターミナルウィンドウにコピーして貼り付けます。

INPUT="$1"
for i in *.mkv ; do
    ffmpeg -i "$i" -bsf:v h264_mp4toannexb -sn -map 0:0 -map 0:1 -vcodec libx264 "$i.ts"
    mv "$i.ts" "$i.mpg"
    sleep 3
done

そこにあります。これは、同じディレクトリのMPGコンテナでh.264に変換されます。

コマンドスイッチの説明:

  • for i in *.mkv ; do ... done

    これにより、ディレクトリ内のすべての.mkvファイルがバッチプロセスに含まれるように設定されます。これは、処理するファイルのコンテナ拡張に対応するために変更される場合があります。

  • ffmpeg -i "$i" プログラムffmpegを実行し、処理するファイルを呼び出します。

    • -bsf:v 使用するビデオビットストリームフィルターをアクティブにします。

    • h264_mp4toannexb -アクティブ化されるビットストリームフィルターです。

      H.264ビットストリームを長さプレフィックスモードから開始コードプレフィックスモードに変換します(ITU-T H.264仕様の付録Bで定義されています)。

      これは、一部のストリーミング形式で必要です。通常、mpegtsMKV h.264を処理するMPEG-2トランスポートストリーム形式()(現在)が必要です。含まれていない場合は、ターミナルウィンドウで使用するように指示するエラーが表示されます。

    • -sn 字幕ストリームのストリーミングを停止します(ビデオに字幕が必要ない場合)これはオプションであり、削除できます。

    • -map 0:0 -map 0:1ファイルの最初の2つのストリーム(0:0ビデオストリーム、0:1ファイルの最初のオーディオストリーム)のみを処理するようにffmpegに指示します。これは2つのことを行い、余分なオーディオストリームを取り除きます。通常、最初のオーディオストリームは英語ですが、常にではありません。埋め込み字幕などの他のストリームは削除され、ファイルサイズが小さくなります。これもオプションの文字列です。ffprobeファイルで利用可能なストリームを表示するために使用できます。-mapオプションであり、コマンドから破棄できます。

    • -vcodec libx264 これは、ffmpegに出力をH.264にエンコードするように指示します

    • "$i.ts" 出力を.ts形式に保存します。これは、ソースファイルを上書きしないために役立ちます。

  • mv "$i.ts" "$i.mpg"同じディレクトリ内のファイル拡張子をMPGに変換します。これは、好きなディレクトリに送信するように設定できます。

  • sleep 3 -ffmpegに次のファイルをキューイングする時間を与えて、プロセスを休ませることができます


3
優れた!これで、質問の下のコメントを削除できます。これsleep 3は不要ですが(ループの終了に役立つ可能性があります)、INPUT=$1これは対話型シェルで直接実行しているため、意味がありません。
ムル

11
再エンコードする代わりに、オーディオをストリームコピーすることを検討してください-c:a copy。また、0:0常にビデオを指すと0:1は限らず、オーディオを常に指すとは限りません。あなたは、潜在的な問題を回避するために、ストリーム指定子を使用することができます:-map 0:v -map 0:aあなたが入力0からのすべてのビデオおよびオーディオストリームをしたい場合、または-map 0:v:0 -map 0:a:0あなただけの入力を0から最初のビデオとオーディオストリームをしたい場合は、英語のみのオーディオストリームをしたい場合は、次の-map 0:m:language:eng(それを想定しラベルが付いています)。
llogan

1
@LordNeckbeard完全な答えを書くために投票します。
フランマルゾア

1
@Franコメントに賛成票があまりにも多いことに気づかなかった。より簡単で、エラーが少なく、より効率的な方法を使用して回答を追加しました。
llogan

1
私は完全に単純に行きますffmpeg -i $INPUT -vcodec h264 -acodec copy $OUTPUT。すべてのffmpegの答えが非常に悪名高い無意味な旗の弾幕とは対照的に、私が日常的に使用し、実際に記憶できるもの。
ベンシンクレア

20

H.265からH.26​​4へのバッチ変換

これらの例は最近のために書かれましたffmpeg。面倒を省いて、最新バージョンをダウンロードしてください。次に、ffmpegバイナリを入力します(~/binまたは、/usr/local/bin気づくためにログアウトしてからログインする必要がある場合があります)。

マトロスカの出力

mkdir h264vids
for f in *.mp4; do ffmpeg -i "$f" -map 0 -c copy -c:v libx264 -crf 23 -preset medium h264vids/"${f%.*}.mkv"; done
  • この例では、という名前のディレクトリに出力しh264vidsます。

  • この例では、入力がであると仮定しています.mp4。そうでない.mp4場合は、例のインスタンスを入力ファイルの種類に変更するか、欲張りだけを使用*します。

  • -crf品質と-presetエンコード速度/効率を調整します。または、これらのオプションを削除して、ほとんどの場合十分なデフォルト値を使用します(例では、これらのオプションにデフォルト値を使用しています)。これらのオプションの詳細については、FFmpeg Wiki:H.264を参照してください。

MP4出力

これはもう少し複雑です。これは、入力オーディオがAACであるかどうかに応じて条件付きエンコードを実行します。入力オーディオがAACの場合、オーディオはそのままストリームコピー(再多重化)され、不必要な再エンコードが回避されます。入力オーディオがAAC でない場合、AACに再エンコードされます。

次に、ffprobeとを使用してこれを行う方法を示す簡単なスクリプトを示しますffmpeg。変換する動画を含むディレクトリにコピーして保存し、で実行権限を付与してからで実行chmod +x yourscriptname./yourscriptnameます。

#!/bin/bash

mkdir h264vids

for f in *.mkv
do
  audioformat=$(ffprobe -loglevel error -select_streams a:0 -show_entries stream=codec_name -of default=nw=1:nk=1 "$f")
  if [ "$audioformat" = "aac" ]; then
    ffmpeg -i "$f" -c:v libx264 -crf 23 -preset medium -c:a copy -movflags +faststart h264vids/"${f%.*}.mp4"
  else
    ffmpeg -i "$f" -c:v libx264 -crf 23 -preset medium -c:a aac -movflags +faststart h264vids/"${f%.*}.mp4"
  fi
done
  • この例では、という名前のディレクトリに出力しh264vidsます。

  • この例では、入力がであると仮定しています.mkv。そうでない.mkv場合は、例のインスタンスを入力ファイルの種類に変更するか、欲張りだけを使用*します。

  • -crfおよびに関する上記の注を参照してください-preset

  • ctrl+ zでエンコードを一時停止し、で再開できfgます。


0

前の答えを考慮して、私は次のことを思いつきました。

for file in *265.mkv; do nice -n19 ffmpeg -i $file -c copy -c:v libx264 ${file/%265.mkv/264.mkv}; done

これは、ファイルの名前が常にで終わることを前提としています265.mkv。このエンディングはに置き換えられ264.mkvます。

ファイルの命名が異なる場合、それに応じてコマンドを調整する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.