GNU/Linux >> Linux の 問題 >  >> Linux

トリミングとサイズ変更によってビデオを固定画面サイズに変換しますか?

私はこれを自分で理解しようとしましたが、無数のオプションが私を困惑させます。

理想的にはffmpegのどちらかを使いたい またはmencoder (または他の何か、しかし私が働いていることがわかっている2つ)着信ビデオを固定画面サイズに変換します。

ビデオの幅が広いか短すぎる場合は、ビデオを中央でトリミングします。適切なサイズでない場合は、サイズを上下に変更して、正確に固定された画面サイズにします。

最後に必要なのは、MP3オーディオトラックを備えたXVidAVIの720×480です。

最大解像度にサイズ変更する方法を示すページをたくさん見つけましたが、ビデオを正確にその解像度にする必要があります(余分な部分が切り取られ、黒いバーはありません)。

誰かが実行するコマンドラインを教えてもらえますか?少なくとも、そこまでの道のりの一部を教えてもらえますか?複数のコマンドラインが必要な場合(解像度を取得するためにXを実行し、この計算を実行してから、その計算の出力でYを実行します)、スクリプトを作成できます。

承認された回答:

私はffmpegの第一人者ではありませんが、これでうまくいくはずです。

まず、次のように入力ビデオのサイズを取得できます。

ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height,width in.mp4

かなり最近のffmpegを使用すると、次のオプションを使用してビデオのサイズを変更できます。

ffmpeg -i in.mp4 -vf scale=720:480 out.mp4

幅または高さを-1に設定できます ffmpegを許可するため アスペクト比を維持しながらビデオのサイズを変更します。実際、-2 計算値は偶数である必要があるため、より適切な選択です。したがって、次のように入力できます:

ffmpeg -i in.mp4 -vf scale=720:-2 out.mp4

ビデオを取得すると、予想される720x480よりも大きくなる可能性があります ffmpegを許可したので 高さを計算するので、トリミングする必要があります。これは次のように実行できます:

ffmpeg -i in.mp4 -filter:v "crop=in_w:480" out.mp4

最後に、次のようなスクリプトを作成できます(簡単に最適化できますが、読みやすくするためにシンプルにしています):

#!/bin/bash

FILE="//eadn-wc01-5196795.nxedge.io/tmp/test.mp4"
TMP="//eadn-wc01-5196795.nxedge.io/tmp/tmp.mp4"
OUT="//eadn-wc01-5196795.nxedge.io/tmp/out.mp4"

OUT_WIDTH=720
OUT_HEIGHT=480

# Get the size of input video:
eval $(ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height,width ${FILE})
IN_WIDTH=${streams_stream_0_width}
IN_HEIGHT=${streams_stream_0_height}

# Get the difference between actual and desired size
W_DIFF=$[ ${OUT_WIDTH} - ${IN_WIDTH} ]
H_DIFF=$[ ${OUT_HEIGHT} - ${IN_HEIGHT} ]

# Let's take the shorter side, so the video will be at least as big
# as the desired size:
CROP_SIDE="n"
if [ ${W_DIFF} -lt ${H_DIFF} ] ; then
  SCALE="-2:${OUT_HEIGHT}"
  CROP_SIDE="w"
else
  SCALE="${OUT_WIDTH}:-2"
  CROP_SIDE="h"
fi

# Then perform a first resizing
ffmpeg -i ${FILE} -vf scale=${SCALE} ${TMP}

# Now get the temporary video size
eval $(ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height,width ${TMP})
IN_WIDTH=${streams_stream_0_width}
IN_HEIGHT=${streams_stream_0_height}

# Calculate how much we should crop
if [ "z${CROP_SIDE}" = "zh" ] ; then
  DIFF=$[ ${IN_HEIGHT} - ${OUT_HEIGHT} ]
  CROP="in_w:in_h-${DIFF}"
elif [ "z${CROP_SIDE}" = "zw" ] ; then
  DIFF=$[ ${IN_WIDTH} - ${OUT_WIDTH} ]
  CROP="in_w-${DIFF}:in_h"
fi

# Then crop...
ffmpeg -i ${TMP} -filter:v "crop=${CROP}" ${OUT}

Linux
  1. Vdx –FFmpegへの直感的なコマンドラインラッパー

  2. FFmpegでビデオをWhatsAppビデオフォーマットに変換する

  3. LinuxでOBSとWaylandを使用した画面記録

  1. Ffmpegでビデオのサイズを小さくするにはどうすればよいですか?

  2. ブロックサイズとクラスターサイズの違いは?

  3. LosslessCut –シンプルなクロスプラットフォームのビデオおよびオーディオカッター

  1. Youtube-dlとFFmpegでYoutubeビデオの一部をダウンロードする

  2. Linux で設定されたサイズにウィンドウのサイズを変更する

  3. tmpfs の使用とサイズ変更