No estoy muy versado en la línea de comando, así que espero que no sea una pregunta demasiado estúpida.
Si corro:
ffmpeg -i videofile.avi
Me sale una salida como esta:
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
Si solo estuviera interesado en el comando que genera "640x480", ¿cómo podría hacerlo?
Me imagino que tengo que canalizar la salida y realizar una expresión regular. No tengo idea de cómo hacer eso. ¡Gracias!

0x44...y la segunda son la resolución).width x heighttransmisión por video en varias líneas. Esto se puede evitar si se desea conffprobe, o agregandohead -n 1al comando en la respuesta.Usando
ffprobedesde el paquete ffmpeg:Consulte la documentación de ffprobe y FFmpeg Wiki: consejos de ffprobe para obtener más información.
fuente
hacer el trabajo sin ningún
grepsOne-liner se ve así:
Eso devuelve la cadena WxH que estaba buscando.
fuente
Solo veo aquí ejemplos de uso
exiftooly análisis de su salida, lo que parece ser una elección extraña.exiftoolse puede usar de manera directa para obtener la resolución (y casi cualquier otro metadato):exiftool -ImageSize -s3 filenameWill resultados de la producción en una forma
WIDTHxHEIGHT(eq:1280×720)NOTA:
-s3indica a exiftool que produzca el formato de salida más corto (sin nombres de etiquetas, comillas, etc.)fuente
Puede hacer esto usando expresiones regulares y
:
ffmpeg, pero prefiero usarexiftool, parte del paquete libimage-exiftool-perl¿Por qué
exiftool?ffmpeg/avprobeutilities imprimen líneas del formularioStream #0:0: Video: mpeg4 (Simple Profile) (XVID / 0x44495658), yuv420p, 640x480donde es posible uno o más valores del formularioAAAxBBB(como puede ver en su ejemplo). Determinar cuál es la resolución puede ser difícil.exiftool, por otro lado, genera datos del formularioType : Value. Por lo tanto, es más fácil obtener el campo exacto, a saberImage Size. Además, dada la forma en que se especifican los campos (separados por dos puntos y espacios en blanco), puede extraer fácilmente el valor.Lo que hace el
awkcomando es:' *: *'- dos puntos:rodeados por cualquier número de espacios.$1) esImage Sizeprint $2).Una versión alternativa sería:
Image,Size,:y1242x480son todas diferentes campos.^) conImage Size, obtenemos la línea correcta.Image,Sizey:son los primeros tres campos).fuente
/usr/share/example). : DUn uso ligeramente esotérico de
mediainfoextraerá fácilmente el ancho y la altura en el formato que está utilizando una línea simple. Observe el siguiente ejemplo en mi sistema:Se pueden ver los diversos parámetros adicionales que se pueden utilizar de esta manera,
mediainfo --Info-Parameterspero tal vez este simple uso por sí solo sea suficiente para usted ...fuente
Hice un
forbucle de 1 línea para extraer la resolución del directorio de archivos.fuente
lsno terminará bien ... las citas no solucionarán el problema