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

관련 정보