1

(古い)ビデオキャプチャカード(そして明らかに古いVHSプレーヤー)を使用して、ビデオをVHSからデジタルに変換しようとしています。ビデオ キャプチャ カードからの入力と VHS からの出力があるため、S ビデオ ケーブルを使用してコンピュータにキャプチャする以外に選択肢はありません。

TV では発生しないクロマとルマの間のわずかな同期ミスを除いて、ほとんどすべてが機能します。

たとえば、元のビデオでは、次のようなものがあります。 色の良い位置

ビデオをキャプチャすると、次のようになります。 色の位置が悪い

ご覧のとおり、クロマとルミナンス チャンネルの同期が少しずれています (約 10 ラインのエラーと言えます)。

次のコマンドを使用して、Linux システムで ffmpeg を使用してキャプチャしています。

$ v4lctl setnorm PAL-BG

$ v4lctl setinput S ビデオ

$ ffmpeg -y -f alsa -ac 2 -i pulse -f video4linux2 -i /dev/video0 -c:a pcm_s16le -vcodec rawvideo -t $duration -r 25 -loglevel error -stats ~/tmp/tmp.mkv

v4lで他の入力規格を試したり、他のVHSプレーヤーを試したり、SCARTからS-Videoへの別の変換ケーブルを試したりしましたが、何も変わりませんでした.

私の質問は簡単です: ffmpeg の後処理ビデオ フィルターでこれを修正する方法はありますか?

ffmpeg で利用可能なビデオ フィルターの長いリストを既に見ましたが、何も見つかりませんでした。

また、キャプチャ コマンド (古いキャプチャ カード、古い CPU など) 中にフィルタを適用できないことに注意してください。これが、rawvideo とネイティブ オーディオでキャプチャする理由です。キャプチャが完了したら、ビデオ/オーディオを h264/vorbis に変換します。このステップで、必要なオーディオ/ビデオ フィルタリングを適用できます (クロマとルマを新しいファイルに抽出し、修正して再度マージすることを含む場合でも)。

ありがとう!

4

1 に答える 1

2

これを達成するための基本的なワークフローは、まず、ソース ビデオからルマ プレーンとクロマ プレーンを抽出することです。次に、分離された各プレーンから 1 つの対応するフレームを抽出し、それらをイメージ エディターにインポートして、輝度プレーンに対するクロマ プレーンの変位を調べます。次に、その情報に基づいてクロマ プレーンの先頭を切り落とします。修正された平面をマージして、修正されたコンポジット ビデオを形成します。

FFmpeg の他に、dd(クロマ プレーンからバイトをトリミングするための) ようなツールが必要です。

ステップ 1 rawvideo ストリームから平面を抽出する

ffmpeg -i in.mkv -filter_complex "[0:v]extractplanes=y+u+v[y][u][v]" \
       -map "[y]" in.y -map "[u]" in.u -map "[v]" in.v

Step 2フレームを取り出して調べる

ffmpeg -f rawvideo -video_size 720x576 -framerate 25 -pix_fmt gray -i in.y -vframes 1 y.png


ffmpeg -f rawvideo -video_size 360x288 -framerate 25 -pix_fmt gray -i in.u -vframes 1 u.png


ffmpeg -f rawvideo -video_size 360x288 -framerate 25 -pix_fmt gray -i in.v -vframes 1 v.png

キャプチャされたビデオは YUV 4:2:0 であるため、クロマ プレーンの寸法は半分のサイズになります。

ステップ 3レイヤーベースの画像エディターでフレームを調べる

輝度画像を下に、2 つの彩度画像を上に重ねます。クロマ画像は、サイズを 2 倍に拡大する必要があります。ブレンド モードまたは不透明度を使用して、クロマ プレーンを輝度に合わせるために必要なオフセットを計算します。値は、2 つの彩度イメージで同一ではない場合があります。

ステップ 4ツールなどを使用しddてクロマ ストリームをトリミングします。

色度平面は半分の高さであるため、前のステップで見つかったオフセットを半分にして整数に丸める必要があります。

オフセットが U の場合は 6、V の場合は 8 だとしましょう。

dd if=in.u of=in+6.u bs=360 skip=3

dd if=in.v of=in+8.v bs=360 skip=4

この手順では、クロマが輝度に対して常に遅延していることを前提としています。これは、VCR キャプチャの安全な前提となるはずです。学術的な関心のために、逆のケースではdd、ストリームから必要な行数を抽出するために を使用catし、それをそのストリームの先頭にアタッチするようなツールが必要になります。

ステップ 5平面をマージする

ffmpeg -f rawvideo -framerate 25 -pix_fmt gray -video_size 720x576 -i in.y \
       -f rawvideo -framerate 25 -pix_fmt gray -video_size 360x288 -i in+6.u \
       -f rawvideo -framerate 25 -pix_fmt gray -video_size 360x288 -i in+8.v \
       -i in.mkv
       -filter_complex "[0][1][2]mergeplanes=0x001020:yuv420p[v]" \
       -map "[v]" -map 3:a -c:v rawvideo -c:a copy corrected.mkv

クロマ プレーンからいくつかのラインが切り落とされたため、クロマ コンポーネントが切り捨てられるため、最後のフレームはエンコードされません。

于 2016-05-23T09:59:32.163 に答える