Saya perlu mengunggah semua file mp4 dalam direktori dengan panjang> 4 menit menggunakan shell. Saya tidak dapat menemukan skrip untuk memeriksa berapa lama video. Adakah yang tahu cara melakukannya?
Terima kasih banyak!
Saya perlu mengunggah semua file mp4 dalam direktori dengan panjang> 4 menit menggunakan shell. Saya tidak dapat menemukan skrip untuk memeriksa berapa lama video. Adakah yang tahu cara melakukannya?
Terima kasih banyak!
Jawaban:
Ini akan memberi Anda panjang video.
ffmpeg -i myvideo 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//
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, ffprobe
dibutuhkan 0,3 detik dan mediainfo
0,09 detik.
mediainfo --Inform="Video;%Duration/String%" [inputfile]
... yang akan membuat Anda mendapatkan sesuatu seperti 43 menit 50
Anda dapat mencoba menggunakan perintah avconv ..
Pertama, Anda harus menginstal:
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!
avprobe
- tidak perlu untuk -i
, tetapi jika tidak berfungsi dengan cara yang sama persis. Atau ffprobe
untuk jawaban @ per.
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 exiftool
terlebih 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. :)
Lebih sederhana:
avprobe file.mp4 -show_format_entry duration
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 | sort
membuat file diurutkan berdasarkan panjangnya.
Anda dapat menambahkan ini ke .bashrc
atau .bash_aliases
agar dapat dilakukan lsvlength | sort
pada 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'
ffprobe
adalah solusi ffmpeg
yang 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
Jika Anda ingin melihat durasi beberapa video dalam direktori, Anda dapat menggunakan perintah berikut
exiftool * | grep ^ Durasi | cut -d '' -f 26
grep
dan semacamnya. Cukup exiftool -T -Duration *.mkv
(atau apa pun pola file)
Seperti yang Anda lihat ada banyak cara untuk mencapai ini.
ffprobe mediafile -show_entries format=format=duration 2>&1 | grep DURATION
di 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