Bagaimana saya bisa mendapatkan durasi video dalam hitungan detik?
Apa yang saya coba:
ffmpeg -i file.flv 2>&1 | grep "Duration"
Duration: 00:39:43.08, start: 0.040000, bitrate: 386 kb/s
mediainfo file.flv | grep Duration
Duration : 39mn 43s
Ini seberapa dekat, tetapi tidak begitu akurat, 2383 adalah 39,71 menit
ffmpeg -i file.flv 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,// | sed 's@\..*@@g' | awk '{ split($1, A, ":"); split(A[3], B, "."); print 3600*A[1] + 60*A[2] + B[1] }'
2383
Jawaban:
Untuk mendapatkan menit, Anda harus membagi 2383 detik dengan 60.
dan kemudian kalikan bagian pecahan .7167 dengan 60 untuk mendapatkan detik yang tersisa.
Jadi 39 menit, 43 detik. Aplikasi tampaknya memberi Anda nilai yang akurat.
sumber
Cukup gunakan
ffprobe
langsung. Tidak perlu untuksed
,grep
, dll Ada beberapa "jangka waktu" Anda dapat memperoleh (tergantung pada masukan Anda).Format (wadah) durasi
Menambahkan
-sexagesimal
opsi akan menggunakan format satuan waktu JAM: MM: SS.MICROSECONDS:Durasi aliran video
Perintah di atas berasal dari FFmpeg Wiki: Tips FFprobe .
Dengan
ffmpeg
Anda mungkin perlu mendekodekan input sepenuhnya jika Anda menemukan wadah atau durasi aliran hilang atau tidak akurat (mungkin karena file yang rusak atau terpotong).
Dalam contoh ini
time=00:01:03.48
adalah durasinya:Berapa lama ini tentu akan tergantung pada kompleksitas pengodean dan durasi input Anda dan kemampuan komputer Anda.
sumber
ffmpeg
".Jika sudah
ffmpeg
, Anda juga harus memilikiffprobe
:Ini juga akan memberikan sepersekian detik, jika itu masalah Anda dapat memproses lebih lanjut dengan sed.
sumber
printf
, seperti| xargs printf %.0f
- ini akan mengembalikan nilai integer.Untuk ffmpeg-0.6.5-1.el6.rf.x86_64 saya, untuk mendapatkan yang kedua, format perintah ffprobe adalah:
sumber
Solusi dengan mplayer yang memberikan detik secara langsung:
sumber
Ini menghasilkan durasi dalam milidetik sebagai nilai integer tunggal. Tidak perlu untuk grep / cut / sed / ...
sumber
brew install mediainfo
Saya menemukan masalah mendapatkan beberapa metadata yang aneh dan tidak benar dari beberapa file video yang saya kerjakan dan saya tidak bisa berhasil menemukan pola atau jenis penanganan menggunakan kode dan alat-alat seperti ffmpeg, mp4box, ffprobe, mediainfo, mplayer, untuk mendapatkan durasi nyata dari video.
Mengidentifikasi durasi nyata video adalah persyaratan untuk proyek yang sedang saya kerjakan dan satu-satunya cara yang saya temukan untuk selalu melakukannya dengan benar adalah dengan me-encode ulang file video menggunakan ffmpeg dan memaksa file yang disandikan untuk mengabaikan metadata file asli, seperti:
(Ini mungkin berjalan lebih cepat dari yang Anda harapkan. Saya terkejut, untuk jenis konten dan pada lingkungan yang saya gunakan, waktu rata-rata adalah 2 detik)
... lalu dapatkan durasi menggunakan alat sesuai pilihan Anda. Saya suka mediainfo, btw: - "mediainfo FILE --Inform =" Video;% Duration% "memberi Anda durasi dalam milidetik.
sumber
Jika Anda hanya perlu menanyakan metadata:
[...]
[...]
Jadi Anda dapat menguraikannya:
Tetapi jika Anda ingin mendapatkan durasi penampung yang efektif, Anda harus mendekodekannya:
Butuh waktu CPU untuk memecahkan kode, hingga:
[...]
Kemudian, Anda dapat menguraikannya:
sumber
Jika Anda ingin durasi ACCURATE, lupakan FFmpeg. Ini hanya memberikan estimasi berdasarkan filesize dan bitrate rata-rata. Saya telah menemukan, dalam beberapa kasus, perkiraan waktu istirahat 2x lipat!
Di Linux, jika file dibuat dan dimodifikasi hanya selama perekaman video tersebut, solusi alternatifnya adalah menggunakan kreasi dan waktu modifikasi terakhir untuk menghitung durasi, seperti pada:
sumber