以下命令对我的环境完全正常工作,除了它从视频文件转换后删除图像文件的方向编号(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)
答案 0 :(得分:1)
更新您的ffmpeg
,它会自动轮换,然后您就不必处理exif代码。
MP4不包含exif数据,但它可以包含旋转边数据。这是玩家可以用来正确定位视频的信息(并非所有播放器或设备都支持此视频),即使视频流本身不是这样定向的。例如,来自iPhone的视频有这方面的数据。
ffmpeg
自动旋转编码时,默认情况下 ffmpeg
会自动旋转输出,具体取决于旋转边数据。因此,您可能根本不需要设置exif方向标记。您可以使用-noautorotate
选项禁用此行为。请注意,您的ffmpeg
(版本2.2)对于此行为和此选项来说太旧了,因此它不会自动旋转。我建议您download a recent ffmpeg
version并将其移至/usr/local/bin
。
所以,鉴于非古代ffmpeg
会自动旋转你甚至需要处理exif方向标记吗?如果你回答"是"然后看下面的部分。
您可以使用ffprobe
查看输入视频的旋转边数据:
ffprobe -loglevel error -select_streams v:0 -show_entries side_data=rotation -of csv=p=0 input.mp4
您可以使用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脚本中实现这一点,我认为值得作为一个单独的问题提出。
您可以使用exiftool
查看方向:
$ exiftool -Orientation -S image.jpg
Orientation: Rotate 90 CW
$ exiftool -Orientation -n -S image.jpg
Orientation: 6