하나의 라이너 ffmpeg (또는 다른)가 해상도 만 얻으려면?


9

나는 커맨드 라인에 정통하지 않기 때문에 이것이 너무 어리석은 질문이 아닙니다.

내가 달리면 :

ffmpeg -i videofile.avi

다음과 같은 출력을 얻습니다.

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

"640x480"출력 명령에만 관심이 있다면 어떻게해야합니까?

출력을 정규 표현식으로 파이프하고 수행해야한다고 생각합니까? 어떻게해야할지 모르겠다. 감사!

답변:


10

ffmpeg로 비디오 해상도를 얻으십시오 :

ffmpeg -i filename 2>&1 | grep -oP 'Stream .*, \K[0-9]+x[0-9]+'

출력 (예 :)

640x480

muru의 대답은 확실히 충분했던 것이지만, 이것은 특별히 질문 한대로 (예 : ffmpeg 사용) 내 질문에 대답합니다. 나는 대답을 선택하는 것에 대한 프로토콜이 무엇인지 모른다. 이 경우 Muru의 대답이 더 도움이되는 반면 Cyrus의 대답은 더 중요하다고 생각합니다. 죄송합니다. 어떤 방법을 선택해야할지 모르겠지만 지금은 Cyrus를 선택하고 있습니다. 매우 구체적으로 요청한 것입니다 (그러나 Muru 's lol을 사용하고 있습니다)
bcsteeve

1
그래도 조심하십시오. 질문에 표시된 예제는 grep이 두 개의 일치 항목을 생성하게합니다 (첫 번째 0x44...및 두 번째는 해결).
muru

입력에 DVD 입력과 같은 여러 비디오 스트림이 포함 된 경우이 응답은 width x height비디오 스트림 당 여러 줄을 출력합니다 . 로 원 ffprobe하거나 head -n 1대답의 명령에 추가 하면 피할 수 있습니다 .
llogan

9

ffprobeffmpeg 패키지에서 사용 :

$ ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 input.mp4
  1280x720

자세한 내용은 ffprobe 설명서FFmpeg Wiki : ffprobe 팁 을 참조하십시오.


감사. ffprobe를 인식하지 못했습니다. 여기에 너무 많은 도움이! 모두 감사합니다.
bcsteeve

4
exiftool -b metavideo.mp4 -ImageWidth
exiftool -b metavideo.mp4 -ImageHeight

greps 없이 일을하다

하나의 라이너는 다음과 같습니다.

exiftool -b metavideo.mp4 -ImageSize

원하는 WxH 문자열을 반환합니다.


이것은 기술적으로 하나의 라이너가 아닙니다.
David Foerster

나는 하나의 라이너가 요청 된 것을 알지 못했지만 어쨌든 같은 너비 -ImageSize 매개 변수를 수행하면 WxH 문자열이 반환됩니다.
Alex Dolgov

질문의 제목을 다시보십시오! ;-) 어쨌든 +1
데이비드 푀르 스터

3

여기서는 exiftool출력 을 사용 하고 구문 분석하는 샘플 만 보았습니다 . 이상한 선택 인 것 같습니다. exiftool직접적인 방법으로 해상도 (및 거의 모든 다른 메타 데이터)를 얻을 수 있습니다.

exiftool -ImageSize -s3 filename

윌 형태로 출력 결과 WIDTHxHEIGHT(EQ : 1280×720)

참고 : -s3exiftool에 가장 짧은 출력 형식 을 생성하도록 지시 합니다 (태그 이름, 따옴표 등 제외).


2

정규 표현식을 사용 하여이 작업을 수행 할 수 ffmpeg있지만 libimage-exiftool-perl 패키지의 exiftool일부 를 사용하는 것이 좋습니다 .libimage-exiftool-perl 설치

$ exiftool some/video.ogv | awk -F' *: *' '$1 == "Image Size"{print $2}'
1242x480

exiftool?

  • ffmpeg/ avprobe유틸리티 형태의 라인 인쇄 Stream #0:0: Video: mpeg4 (Simple Profile) (XVID / 0x44495658), yuv420p, 640x480형태의 하나 개 이상의 값이 AAAxBBB(당신이 당신의 예에서 볼 수 있듯이) 가능합니다. 어느 것이 해상도인지 결정하는 것은 어려울 수 있습니다.
  • exiftool반면에는 형식의 데이터를 출력합니다 Type : Value. 따라서 정확한 필드를 얻는 것이 더 쉽습니다 Image Size. 또한 필드가 지정된 방식 (콜론과 공백으로 구분)을 고려하면 값을 쉽게 추출 할 수 있습니다.

어떤 awk명령을 수행하는 것입니다 :

  • 공백으로 둘러싸인 ' *: *'콜론으로 필드 구분 기호를 설정 :하십시오.
  • 첫 번째 필드 ( $1)가Image Size
  • 그리고 두 번째 필드 ( print $2)를 인쇄하십시오 .

대체 버전은 다음과 같습니다.

awk '/^Image Size/{print $4}'
  • 기본적으로, 그래서 필드를 분할하는 공백 사용 awk가 Image, Size, :1242x480모든 다른 분야가있다.
  • 줄의 시작 ( ^)을 Image Size에 맞추면 올바른 줄을 얻습니다.
  • 그리고 우리는 (이후 네 번째 필드를 인쇄 Image, Size그리고 :처음 세 필드입니다).

감사! "Ubuntu_Free_Culture_Showcase / How \ fast.ogg"를 좀 더 일반적인 것으로 변경하기 위해 예제를 편집 할 것을 제안 할 수 있습니다. 처음에는 파일 이름으로 인식하지 못했기 때문에 그대로 사용했습니다. 물론, 2 초 후에 오류가 발생하여 솔루션이 훌륭하게 작동합니다!
bcsteeve

@bcsteeve 우분투 데스크탑에 설치된 예제 컨텐츠의 일부이기 때문에 사용했습니다 (참조 /usr/share/example). : D
muru

1

약간 난해한 사용은 mediainfo간단한 원 라이너를 사용한 후의 형식으로 너비와 높이를 쉽게 추출합니다. 내 시스템에서 다음 예제를 관찰하십시오.

andrew@illium~$ mediainfo --Inform="Video;%Width%x%Height%" test.mp4
1920x1080

이 방법으로 사용할 수있는 다양한 추가 매개 변수를 볼 수 mediainfo --Info-Parameters있지만이 간단한 사용법만으로도 충분합니다.


0

for파일 디렉토리에서 해상도를 추출하기 위해 1 개의 라이너 루프를 만들었습니다 .

for i in $(ls "/root/vidz/dollabillz/"*); do eval $(ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=width,height "$i"); size=${streams_stream_0_width}x${streams_stream_0_height}; echo $i $size; done;

3
파싱 ls은 끝나지 않을 것입니다 ... 인용은 엉망을 해결하지 못합니다
Zanna

100,000
번의
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.