我有一个由智能手机垂直记录的视频剪辑,我试图使用通常的ffmpeg命令顺时针旋转它90度(因为一些玩家无法读取EXIF旋转数据并通过自动旋转来正确显示)。它的EXIF元数据包括“宽度: 848;高度: 480;旋转: 90”--通常,这个命令应该这样做:
ffmpeg -i input.mp4 -vf transpose=1 output.mp4然而,实际结果只是水平翻转,而相关的EXIF元数据变为“宽度: 848;高度: 480;旋转: 0”--“我尝试了所有转置值(0,1,2,3),没有一个能给我提供"Width: 480;Height: 848;旋转: 0”的视频。
理想的情况下,我也希望保留所有原始EXIF数据,如日期和时间,相机和GPS的细节,等等,这些都是与上述命令。
有什么想法吗?
注:使用由gcc 9构建的ffmpeg版本4.2.4-1 ubuntu0.1 (Ubuntu 9.3.0-10 ubuntu2)
发布于 2020-08-21 09:57:33
在重新编码之前,ffmpeg似乎也考虑到了原始文件的EXIF元数据“旋转: 90”和自动转换。最后,我编写了一个脚本,它可以被合并到文件管理器(如Dolphin、Nautilus、Thunar等)的上下文菜单中,以便根据EXIF旋转元数据旋转视频,保存EXIF时间戳,并在@Gyan的帮助下复制EXIF GPS信息。
#!/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=$OLDIFShttps://unix.stackexchange.com/questions/605554
复制相似问题