[解決済み] Past duration X.XXX too large』とはどういう意味ですか?
質問
ffmpegでH.264のエンコードをすると、以下のような警告が大量に出ます。
Past duration 0.603386 too large
Past duration 0.614372 too large
Past duration 0.606377 too large
これらは何を意味するのでしょうか?オンラインでもffmpegのドキュメントでも明確なものは見つかりませんでした。
解決方法は?
あるエンコードで、この警告が何千回も出てきました。1080pのビデオを480pにダウンスケールしていたのです。ある編集ポイントで、ソースのレーザーディスクに欠陥があり、おかしな映像になっていたところ、このメッセージが出始め、その後、すべてのフレームに表示されるようになりました。この短い抜粋のように、何度も何度も続きました。
Past duration 0.901115 too large= 535031kB time=00:54:15.06 bitrate=1346.5kbits/s dup=0 drop=19 speed=1.15x
Last message repeated 31 times
Past duration 0.901115 too large= 535031kB time=00:54:15.62 bitrate=1346.3kbits/s dup=0 drop=19 speed=1.15x
Last message repeated 34 times
Past duration 0.901115 too large= 535031kB time=00:54:16.21 bitrate=1346.0kbits/s dup=0 drop=19 speed=1.15x
Last message repeated 36 times
Past duration 0.901115 too large= 535338kB time=00:54:16.83 bitrate=1346.5kbits/s dup=0 drop=19 speed=1.15x
Last message repeated 39 times
元のffmpegの呼び出しはこれです。
ffmpeg -i input.mp4 -s 720x480 -c:v libx264 -preset slower \
-crf 17 -c:a copy -y output.mkv
ここでの提案に従って、私はまず
-framerate 60000/1001
を入力に追加しました。しかし、何も改善されませんでした。そこで
-framerate
を追加し
-r 60000/1001
を出力するようにしました。それでも何も改善されませんでした。両方を残したまま、最終的に
-async 1 -vsync 1
. その結果、警告を一回受けただけである。その起動は
ffmpeg -i input.mp4 -framerate 60000/1001 -s 720x480 -c:v libx264 \
-preset slower -crf 17 -c:a copy -y output.mkv \
-r 60000/1001 -async 1 -vsync 1
MediaInfoの詳細なダンプで見つけた唯一の違いは、最初の起動で見つかったこの行が削除され、2番目の起動では見つからなかったことです。
Delay relative to video : -33ms
しかし、ファイルの先頭付近と最後付近のA/V同期を確認したところ、2つのファイルの同期に明らかな差はありませんでした。実行時間も同じでしたが、これはVLCで1秒単位までしか計測していません。そこで、ffmpegでフレームカウントを確認すると、このようになります。
ffmpeg -i output.mkv -map 0:v:0 -c copy -f null -
で、出力の終わり近くにある "frame=#" を探します。
その結果、ソースビデオの長さは375226フレームで、最初の起動では375195フレーム、2回目の起動では375200フレームであることがわかりました。つまり、2回目の起動では、警告メッセージが大幅に減少し、ドロップするフレーム数も5フレーム減少しました。
その後のテストでは
-framerate
と
-r
は不要であり、2つの同期フラグを使用するだけで十分であった。これは上記の2番目の呼び出しと同じ結果になったので、問題を解決するために私が見つけた3番目の最も単純な呼び出しはこれです。
ffmpeg -i input.mp4 -s 720x480 -c:v libx264 -preset slower \
-crf 17 -c:a copy -y output.mkv -async 1 -vsync 1
さらに別のファイルでは、同期フラグがあってもこのような警告が大量に発生しましたが、レートフラグを追加すると "修正"(何千もの警告が発生する代わりに2つだけ発生)されるようになりました。 つまり、2回目の起動がうまくいっても、3回目の起動がうまくいかないことがあるのです。 私の当面の目的では、2番目の起動に落ち着くつもりで、それがこれらの問題のほとんどを解決してくれることを願っています。
これはすべてffmpegのバージョン4.0での話です。
関連
-
[解決済み】ffmpegが存在する場合、出力ファイルを上書きする
-
[解決済み] ffmpegが、画像からスライドショーを作ろうとすると、「Output file #0 does not contain any stream」と投げる。
-
[解決済み] FFmpegです。RMTP ストリームで NetStream.Play.StreamNotFound が発生しました。
-
[解決済み] ffmpeg - 動画処理 - 空白の動画でトランジションを作成する
-
[解決済み] ffmpeg concat: "安全でないファイル名"
-
[解決済み] H264コーデックで動画をエンコードするffmpegの使い方
-
[解決済み] FFmpegで動画を回転させる
-
[解決済み】phpizeのインストールと実行方法について
-
[解決済み】HTML5ビデオクライアントへのリアルタイムhttpストリーミングに最適なアプローチ【非公開
-
[解決済み] ffmpegで.flacを.mp3に変換し、すべてのメタデータを保持する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ffmpegが存在する場合、出力ファイルを上書きする
-
[解決済み] ffmpeg 入力された h264 を h265 に処理する際に無効なデータが見つかった
-
[解決済み] FFmpeg を libfdk_aac と共にコンパイルする。
-
[解決済み] FFMPEG (libx264) "height not divisible by 2".
-
ffmpeg 関数: av_read_frame() の解析。
-
[解決済み] ffmpegのコマンドラインでの "copy "は何をするのですか?
-
[解決済み] FFmpegを使って2つのMP4ファイルを連結する方法は?
-
パイソン ffmpeg パイプ交互接続
-
ffmpeg -progress は進捗状況を表示します。
-
[解決済み】ffmpegでディレクトリ全体を変換する方法とは?