Мені потрібно 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