問題タブ [avisynth]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ffmpeg - インターリーブされていない AVI での FFmpeg オーディオ ストリームの抽出 - AviSynth に比べて遅い
avi ファイルのオーディオ ストリームを wav ファイルとして抽出したいのですが、ストリームをコピーしたいだけですが、動作は非常に遅いです (~4-5fps)。
抽出したいストリームのタイプは次のとおりです (ffprobe 情報):
Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
AviSynth を使用すると、約 100 倍速くなりますが、私は純粋な FFmpeg ソリューションを好みます。なぜこのような速度差が生じるのでしょうか? FFmpeg はファイル全体を読み取って処理しているように見えますが、AviSynth は読み取らずにデータを抽出することができます。
例:
ffmpeg -i file.avi -vn -ac 2 -c:a copy audio.wav
または
ffmpeg -i file.avi -map 0:a -ac 2 -c:a copy audio.wav
両方とも問題なく動作しますが、時間がかかります。
入力として AviSynth スクリプトを使用する:
ffmpeg -i script.avs -map 0:a -ac 2 -c:a copy audio.wav
だけを含む script.avs を使用する
AviSource("file.avi")
と、同じことがほぼ瞬時に実行されます。
AviSynth が非常に高速である理由と、FFmpeg で同じ速度を得る方法があるかどうか、何か考えはありますか?
編集:
FFmpeg を直接使用してログを追加する:
AviSynth の使用:
編集:AVIファイルを「再エンコード」した後のテスト:
何かに...
元のファイルがf.aviだとしましょう。ffprobe の結果は次のとおりです。
オーディオの抽出には時間がかかります。
別の AVI でファイルを「再エンコード」すると、次のようになります。
f2.avi から数ミリ秒でオーディオを抽出できます。
f2.avi の FFprobe:
違いを生まないはずのメタデータを除けば同じですが、この比較では、問題は元がインターリーブされていないという事実に関係しているに違いないことがわかります!
インターリーブされていないファイルからオーディオを読み取って抽出する方が簡単だと思いますが、これは AVI 標準に準拠していない可能性があるため、追加の作業が必要ですか?
video - VFR ビデオを CFR チャンクに分割しますか?
フレームレートが変わるたびに分割されるチャンクに VFR ビデオを分割する良い方法はありますか?
VFR のビデオを編集したいのですが、エディタが VFR をサポートしていません。ビデオの一部のセクションが劣化する可能性があるため、一定のフレームレートを設定して変換したくありません。
それを扱う 1 つの方法は、それを取り、個別に作業するための CFR であるチャンクに分割することだと考えていました (願わくば、それらが大きなセクションになることを願っています)。
私はそれを行う良い方法を見つけていませんが、少なくともffmpegには、それを可能にするものが組み込まれていないようです。
別の質問としては、ビデオを簡単にスキャンして、使用されているフレームレートを見つけることができるソフトウェアはありますか? よほどクレイジーでなければ、一般的な複数のフレームレートに変換し、後で Avisynth を使用して重複したフレームを編集して削除することもできます。