web-dev-qa-db-ja.com

avconv(または別のツール)を使用してビデオとオーディオをトリムおよびフェードイン/フェードアウトします

ビデオのトリミングと変換にavconvを使用しています。ビデオストリームの最初の7秒と最後の2.5秒、および1時間のmtsファイルの1つのオーディオストリームをドロップしたいとします。

avconv -i input.mts -map 0:0 -map 0:3 -ss 0:0:07 -t 0:59:50.5 out.mov

これはこれまでのところ機能しますが、次を追加して、最初と最後に2秒間のフェードインとフェードアウトを追加したいと思います。

-vf fade=type=in:start_frame=350:nb_frames=100 -vf fade=type=out:start_frame=178750:nb_frames=100

これらのフレームは、avconvがビデオソースについて報告する50fpsで計算されます。しかし、フェードインもフェードアウトもありません。

1)ビデオフェードの何が問題になっていますか?それを正しく行う方法は? 2)オーディオフェードを追加する方法。 -afadeオプションがあるようです。しかし、私はそれが文書化されているとは思いません。

あるいは、この目標のために別のツール(ビデオとオーディオのトリムとフェード)を提案することもできます。これは、Debian8のパッケージとして利用できることが望ましいです。

3
Philippos

@Mario G.が提案した答えを試す時間をようやく見つけましたが、非常に面倒なようでした。私はこれを何十回もする必要があります。 ffmpegのドキュメントを読んだところ、オーディオとビデオのフェードを含め、avconvよりもはるかに強力であることがわかりました。そのため、解決策は次のとおりです。

ffmpeg -i input.mts -map 0:0 -map 0:3 -ss 0:0:07 -to 0:59:57.5 -vf 'fade=t=in:st=7:n=60,fade=t=out:st=3595.5:n=60,crop=out_h=692' -af 'afade=in:st=7:d=2,afade=out:st=3595.5:d=2' out.mov

したがって、フェードのst=パラメータは秒単位でかかり、フレームに変換する必要はありません。何らかの理由でn=だけがフレーム内にあります。オーディオフェードの長さも秒単位です。

また、長さを計算する代わりに、終了時間を直接取得する-toオプションを発見しました。

このコマンドは、すべてのステップ(チャネルの選択、トリミング、フェード、およびトリミング)を1つのステップで実行します。

0
Philippos

トリム:

ffmpeg -i input.mts -ss 00:00:20.0 -c copy -t 00:00:30.0 output.mkv

20秒シークi)n input.mkv(デフォルトでは破棄)を30秒間再生し、そこから他のすべてを破棄します。つまり、30秒のビデオがあります。

---(フェード

まず、フェード用の画像を作成する必要があります。おそらく単一の* .png画像で、好みに応じて完全な白または完全な黒になります。同じ解像度で、できればビデオを録画しました。

ffmpeg -r 1/2 -i black.png -c:v libx264 -r 50 -y -pix_fmt yuv420p fade2s.mkv

つまり、2秒フェードします(-r入力:1/2 x50フレーム/秒= 100 fps)。画像情報については、GimpまたはImageMagickを確認できます。 これでフェード効果が得られました。

フェードイン:

ffmpeg -i fade2s.mkv -y -vf fade=in:0:50 fade_in.mkv

0〜50フレームでフェードイン(1秒-50fps)

フェードイン+アウト:最後の入力をフェードインとして取得し、フェードアウトを追加します

ffmpeg -i fade_in.mkv -y -vf fade=out:120:50 fade_in_out.mkv

完了。

1
Mario G.