Paranoja z tymi datami!
Posted on Sat 22 May 2021 in Linux, Tips text {sed, awk, perl, etc.} • 2 min read
Pliki video mogą zawierać wśród swoich metadanych datę modyfikacji. Dla przykładu: pobierając za pomocą narzędzia youtube-dl klip video z YouTube, można tę metadaną zapisać. Robi się to tak:
youtube-dl --add-metadata -o "%(id)s.%(ext)s" https://youtu.be/NCEOPRuiyQo
Zapisanie to jedna sprawa ale odczytanie to już nie takie "hop! siup!".
Można użyć programu o nazwie Mediainfo:
mediainfo -- --Inform="General;%File_Modified_Date_Local%" "NCEOPRuiyQo"
mediainfo --Inform="General;%File_Modified_Date_Local%" "--uGAxPFHVk.mp4"
Ok, no to może spróbujmy czegoś innego. FFmpeg to prawdziwy szwajcarski scyzoryk jeśli chodzi o zabawę z plikami video, do pakietu dołączony jest program ffprobe:
ffprobe -loglevel 0 -print_format json -show_format -show_streams NCEOPRuiyQo.mp4
Wprawdzie czyta pliki z nietypowymi znakami w nazwie ale, NIESTETY, zamiast pełnej daty ISO pokazuje tylko rok, miesiąc i dzień. A nam równie mocno zależy na godzinach, minutach i sekundach.
Kur...dybanek!
Ok, weźmy exiftool:
exiftool -s -time:FileModifyDate NCEOPRuiyQo.mp4 FileModifyDate : 2019:12:17 23:41:09+01:00
Jest! Cała data! Hurrra!
No, to bierzemy się za wycięcie samej daty:
exiftool -s -time:FileModifyDate NCEOPRuiyQo.mp4 | cut -d: -f2 2019
Kur...dybanek!
Format outputu w tych narzędziach zależy od widzimisię autora, w przypadku exiftoola na szczęścia są przełączniki, które pozwalają na ustawienie innego znaku rozdzielającego:
exiftool -t -time:FileModifyDate NCEOPRuiyQo.mp4 | cut -d" " -f2| sed 's/+.*$//' 2019:12:17 23:41:09
~$ DATA=$(exiftool -t -time:FileModifyDate NCEOPRuiyQo.mp4 | cut -d" " -f2 | sed 's/+.*$//') ~$ echo $DATA ~$ 2019:12:17 23:41:09
Aha, i co bardzo ważne, exiftool radzi sobie z dziwnymi plikami, trzeba tylko użyć przełącznika "--" (end of options) w tej kolejności (jak nazwa sugeruje):
exiftool -s -time:FileModifyDate -- uGAxPFHVk.mp4