ffmpegビデオ回転の問題

ffmpegビデオ回転の問題

縦に録画されたスマートフォン動画がありますが、一般的なffmpegコマンドを使って時計回りに90度回転させようとしています。 (一部のプレーヤーでは、EXIF回転データを読み取って自動回転として正しく表示できないためです。)EXIFメタデータには、「幅:848;高さ:480;回転:90」が含まれています。通常、このコマンドは以下を実行する必要があります。

ffmpeg -i input.mp4 -vf transpose=1 output.mp4

ただし、実際の結果は水平反転に過ぎず、関連するEXIFメタデータは「幅:848;高さ:480;回転:0」になります。転置値(0,1,2,3)をすべて試してみました。 )しかし、なし動画を見せてもらえますか?」幅:480;身長:848;回転: 0"

理想的には、上記のコマンドで消える日時、カメラやGPS情報など元のEXIFデータもすべて維持したいと思います。

どんなアイデアがありますか?

注:gcc 9でビルドされたffmpegバージョン4.2.4-1ubuntu0.1(Ubuntu 9.3.0-10ubuntu2)を使用する

答え1

ffmpegも元のファイルのEXIFメタデータ「回転:90」を考慮して、再エンコード処理前に自動的に回転させるようです。だから最後に、Dolphin、Nautilus、Thunarなどのファイルマネージャのコンテキストメニューに統合し、EXIF回転メタデータに基づいてビデオを回転させ、EXIFタイムスタンプを保存し、EXIF GPS情報をコピー - @Gyanの助けを借りて受け取る

#!/usr/bin/env bash
# Requires ffmpeg and libimage-exiftool-perl packages
OLDIFS=$IFS
IFS="
"
for filename in ${@}
do
    name=${filename%.*}
    ext=${filename##*.}
    ffmpeg -i "$filename" -map_metadata 0 "${name}_rotated.${ext}"
    GPSLatitude="$(exiftool -GPSLatitude "$filename" | awk -F' : ' '{print $2}' | sed -e "s/ deg / /" -e "s/' / /" -e "s/\" / /")"
    GPSLongitude="$(exiftool -GPSLongitude "$filename" | awk -F' : ' '{print $2}' | sed -e "s/ deg / /" -e "s/' / /" -e "s/\" / /")"
    exiftool -GPSLatitude="$GPSLatitude" -GPSLongitude="$GPSLongitude" "${name}_rotated.${ext}" -overwrite_original
    mv "${name}_rotated.${ext}" "$filename"
done
IFS=$OLDIFS

関連情報