FFMPEG ログを有効にするにはどうすればよいですか? FFMPEG ログ ファイルはどこにありますか?
-
20-09-2019 - |
質問
ビデオ エンコード サーバーの容量計画に役立てるため、ビデオの変換に 1 分間かかる時間を計算しようとしているため、FFMPEG プロセスをログに記録できるようにしたいと考えています。ログ記録を有効にするにはどうすればよいですか、またログ ファイルはどこに保存されますか。CentOS LAMP マシンに FFMPEG をインストールしました。
解決
Gparted書き込まない特定のログファイルも送信出力を 標準エラー.を捉え、次のいずれかの操作が必要です
- 捕獲および構文解析して生成されます
- リダイレクトの標準エラーに対して、ファイルを読みとその後のプロセスが終了
例stdリダイレクトエラー:
ffmpeg -i myinput.avi {a-bunch-of-important-params} out.flv 2> /path/to/out.txt
一旦この処理を行い、検査ができる out.txt
.
奥高尾にひっそりと建つ料亭。trickierい最初のオプションが可能です。(もちろんでやっている。います。して見るような表現になってい純に詳細が書いてあります。)
他のヒント
私はffmpegのドキュメントに以下のものを見つけました。お役に立てれば! :)
参考: http://ffmpeg.org/ffmpeg.html#toc-Generic-オプションの
「 - 報告書」という名前のファイルへの完全なコマンドラインとコンソール出力をダンプ 現在のディレクトリにプログラム-YYYYMMDD-HHMMSS.log。このファイルは、することができ バグレポートのために有用。また、-loglevel冗長を意味します。
注:任意の値に環境変数FFREPORTをしている設定 同じ効果ます。
私は答えを見つけます。 1 /まずプリセットに入れて、私はこの例を持っている「出力形式MPEG2 DVD HQ」
-vcodec mpeg2video -vstats_file MFRfile.txt -r 29.97 -s 352x480 -aspect 4:3 -b 4000k -mbd rd -trellis -mv0 -cmp 2 -subcmp 2 -acodec mp2 -ab 192k -ar 48000 -ac 2
レポートは、例のように、プリセットにMFRfile.txt -vstats_fileコマンドを含む場合。これはあなたのファイルのソースのフォルダのソースにubicadetの報告書を作ることができます。 あなたがしたい場合は、任意の名前を入れることができ、私は、MPEGプロパティに関する完全な.docxのを読んで、「私はこのフォーラムで何回も書く」私の問題を解決しました。最後に、私は、生成され、このtxtファイルを読んで、私のプログレスバーを行うことができます。
よろしくます。
が表示されることを追加した場合、このコマンドライン:
-loglevel debug
または
-loglevel verbose
きより詳細なデバッグ出力をョンをインストールして下さい。
ffmpeg は stderr にログを記録し、stderr とは異なるログレベルのファイルにログを記録できます。の -report
コマンドライン オプションではログ ファイル名やログ レベルを制御できないため、環境変数を設定することをお勧めします。
(-v
の同義語です -loglevel
. 。走る ffmpeg -v help
レベルを確認します。走る ffmpeg -h full | less
すべてを見るために。または相談してください オンラインドキュメント, 、またはそのような wiki ページ h.264 エンコード ガイド).
#!/bin/bash
of=out.mkv
FFREPORT="level=32:file=$of.log" ffmpeg -v verbose -i src.mp4 -c:a copy -preset slower -c:v libx264 -crf 21 "$of"
それはトランスコードされます src.mp4
x264 では、stderr のログ レベルを「verbose」に設定し、 out.mkv.log
「ステータス」に。
(AV_LOG_WARNING=24
, AV_LOG_INFO=32
, AV_LOG_VERBOSE=40
, 、など)。これに対するサポートは、 2年前に追加, そのため、ffmpeg の古いバージョンではないことが必要です。(セキュリティ/バグ修正と高速化のために、とにかく常に良いアイデアです)
いくつかのコーデック、たとえば -c:v libx265
, 、ffmpeg のロギング インフラストラクチャを使用する代わりに、stderr に直接書き込みます。 したがって、ログ メッセージはレポート ファイルには残りません。これはバグ/TODO リストの項目だと思います。
標準エラー出力をターミナルに表示しながらログに記録するには、次のように使用できます。 tee(1)
.
ステータス行の更新を含むログ レベルを使用する場合 (デフォルト -v info
, 、以上)、それらはログ ファイルに含まれます。 ^M
(キャリッジリターン、別名 \r
)。エンコーダ統計 (SSIM など) は含まれるが、ステータス行の更新は含まれないログ レベルはないため、おそらく最良のオプションはそのストリームをフィルタリングすることです。
フィルタリングしたくない場合 (例:各ステータス更新間隔での fps / ビットレートがファイル内に存在するため、次を使用できます。 less -r
ファイルを端末に直接渡すことで、ファイルをきれいに表示できるようになります。あなたが持っている場合 .enc
反転したい複数のエンコードからのログ、 less -r ++G *.enc
よく働く。(++G は、すべてのファイルに対してファイルの最後から開始することを意味します)。と 単一キーのキーバインディング のように .
そして ,
次のファイルと前のファイルについては、いくつかのログ ファイルを非常にうまくめくることができます。(デフォルトのバインディングは :n
そして :p
).
どうしてもフィルタリングしたい場合は、 sed 's/.*\r//'
ffmpeg 出力では完璧に動作します。(一般的なケースでは、何かが必要です のように vt100.py
, ただし、キャリッジリターンだけではありません)。tee + sed でこれを行うには (少なくとも) 2 つの方法があります。 tee
/dev/tty に接続して tee の出力を sed にパイプするか、プロセス置換を使用して sed へのパイプに tee を接続します。
# pass stdout and stderr through to the terminal,
## and log a filtered version to a file (with only the last status-line update).
of="$1-x265.mkv"
ffmpeg -v info -i "$1" -c:a copy -c:v libx265 ... "$of" |& # pipe stdout and stderr
tee /dev/tty | sed 's/.*\r//' >> "$of.enc"
## or with process substitution where tee's arg will be something like /dev/fd/123
ffmpeg -v info -i "$1" -c:a copy -c:v libx265 ... "$of" |&
tee >(sed 's/.*\r//' >> "$of.enc")
いくつかの異なるエンコードパラメータをテストするには、関数を作成できます。 これは私が最近いくつかのことをテストするために使用したもののように。すべてを 1 行にまとめたので、上矢印キーで簡単に編集できましたが、ここでは難読化を解除します。(だからこそ、 ;
各行の末尾に s)
ffenc-testclip(){
# v should be set by the caller, to a vertical resolution. We scale to WxH, where W is a multiple of 8 (-vf scale=-8:$v)
db=0; # convenient to use shell vars to encode settings that you want to include in the filename and the ffmpeg cmdline
of=25s@21.15.${v}p.x265$pre.mkv;
[[ -e "$of.enc" ]]&&echo "$of.enc exists"&&return; # early-out if the file exists
# encode 25 seconds starting at 21m15s (or the keyframe before that)
nice -14 ffmpeg -ss $((21*60+15)) -i src.mp4 -t 25 -map 0 -metadata title= -color_primaries bt709 -color_trc bt709 -colorspace bt709 -sws_flags lanczos+print_info -c:a copy -c:v libx265 -b:v 1500k -vf scale=-8:$v -preset $pre -ssim 1 -x265-params ssim=1:cu-stats=1:deblock=$db:aq-mode=1:lookahead-slices=0 "$of" |&
tee /dev/tty | sed 's/.*\r//' >> "$of.enc";
}
# and use it with nested loops like this.
for pre in fast slow; do for v in 360 480 648 792;do ffenc-testclip ;done;done
less -r ++G *.enc # -r is useful if you didn't use sed
出力ビデオ ファイルがすでに存在する場合は、ログ ファイルに余分なゴミが吐き出されるのを避けるために、出力ビデオ ファイルの存在をテストすることに注意してください。それでも、私は使用して追加しました(>>
) リダイレクト。
シェル変数を調べるのではなく、引数を受け取るシェル関数を作成する方が「すっきり」しますが、これは私自身が使用する場合には便利で簡単に作成できました。すべての変数展開を適切に引用せずにスペースを節約したのもそのためです。($v
の代わりに "$v"
)
あなたは、コンソールのための変数としてREPORTFILEを宣言しなければなりません。
問題は、あなたがそう実行していない見つけることができるすべてのDokumentations ..です 私は右の方法を見つけるために私のライブの1日を与えた....
例:バッチ/コンソールのための
CMD.EXE / KセットFFREPORT =ファイル= 'C:\のffmpegの\プロトの\ test.log':レベル= 32 && C:ffmpegのの\ビン\ \ ffmpeg.exe -loglevel警告-report -i入力ファイルF OUTPUTFILE
ExempleのJavascriptます:
':「:レベル= 32 && C:ffmpegのの\ビン\のffmpeg.exe \のvar reortlogfile = +ファイル名+ .logの」 "\のffmpegの\プロト\ C CMD.EXE / Kは= FFREPORT =ファイルを設定しました"'。 ......;
あなたが望むどのように今までにディレクトリとファイル名を変更することができます。
ベルリンからフランク
あなたはちょうどそれが実行するコマンドのために要する時間を知りたい場合は、時間のコマンド。あなたの例の使用time ffmpeg -i myvideoofoneminute.aformat out.anotherformat
のための