Bagaimana cara memeriksa berapa lama video (mp4) menggunakan shell?


Jawaban:


23

Ini akan memberi Anda panjang video.

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

Juga berfungsi untuk url video jarak jauh misalnya ffmpeg -i " instagram.fewr1-1.fna.fbcdn.net/t50.2886-16/... " 2> & 1 | grep Durasi | cut -d '' -f 4 | sed s /, //
skidadon

Apakah format pesan log FFmpeg dijamin? Jika tidak, saya tidak suka ini - itu bisa berhenti bekerja dengan rilis apa pun.
Ondra Žižka

7

Mediainfo adalah alat cepat untuk tujuan ini:

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

Anda dapat menemukan lebih banyak opsi dalam jawaban yang lebih menyeluruh .

Dalam pengujian saya, ffprobedibutuhkan 0,3 detik dan mediainfo0,09 detik.


Ini memberikan hasil yang aneh ... seperti 2679600 ... lebih baik digunakan mediainfo --Inform="Video;%Duration/String%" [inputfile]... yang akan membuat Anda mendapatkan sesuatu seperti 43 menit 50
Robert Riedl

5

Anda dapat mencoba menggunakan perintah avconv ..

Pertama, Anda harus menginstal:

Instal melalui pusat perangkat lunak

jika Anda mengetik perintah dengan flag -i, Anda akan mendapatkan informasi tentang video:

avconv -i test.mp4

Dalam output ada bidang yang disebut Durasi

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

Sekarang Anda bisa menggunakan perintah untuk hanya mendapatkan nilai Durasi bidang

Tipe:

avconv -i file.mp4 2>&1 | grep 'Duration' | awk '{print $2}' | sed s/,//

Dalam kasus saya hasilnya adalah:

00:58:28.05

58 Menit dan 28,05 detik.

Semoga ini bisa membantu!


1
Ini juga dapat digunakan dengan avprobe- tidak perlu untuk -i, tetapi jika tidak berfungsi dengan cara yang sama persis. Atau ffprobeuntuk jawaban @ per.
evilsoup

4

exiftool(awalnya ditujukan untuk membaca metadata kamera dari file gambar, tetapi kemudian diperluas untuk membaca dan menulis metadata dari hampir semua jenis file media) sangat mudah digunakan untuk ini. Jalankan dengan:

exiftool FILE.mp4 | grep Duration

Anda mungkin harus menginstal exiftoolterlebih dahulu, tetapi ini mudah dilakukan dengan perintah berikut (pada Debian dan turunannya seperti Ubuntu dll.):

apt install libimage-exiftool-perl

Tentu saja, jawaban ini hanyalah alternatif lain. Banyak jawaban lain juga bagus. :)


2

Lebih sederhana:

avprobe file.mp4 -show_format_entry duration

Saat ini saya mendapatkan pesan "Opsi 'show_format_entry' sudah tidak digunakan lagi, gunakan '-show_entries format = durasi' sebagai gantinya"
Faheem Mitha

1

Menambahkan ke solusi pers , ini dapat digunakan di seluruh direktori:

for f in *; do ffmpeg -i "$f" 2>&1 | grep Duration | cut -d " " -f 4 | sed s/,//  | tr -d "\n" && echo " $f"; done

bahkan dapat diperpanjang dengan | sortmembuat file diurutkan berdasarkan panjangnya.

Anda dapat menambahkan ini ke .bashrcatau .bash_aliasesagar dapat dilakukan lsvlength | sortpada direktori

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

ffprobeadalah solusi ffmpegyang lebih elegan daripada yang melempar kesalahan jika tidak diberi jalur output.

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

0

Jika Anda ingin melihat durasi beberapa video dalam direktori, Anda dapat menggunakan perintah berikut

exiftool * | grep ^ Durasi | cut -d '' -f 26


1
Tidak perlu digunakan grepdan semacamnya. Cukup exiftool -T -Duration *.mkv(atau apa pun pola file)
PerlDuck

0

Seperti yang Anda lihat ada banyak cara untuk mencapai ini. ffprobe mediafile -show_entries format=format=duration 2>&1 | grep DURATIONdi mana mediafile adalah nama file, akan memberikan output yang mirip dengan di bawah ini. Yang pertama adalah durasi streaming pertama (biasanya video) dan yang kedua memberikan durasi streaming kedua (biasanya audio)

  DURATION        : 00:21:40.132000000
  DURATION        : 00:21:40.062000000
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.