Saya tidak terlalu berpengalaman dalam baris perintah jadi mudah-mudahan ini bukan pertanyaan yang bodoh.
Jika saya menjalankan:
ffmpeg -i videofile.avi
Saya mendapatkan output seperti ini:
ffmpeg version git-2013-11-21-6a7980e Copyright (c) 2000-2013 the FFmpeg develop ers
built on Nov 21 2013 12:06:32 with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5)
configuration: --prefix=/home/user/ffmpeg_build --extra-cflags=-I/home/user/ffmpeg_build/include --extra-ldflags=-L/home/user/ffmpeg_build/lib --b indir=/home/user/bin --extra-libs=-ldl --enable-gpl --enable-libass --enable -libfdk- aac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-l ibx264 --enable- nonfree
libavutil 52. 53.100 / 52. 53.100
libavcodec 55. 44.100 / 55. 44.100
libavformat 55. 21.100 / 55. 21.100
libavdevice 55. 5.100 / 55. 5.100
libavfilter 3. 91.100 / 3. 91.100
libswscale 2. 5.101 / 2. 5.101
libswresample 0. 17.104 / 0. 17.104
libpostproc 52. 3.100 / 52. 3.100
Input #0, avi, from 'videofile.avi':
Metadata:
encoder : Lavf52.68.0
Duration: 00:23:07.68, start: 0.000000, bitrate: 2390 kb/s
Stream #0:0: Video: mpeg4 (Simple Profile) (XVID / 0x44495658), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 23.98 fps, 23.98 tbr, 23.98 tbn, 1199 tbc
Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 44100 Hz, stereo, s16p, 128 k b/s
Jika saya hanya tertarik pada perintah yang menghasilkan "640x480", bagaimana saya bisa melakukannya?
Saya membayangkan saya harus menyalurkan output ke, dan melakukan, ekspresi reguler? Tidak tahu bagaimana melakukannya. Terima kasih!
0x44...
dan yang kedua adalah resolusi).width x height
aliran per video dalam beberapa baris. Ini dapat dihindari jika diinginkan denganffprobe
, atau dengan menambahkanhead -n 1
perintah dalam jawaban.Menggunakan
ffprobe
dari paket ffmpeg:Lihat dokumentasi ffprobe dan FFmpeg Wiki: tips ffprobe untuk info lebih lanjut.
sumber
melakukan pekerjaan tanpa
grep
sOne-liner terlihat seperti:
Itu mengembalikan string WxH yang Anda cari.
sumber
Saya hanya melihat di sini contoh menggunakan
exiftool
dan menguraikan output itu, yang tampaknya menjadi pilihan yang aneh.exiftool
dapat digunakan secara langsung untuk mendapatkan resolusi (dan hampir semua metadata lainnya):exiftool -ImageSize -s3 filename
Akan menghasilkan output dalam bentuk
WIDTHxHEIGHT
(eq:1280×720
)CATATAN:
-s3
menginstruksikan exiftool untuk menghasilkan format output terpendek (tanpa nama tag, tanda kutip, dll)sumber
Anda dapat melakukan ini menggunakan ekspresi reguler dan
ffmpeg
, tetapi saya lebih suka menggunakanexiftool
, bagian dari paket libimage-exiftool-perl :Mengapa
exiftool
?ffmpeg
/avprobe
utilitas mencetak garis dalam bentukStream #0:0: Video: mpeg4 (Simple Profile) (XVID / 0x44495658), yuv420p, 640x480
di mana satu atau lebih nilai dari bentukAAAxBBB
yang mungkin (seperti yang Anda lihat dalam contoh Anda). Menentukan resolusi mana yang mungkin sulit dilakukan.exiftool
, di sisi lain, menampilkan data formulirType : Value
. Jadi lebih mudah untuk mendapatkan bidang yang tepat, yaituImage Size
. Plus, mengingat cara bidang ditentukan (dipisahkan oleh titik dua dan spasi putih), Anda dapat dengan mudah mengekstrak nilainya.Apa yang dilakukan
awk
perintah adalah:' *: *'
- titik dua yang:
dikelilingi oleh sejumlah spasi.$1
) adalahImage Size
print $2
).Versi alternatifnya adalah:
Image
,Size
,:
dan1242x480
semua bidang yang berbeda.^
) denganImage Size
, kita mendapatkan garis yang benar.Image
,Size
dan:
merupakan tiga bidang pertama).sumber
/usr/share/example
). : DPenggunaan yang sedikit esoteris
mediainfo
akan dengan mudah mengekstrak lebar dan tinggi dalam format yang Anda inginkan setelah menggunakan satu-liner sederhana. Perhatikan contoh berikut di sistem saya:Berbagai parameter lebih lanjut yang dapat digunakan dengan cara ini dapat dilihat dengan
mediainfo --Info-Parameters
tetapi mungkin penggunaan sederhana ini dengan sendirinya akan cukup untuk Anda ...sumber
Saya membuat
for
loop 1 liner untuk mengekstrak resolusi dari direktori file.sumber
ls
tidak akan berakhir dengan baik ... mengutip tidak akan memperbaiki kekacauan