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

时间:2018-03-15 03:41:40

标签: unix ffmpeg centos exif

以下命令对我的环境完全正常工作,除了它从视频文件转换后删除图像文件的方向编号(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)

1 个答案:

答案 0 :(得分:1)

TL;博士

更新您的ffmpeg,它会自动轮换,然后您就不必处理exif代码。

旋转边数据

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

ffmpeg自动旋转

编码时,默认情况下 ffmpeg会自动旋转输出,具体取决于旋转边数据。因此,您可能根本不需要设置exif方向标记。您可以使用-noautorotate选项禁用此行为。请注意,您的ffmpeg(版本2.2)对于此行为和此选项来说太旧了,因此它不会自动旋转。我建议您download a recent ffmpeg version并将其移至/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