Saya memiliki file video dan saya ingin mendapatkan jumlah bingkai video yang ada di dalamnya. Saya bisa menggunakan ffmpeg
untuk mendapatkan panjang video dan FPS. Namun saya tidak dapat melihat sesuatu yang jelas untuk jumlah total frame.
Secara teori seseorang harus dapat mengalikan panjang (dalam detik) dengan FPS untuk mendapatkan jumlah frame, tetapi dalam kasus ini panjang (34,43 detik) dan framerate (29,97 fps) memberikan non-integer, yang membuat saya pikir saya melakukan sesuatu yang salah.
Saya harus dapat melakukan ini pada baris perintah dengan cara yang sepenuhnya otomatis dan non-grafis. Saya juga perlu ini cukup tepat, dan bukan perkiraan (jika itu mungkin dengan file video)
Saya mencoba menggunakan tcprobe
beberapa file. Untuk beberapa file AVI berfungsi, tetapi untuk beberapa file VOB, output tcprobe tidak memiliki jumlah frame. Saya mendapatkan hasil ini:
[tcprobe] MPEG program stream (PS)
[tcprobe] summary for myfile.vob, (*) = not default, 0 = not detected
import frame size: -g 720x480 [720x576] (*)
aspect ratio: 4:3 (*)
frame rate: -f 29.970 [25.000] frc=4 (*)
PTS=2199.3972, frame_time=33ms bitrate=7000 kbps
audio track: -a 0 [0] -e 48000,16,5 [48000,16,2] -n 0x2000 [0x2000] (*)
PTS=2199.2763, bitrate=192 kbps
-D 3 --av_fine_ms 20 (frames & ms) [0] [0]
Jawaban:
Ini mengerikan, dan bodoh, dan lambat, tetapi tampaknya berhasil:
Ini juga akan berfungsi dengan benar pada file terpotong dan aliran mentah (itulah sebabnya Anda tidak mendapatkan apa-apa untuk file .vob)
sumber
| tr ^M '\n'
dan|tail -n 1
. Juga, tidak ada ruang setelahframes=
tidak gagal. (Mungkin ada yang berubah dalam empat tahun terakhir.)ffprobe
dapat digunakan untuk mendapatkan info tentang file media:Anda akan mendapatkan detail tentang aliran:
Cari
nb_frames
dengangrep
:Itu berfungsi untuk avi, mp4 dan lain-lain. Untuk beberapa kontainer, tidak menunjukkan nilai yang valid, misalnya mpeg.
Dalam hal ini, ini berhasil
ffprobe -show_packets a.mpg 2>/dev/null | grep video | wc -l
sumber
Saya memposting ini pada pertanyaan lain . Dengan menggunakan
tcprobe
alat (daritranscode
paket), jumlah bingkai termasuk dalam info. Gunakan-i
sakelar untuk mendapatkan info dump dari file:Perhatikan jumlah frame diberikan pada dua baris di sini (jalur output ke-2 dan jalur keluaran terakhir).
sumber
Saya telah menemukan bahwa itu
mediainfo --fullscan inputfile | grep "Frame count"
bekerja dengan baik untuk sebagian besar file.Sistem berbasis Debian dapat menginstalnya dengan
apt-get install mediainfo
Jika Anda mendapatkan 2 baris daripada satu output, baris pertama adalah trek video dan baris kedua adalah trek audio. Tampaknya ini terjadi pada file dengan audio Variable Bit Rate.
Diuji pada sampel .mkv, .m4v, .mp4, flv, vob, dan .avi pada tanggal edit.
Sumber: Bagaimana cara mengambil informasi file video dari command line di Linux? dan pengujian di bawah rasa Ubuntu.
Anda dapat menemukan mediainfo tersedia untuk OS Anda di sini.
sumber
Jumlahkan durasi. Bisa lebih mewah dengan sed / awk dan apa yang tidak.
Dari pengujian kami, saya dapat mengatakan bahwa untuk saat ini telah terbukti menjadi yang terbaik yang paling dapat diandalkan. Anda mendapatkan jumlah yang tepat dan durasi yang tepat. Bahkan dengan framerate variabel yang semua alat lain seperti mediainfo tampaknya menjadi gaga.
sumber
Saya telah menemukan bahwa jumlah frame sebenarnya dua kali lipat durasi fps * (tidak tahu mengapa, saya akan senang mengetahui).
Dalam naskah saya, saya punya:
Dan ya, untuk beberapa alasan saya harus mendapatkan bagian integer darinya. Ini tidak masuk akal, tetapi skrip ini selalu berhasil mengonversi video saya dengan baik sejauh ini.
sumber
tcprobe
output dalam jawaban saya memberikan # frame sebagai persis detik * fps (dibulatkan ke atas). Saya berharap Anda melihat kekhasan ffmpeg. Sudahkah Anda mencoba menganalisis file dengan alat lain untuk melihat apakah mereka menunjukkan jumlah frame yang sama?seconds*fps=1001.59
dantcprobe=1002
. Jadi jelas,tcprobe
katakan saya tidak perlu dikalikan dua. Lalu mengapa ffmpeg memberi saya nomor yang dua kali lebih besar di log ketika sedang mengkonversi?Diuji di Ubuntu.
melt
- melt dimaksudkan sebagai alat uji untuk kerangka kerja MLT, tetapi juga merupakan editor video berorientasi baris perintah multitrack yang kuat. Itu juga bisa digunakan sebagai media player minimalis untuk file audio dan video.-consumer
id [: arg] [name = value] *Atur konsumen (wastafel)
xml
- Atur konsumen (wastafel) ke output terformat xml<property name="length">nnnn</property>
- menunjukkan jumlah frame, di manannnn
diganti dengan angka integer yang sama dengan jumlah frameJika Anda belum mencair, Anda dapat menginstalnya di Ubuntu dan sistem berbasis Debian lainnya
sudo apt-get install melt
sumber
mediainfo -fullscan filename
.Langsung dengan
mediainfo
, tanpa grep, tidak menunggu, tidak ada apa-apa:Untuk informasi lainnya, lihat
mediainfo --info-parameters
sumber
Anda dapat melakukan ini dengan menambahkan dan mengalikan nilai yang Anda dapatkan dari ffprobe.
Catatan: ffprobe adalah bagian dari libav (avconv) - versi linux dari ffmpeg.
Ketika Anda melakukan ini, Anda akan mendapatkan jumlah frame per / detik dan juga durasi klip.
Konversi durasi klip ke detik dan gandakan nilainya dengan jumlah bingkai / detik.
Ingatlah untuk mengumpulkan angka ke yang terdekat.
sumber
ffprobe
tidak tersedia, tapi ada sesuatu yang disebutavprobe
dilibav-tools
(yang juga menyediakanavconv
). Tetapi di sisi saya itu tidak mencetak sejumlah bingkai, setidaknya tidak untuk format yang saya coba. Itu hanya mencetak, apa yangavprobe -i
mencetak juga, dan ini hanya beberapa bit kecil tentang format, sayangnya. Bahkan dengan-v debug
itu hanya memberitahu saya beberapa properti bagus dari perangkat keras dan perangkat lunak saya diinstal, tetapi tidak sedikit pun informasi menarik tentang file / stream untuk diselidiki. Mungkin ia bersembunyi di beberapa opsi yang tersedia. Siapa tahu?ffmpeg
dalam repositori resmi. Tautan yang Anda berikan menyatakan dengan benar: FFmpeg kembali di Ubuntu 15.04 "Vivid Vervet". . Namun situasi sekarang berubah ketika 16,04 LTS keluar.linux
rubi
sumber
Metode terbaik: (Langsung dengan menghitung parameter yang tepat, dikonfirmasi oleh ffmpeg)
Cmd ->
Hasil ->
Perhitungan ->
Bukti ->
Sini
Keluaran
sumber