ビデオのトリミングと変換に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のパッケージとして利用できることが望ましいです。
@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つのステップで実行します。
トリム:
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
完了。