Мені потрібно FTP завантажити всі mp4 файли в каталог довжиною> 4 хвилини за допомогою оболонки. Я не можу знайти жодного сценарію, щоб перевірити, як довго триває відео. Хтось має ідею, як це зробити?
Велике спасибі!
Мені потрібно FTP завантажити всі mp4 файли в каталог довжиною> 4 хвилини за допомогою оболонки. Я не можу знайти жодного сценарію, щоб перевірити, як довго триває відео. Хтось має ідею, як це зробити?
Велике спасибі!
Відповіді:
Це дасть вам тривалість відео.
ffmpeg -i myvideo 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//
Медіаінфо - це швидкий інструмент для цієї мети:
$ mediainfo --Inform="Video;%Duration%" [inputfile]
Ви можете знайти більше варіантів у більш ретельної відповіді .
На мої тести ffprobe
займає 0,3 секунди і mediainfo
займає 0,09 секунди.
mediainfo --Inform="Video;%Duration/String%" [inputfile]
... що дозволить вам отримати щось, наприклад, 43 хв. 50-х
Ви можете спробувати використовувати команду avconv ..
Спочатку слід встановити:
якщо ви введете команду з прапором -i, ви отримаєте інформацію про відео:
avconv -i test.mp4
У висновку є поле під назвою Тривалість
avconv version 0.8.4-4:0.8.4-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers
built on Nov 6 2012 16:51:33 with gcc 4.6.3
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':
Duration: 00:58:28.05, start: 0.000000, bitrate: 888 kb/s
Stream #0.0(eng): Video: h264 (High), yuv420p, 720x404, 748 kb/s, 25 fps, 25 tbr, 20k tbn, 50 tbc
Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 127 kb/s
Тепер ви можете використовувати команду, щоб отримати лише значення поля Тривалість
Тип:
avconv -i file.mp4 2>&1 | grep 'Duration' | awk '{print $2}' | sed s/,//
У моєму випадку результат:
00:58:28.05
58 хвилин і 28,05 секунди.
Сподіваюсь, це допоможе!
avprobe
- немає потреби в -i
, але в іншому випадку це працює точно так само. Або ffprobe
для відповіді @ per.
exiftool
(спочатку призначений для читання метаданих камери з файлів зображень, але згодом розширений для читання та запису метаданих майже з будь-якого виду медіа-файлів) дуже зручно використовувати для цього. Запустіть його:
exiftool FILE.mp4 | grep Duration
Напевно, вам потрібно буде встановити exiftool
спочатку, але це легко зробити за допомогою наступної команди (для Debian та похідних, таких як Ubuntu тощо):
apt install libimage-exiftool-perl
Звичайно, ця відповідь - це ще одна альтернатива. Багато інших відповідей теж хороші. :)
Ще простіше:
avprobe file.mp4 -show_format_entry duration
Додавши рішення pers , це може бути використано для цілого каталогу:
for f in *; do ffmpeg -i "$f" 2>&1 | grep Duration | cut -d " " -f 4 | sed s/,// | tr -d "\n" && echo " $f"; done
його можна навіть розширити, | sort
щоб файли сортували за їх довжиною.
ви можете додати це до .bashrc
або .bash_aliases
для того, щоб мати змогу це зробити lsvlength | sort
в каталозі
alias lsvlength='for f in *; do ffmpeg -i "$f" 2>&1 | grep Duration | cut -d " " -f 4 | sed s/,// | tr -d "\n" && echo " $f"; done'
ffprobe
є більш елегантним рішенням, ніж ffmpeg
яке видає помилку, якщо не задано вихідний шлях.
ffprobe video.mp4 2>&1 | grep -E '^ +Duration' | cut -d':' -f2- | cut -d, -f1
Якщо ви хочете переглянути тривалість деяких відео в каталозі, ви можете скористатися наступною командою
exiftool * | grep ^ Тривалість | вирізати -d '' -f 26
grep
і таке. Просто exiftool -T -Duration *.mkv
(або будь-який шаблон файлу)
Як бачите, існує безліч способів цього досягти.
ffprobe mediafile -show_entries format=format=duration 2>&1 | grep DURATION
де mediafile є ім'ям файлу, надасть результат, аналогічний наведеному нижче. Перший - тривалість першого потоку (зазвичай відео), а другий - тривалість другого потоку (як правило, аудіо)
DURATION : 00:21:40.132000000
DURATION : 00:21:40.062000000