Як перевірити, як довго відео (mp4) використовує оболонку?


16

Мені потрібно FTP завантажити всі mp4 файли в каталог довжиною> 4 хвилини за допомогою оболонки. Я не можу знайти жодного сценарію, щоб перевірити, як довго триває відео. Хтось має ідею, як це зробити?

Велике спасибі!


1
дивіться це stackoverflow.com/questions/3844430/… :-) сподіваюся, що це допоможе
harish.venkat

Відповіді:


23

Це дасть вам тривалість відео.

ffmpeg -i myvideo 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//

Також працює для віддалених URL-адрес відео, наприклад ffmpeg -i " instagram.fewr1-1.fna.fbcdn.net/t50.2886-16/… " 2> & 1 | grep Тривалість | вирізати -d '' -f 4 | sed s /, //
skidadon

Чи гарантований формат повідомлень журналу FFmpeg? Якщо ні, мені це не дуже подобається - це може перестати працювати з будь-яким випуском.
Ондра Жижка

7

Медіаінфо - це швидкий інструмент для цієї мети:

$ mediainfo --Inform="Video;%Duration%"  [inputfile]

Ви можете знайти більше варіантів у більш ретельної відповіді .

На мої тести ffprobeзаймає 0,3 секунди і mediainfoзаймає 0,09 секунди.


Це дає дивні результати ... як-от 2679600 ... краще використовувати mediainfo --Inform="Video;%Duration/String%" [inputfile]... що дозволить вам отримати щось, наприклад, 43 хв. 50-х
Роберт

5

Ви можете спробувати використовувати команду 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 секунди.

Сподіваюсь, це допоможе!


1
Це також можна використовувати з avprobe- немає потреби в -i, але в іншому випадку це працює точно так само. Або ffprobeдля відповіді @ per.
зол

4

exiftool(спочатку призначений для читання метаданих камери з файлів зображень, але згодом розширений для читання та запису метаданих майже з будь-якого виду медіа-файлів) дуже зручно використовувати для цього. Запустіть його:

exiftool FILE.mp4 | grep Duration

Напевно, вам потрібно буде встановити exiftoolспочатку, але це легко зробити за допомогою наступної команди (для Debian та похідних, таких як Ubuntu тощо):

apt install libimage-exiftool-perl

Звичайно, ця відповідь - це ще одна альтернатива. Багато інших відповідей теж хороші. :)



1

Додавши рішення 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'

1

ffprobeє більш елегантним рішенням, ніж ffmpegяке видає помилку, якщо не задано вихідний шлях.

ffprobe video.mp4 2>&1 | grep -E '^ +Duration' | cut -d':' -f2- | cut -d, -f1

0

Якщо ви хочете переглянути тривалість деяких відео в каталозі, ви можете скористатися наступною командою

exiftool * | grep ^ Тривалість | вирізати -d '' -f 26


1
Не потрібно використовувати grepі таке. Просто exiftool -T -Duration *.mkv(або будь-який шаблон файлу)
PerlDuck

0

Як бачите, існує безліч способів цього досягти. ffprobe mediafile -show_entries format=format=duration 2>&1 | grep DURATIONде mediafile є ім'ям файлу, надасть результат, аналогічний наведеному нижче. Перший - тривалість першого потоку (зазвичай відео), а другий - тривалість другого потоку (як правило, аудіо)

  DURATION        : 00:21:40.132000000
  DURATION        : 00:21:40.062000000
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.