如何在通过 ffmpeg 命令从视频文件转换为图像文件后保持方向编号(exif)

问题描述 投票:0回答:1

下面的命令在我的环境中工作得很好,只是它在从视频文件转换后删除了图像文件的方向编号 (exif)。

我想知道如何使用下面的命令行保持图像的方向编号(exif)(它还必须保持其功能的原始目的,即将视频转换为图像从一个目录到另一个目录.).如果有人能帮助我,我将不胜感激。

for i in /path/to/inputs/*.mp4; do ffmpeg -i "$i" -frames:v 1 "/path/to/outputs/$(basename "$i" .mp4).jpg"; done


ffmpeg 版本 2.2.2
操作系统:centos-6 (x86_64)

unix ffmpeg centos exif
1个回答
2
投票

tl;博士

更新你的

ffmpeg
它会自动旋转然后你就不必处理exif标签了。


旋转边数据

MP4 不包含 exif 数据,但可以包含旋转边数据。这是播放器可以用来正确定位视频的信息(并非所有播放器或设备都支持此信息),即使视频流本身不是这样定位的。例如,来自 iPhone 的视频有这方面的数据。

ffmpeg
自动旋转

编码时,

ffmpeg
会默认根据旋转端数据自动旋转输出。所以你可能根本不需要设置 exif 方向标签。您可以使用
-noautorotate
选项禁用此行为。请注意,您的
ffmpeg
(2.2 版)对于此行为和此选项来说太旧了,因此它不会自动旋转。我建议你下载最新的
ffmpeg
版本
并将其移动到
/usr/local/bin
.

所以,鉴于非古代

ffmpeg
会自动旋转你甚至需要处理exif方向标签吗?如果你回答“是”,那么请看下面的部分。


在 MP4 视频中查看旋转边数据

可以使用

ffprobe
查看输入视频的旋转边数据:

ffprobe -loglevel error -select_streams v:0 -show_entries side_data=rotation -of csv=p=0 input.mp4

在 JPG 图像中设置 exif 方向标签

您可以使用

exiftool
将方向exif标签写入JPG图像:

exiftool -Orientation=6 -n image.jpg

或人类可读的形式:

exiftool -Orientation='Rotate 90 CW' image.jpg

数值方向是:

1 = Horizontal (normal)
2 = Mirror horizontal
3 = Rotate 180
4 = Mirror vertical
5 = Mirror horizontal and rotate 270 CW
6 = Rotate 90 CW
7 = Mirror horizontal and rotate 90 CW
8 = Rotate 270 CW

至于在你的 bash 脚本中实现这个,我认为这值得作为一个单独的问题来问。

查看 JPG 图像中的 exif 方向标记

您可以使用

exiftool
查看方位:

$ exiftool -Orientation -S image.jpg
  Orientation: Rotate 90 CW
$ exiftool -Orientation -n -S image.jpg
  Orientation: 6
© www.soinside.com 2019 - 2024. All rights reserved.