Eu não sou muito bem versado na linha de comando, então espero que isso não seja uma pergunta estúpida.
Se eu correr:
ffmpeg -i videofile.avi
Eu recebo uma saída 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
Se eu estivesse interessado apenas no comando "640x480", como eu poderia fazer isso?
Eu imagino que tenho que canalizar a saída para, e executar, uma expressão regular? Não faço ideia de como fazer isso. Obrigado!
0x44...
e a segunda sendo a resolução).width x height
fluxo por vídeo em várias linhas. Isso pode ser evitado se desejado comffprobe
, ou adicionandohead -n 1
ao comando na resposta.Usando
ffprobe
do pacote ffmpeg:Veja a documentação do ffprobe e o FFmpeg Wiki: dicas do ffprobe para obter mais informações.
fonte
faça o trabalho sem nenhum
grep
sUma linha é semelhante a:
Isso retorna a string WxH que você estava procurando.
fonte
Eu só vejo aqui exemplos de uso
exiftool
e análise de sua saída, o que parece ser uma escolha estranha.exiftool
pode ser usado de maneira direta para obter a resolução (e quase todos os outros metadados):exiftool -ImageSize -s3 filename
Será que resulta em uma saída em um formulário
WIDTHxHEIGHT
(eq:1280×720
)NOTA:
-s3
instrui o exiftool a produzir o formato de saída mais curto (sem nomes de tags, aspas, etc.)fonte
Você pode fazer isso usando expressões regulares e
ffmpeg
, mas eu prefiro usarexiftool
, parte do pacote libimage-exiftool-perl :Por que
exiftool
?ffmpeg
/avprobe
imprimem linhas do formulário emStream #0:0: Video: mpeg4 (Simple Profile) (XVID / 0x44495658), yuv420p, 640x480
que um ou mais valores do formulárioAAAxBBB
são possíveis (como você pode ver no seu exemplo). Determinar qual é a resolução pode ser difícil.exiftool
, por outro lado, gera dados do formulárioType : Value
. Portanto, é mais fácil obter o campo exato, a saberImage Size
. Além disso, dada a maneira como os campos são especificados (separados por dois pontos e espaços em branco), é possível extrair facilmente o valor.O que o
awk
comando faz é:' *: *'
- dois pontos:
cercado por qualquer número de espaços.$1
) estáImage Size
print $2
).Uma versão alternativa seria:
Image
,Size
,:
e1242x480
são todos os campos diferentes.^
) aImage Size
, obtemos a linha correta.Image
,Size
e:
são os três primeiros).fonte
/usr/share/example
). : DUm uso levemente esotérico de
mediainfo
extrai facilmente a largura e a altura no formato desejado após o uso de uma linha simples. Observe o seguinte exemplo no meu sistema:Os vários parâmetros adicionais que podem ser usados dessa maneira podem ser vistos,
mediainfo --Info-Parameters
mas talvez esse simples uso por si só seja suficiente para você ...fonte
Eu fiz um
for
loop de 1 liner para extrair a resolução do diretório de arquivos.fonte
ls
não vai acabar bem ... citando não vai corrigir a bagunça