ffmpegでカットすると数秒の黒い画面が表示されますが、これを修正するにはどうすればよいですか?


8

このコマンドを使用して、コマンドラインからビデオからセグメントを切り取ります

ffmpeg -i %1 -vcodec copy -acodec copy -ss %2 -t %3 %~n1_cut%~x1

そして私はそれを

cut.bat video.mp4 001:23:45:678 10

予想通り、元のビデオの10秒のvideo_cut.mp4を取得しますが、問題は、結果のファイルの数秒がオーディオ付きの黒い画面であることです。なぜこれが発生し、どのように修正するのですか?


%〜n1_cut%〜x1コマンドのこの部分はどういう意味ですか?
ScipioAfricanus

@ScipioAfricanus %~n1は%1をファイル名に展開します。または、パスのみが存在する場合(末尾のバックスラッシュなし)-そのパスの最後のフォルダーと%~x1%1をファイルに展開します。拡張子のみ-.txtソース:superuser.com/questions/ 224416 / ...
Shayan

回答:


8

ほとんどのビデオは時間圧縮を実行するコーデックを使用するため、指定されたカットポイントは、そのカットポイントの前(および後)のフレームに依存して正しくデコードされる場合があります。したがって、ffmpegを使用してビデオをトリミングし、copyモードを使用する場合、ffmpegは、セグメントを正しくデコードするために必要な、トリミングされたセグメントの前後のすべてのフレームを含める必要があります。

したがって、2つのオプションがあります。コピーモードを使用しますが、すべてのプレーヤーがこれらのファイルを正しく再生できるようにスイッチを設定します

ffmpeg -ss %2 -t %3 -i %1 -vcodec copy -acodec copy -avoid_negative_ts make_zero %~n1_cut%~x1

(これにより、カットポイントの前に出力が開始される可能性があります)

またはストリームを再エンコードする

ffmpeg -ss %2 -t %3 -i %1 %~n1_cut%~x1

再エンコードは低速ですが、他のソリューションではビデオが-tオプションで指定されたものよりも長くなる可能性があるため、より良い結果が得られます。
totymedli

@Gyan何をし%ますか?ffmpeg.org/ffmpeg.htmlを検索してみましたが、使用方法が見つかりません。
シャヤン

あなたの答えが私が両方を使用-ssした-t-iにそれが機能したことを示唆したように、以前は、私は-ssそれの前-i-t後にのみ置いたので機能しませんでした。
Shayan、

1

https://github.com/mifi/lossless-cut/pull/13

-i ... -ss ... -t ...の順序で引数を指定してffmpegを実行すると、最初の数秒間はビデオがないビデオファイルが生成されます。(私が理解できる限り、これはキーフレームをシークしないためですか?)

順序を-ss ... -i ... -t ...に変更すると、結果のカットビデオは正しく再生されます。

俺の ffmpeg -version


-ss以前試してみ-iましたが、mp4ファイルでは機能しませんでした。
シャヤン

おかげで私のために働いた。パラメータの順序を変更しただけです。ffmpegバージョン3.2.12-1〜deb9u1
shukshin.ivan

実際、これは空白のデュレーションをビデオの最後に移動するだけです
Honghao Zhang
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.