Как проверить, как долго видео (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 Продолжительность | cut -d '' -f 4 | SED S /, //
skidadon
Гарантирован ли формат сообщений журнала FFmpeg? Если нет, мне это не очень нравится - он может перестать работать с любым выпуском.
Ондра Жижка
7

Mediainfo - быстрый инструмент для этой цели:

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

Вы можете найти больше вариантов в более подробном ответе .

В моих тестах это ffprobeзанимает 0,3 секунды и mediainfo0,09 секунды.

qubodup
источник
Это дает странные результаты ... например, 2679600 ... лучше использовать mediainfo --Inform="Video;%Duration/String%" [inputfile]... что даст вам что-то вроде 43 минут 50-х
Роберт Ридл
5

Вы можете попробовать использовать команду avconv ..

Сначала вы должны установить:

Установить через центр программного обеспечения

если вы наберете команду с флагом -i, вы получите информацию о видео:

avconv -i test.mp4

На выходе есть поле с названием Duration

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

Теперь вы можете использовать команду только для получения значения поля Duration

Тип:

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.
Evilsoup
4

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

exiftool FILE.mp4 | grep Duration

exiftoolСначала вам, вероятно, потребуется установить , но это легко сделать с помощью следующей команды (в Debian и ее производных, таких как Ubuntu и т. Д.):

apt install libimage-exiftool-perl

Конечно, этот ответ является еще одной альтернативой. Многие другие ответы тоже хороши. :)

zrajm
источник
2

Еще проще:

avprobe file.mp4 -show_format_entry duration
Джоан Альберт Сильвестр
источник
В настоящее время я получаю сообщение "Опция 'show_format_entry' устарела, вместо этого используйте '-show_entries format = duration'"
Фахим Митха
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'
mcnesium
источник
1

ffprobeэто более элегантное решение, чем то, ffmpegкоторое выдает ошибку, если не указан выходной путь.

ffprobe video.mp4 2>&1 | grep -E '^ +Duration' | cut -d':' -f2- | cut -d, -f1
Ондра Жижка
источник
0

Если вы хотите увидеть продолжительность некоторых видео в каталоге, вы можете использовать следующую команду

exiftool * | grep ^ Продолжительность | cut -d '' -f 26

meisamhakimi
источник
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
Старейшина Гик
источник