Fix video timezone to server timezone
parent
1ad335ed8b
commit
27666671fe
|
@ -34,6 +34,7 @@ The approach of this app is fundamentally different from the official Nextcloud
|
||||||
## Notes
|
## Notes
|
||||||
1. The app has been tested with 100GB worth of ~25k photos.
|
1. The app has been tested with 100GB worth of ~25k photos.
|
||||||
1. You may need to configure the Nextcloud preview generator and Imagemagick / ffmpeg to support all types of images and videos (e.g. HEIC). If using the official docker image, add `OC\Preview\HEIC` to `enabledPreviewProviders` in your `config.php`.
|
1. You may need to configure the Nextcloud preview generator and Imagemagick / ffmpeg to support all types of images and videos (e.g. HEIC). If using the official docker image, add `OC\Preview\HEIC` to `enabledPreviewProviders` in your `config.php`.
|
||||||
|
1. If local time is not found in the photo (especially for videos), the server timezone is used.
|
||||||
|
|
||||||
## Special Thanks 🙏🏻
|
## Special Thanks 🙏🏻
|
||||||
Nextcloud team. At least one half of the code is based on the work of the [Nextcloud Photos](https://github.com/nextcloud/photos).
|
Nextcloud team. At least one half of the code is based on the work of the [Nextcloud Photos](https://github.com/nextcloud/photos).
|
|
@ -104,7 +104,7 @@ class Exif {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function getExifFromLocalPathWithStaticProc(string &$path) {
|
private static function getExifFromLocalPathWithStaticProc(string &$path) {
|
||||||
fwrite(self::$staticPipes[0], "$path\n-json\n-execute\n");
|
fwrite(self::$staticPipes[0], "$path\n-json\n-api\nQuickTimeUTC=1\n-execute\n");
|
||||||
fflush(self::$staticPipes[0]);
|
fflush(self::$staticPipes[0]);
|
||||||
|
|
||||||
$buf = "";
|
$buf = "";
|
||||||
|
@ -124,7 +124,7 @@ class Exif {
|
||||||
|
|
||||||
private static function getExifFromLocalPathWithSeparateProc(string &$path) {
|
private static function getExifFromLocalPathWithSeparateProc(string &$path) {
|
||||||
$pipes = [];
|
$pipes = [];
|
||||||
$proc = proc_open(['exiftool', '-json', $path], [
|
$proc = proc_open(['exiftool', '-api', 'QuickTimeUTC=1', '-json', $path], [
|
||||||
1 => array('pipe', 'w'),
|
1 => array('pipe', 'w'),
|
||||||
2 => array('pipe', 'w'),
|
2 => array('pipe', 'w'),
|
||||||
], $pipes);
|
], $pipes);
|
||||||
|
@ -145,7 +145,7 @@ class Exif {
|
||||||
public static function getExifFromStream(&$handle) {
|
public static function getExifFromStream(&$handle) {
|
||||||
// Start exiftool and output to json
|
// Start exiftool and output to json
|
||||||
$pipes = [];
|
$pipes = [];
|
||||||
$proc = proc_open(['exiftool', '-json', '-fast', '-'], [
|
$proc = proc_open(['exiftool', '-api', 'QuickTimeUTC=1', '-json', '-fast', '-'], [
|
||||||
0 => array('pipe', 'rb'),
|
0 => array('pipe', 'rb'),
|
||||||
1 => array('pipe', 'w'),
|
1 => array('pipe', 'w'),
|
||||||
2 => array('pipe', 'w'),
|
2 => array('pipe', 'w'),
|
||||||
|
@ -188,7 +188,8 @@ class Exif {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if found something
|
// Check if found something
|
||||||
if (isset($dt) && !empty($dt)) {
|
if (isset($dt) && is_string($dt) && !empty($dt)) {
|
||||||
|
$dt = explode('-', explode('+', $dt, 2)[0], 2)[0]; // get rid of timezone if present
|
||||||
$dt = \DateTime::createFromFormat('Y:m:d H:i:s', $dt, new \DateTimeZone("UTC"));
|
$dt = \DateTime::createFromFormat('Y:m:d H:i:s', $dt, new \DateTimeZone("UTC"));
|
||||||
if ($dt && $dt->getTimestamp() > -5364662400) { // 1800 A.D.
|
if ($dt && $dt->getTimestamp() > -5364662400) { // 1800 A.D.
|
||||||
return $dt->getTimestamp();
|
return $dt->getTimestamp();
|
||||||
|
|
Loading…
Reference in New Issue