Nie jestem zbyt dobrze zorientowany w linii poleceń, więc mam nadzieję, że nie jest to zbyt głupie pytanie.
Jeśli uruchomię:
ffmpeg -i videofile.avi
Otrzymuję dane wyjściowe takie jak to:
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
Gdybym był zainteresowany tylko poleceniem wypisującym „640x480”, jak mogę to zrobić?
Wyobrażam sobie, że muszę przesłać dane wyjściowe i wykonać wyrażenie regularne? Nie mam pojęcia, jak to zrobić. Dzięki!
0x44...
i drugi to rozdzielczość).width x height
strumienia wideo na wiele linii. Można tego uniknąć w razie potrzeby za pomocąffprobe
lub poprzez dodaniehead -n 1
do polecenia w odpowiedzi.Korzystanie
ffprobe
z pakietu ffmpeg:Zobacz dokumentację ffprobe i Wiki FFmpeg: porady ffprobe, aby uzyskać więcej informacji.
źródło
wykonuj pracę bez żadnych
grep
sOne-liner wygląda jak:
Zwraca szukany ciąg WxH.
źródło
Widzę tu tylko przykłady użycia
exiftool
i analizy jego wyników, co wydaje się dziwnym wyborem.exiftool
można użyć w bezpośredni sposób, aby uzyskać rozdzielczość (i prawie dowolne inne metadane):exiftool -ImageSize -s3 filename
Da w rezultacie na wyjściu w postaci
WIDTHxHEIGHT
(równanie:1280×720
)UWAGA:
-s3
instruuje exiftool, aby utworzył najkrótszy format wyjściowy (bez nazw znaczników, cudzysłowów itp.)źródło
Możesz to zrobić za pomocą wyrażeń regularnych i
ffmpeg
, ale wolałbym użyćexiftool
, części pakietu libimage-exiftool-perl :Dlaczego
exiftool
?ffmpeg
/avprobe
media drukować linie postaciStream #0:0: Video: mpeg4 (Simple Profile) (XVID / 0x44495658), yuv420p, 640x480
, gdzie jeden lub więcej wartości formularzaAAAxBBB
możliwe są (jak widać w przykładzie). Określenie rozdzielczości może być trudne.exiftool
, z drugiej strony, dane wyjściowe formularzaType : Value
. Łatwiej więc uzyskać dokładne pole, a mianowicieImage Size
. Ponadto, biorąc pod uwagę sposób, w jaki pola są określone (oddzielone dwukropkiem i białymi spacjami), możesz łatwo wyodrębnić wartość.Jaka
awk
komenda nie jest:' *: *'
- dwukropek:
otoczony dowolną liczbą spacji.$1
) toImage Size
print $2
).Alternatywna wersja to:
Image
,Size
,:
i1242x480
są różne pola.^
) doImage Size
, otrzymujemy poprawną linię.Image
,Size
i:
są pierwsze trzy pola).źródło
/usr/share/example
). : DNieco ezoteryczne użycie z
mediainfo
łatwością wyodrębni szerokość i wysokość w formacie, w którym jesteś po użyciu prostej jednowarstwowej. Obserwuj następujący przykład w moim systemie:Różne dalsze parametry, które można wykorzystać w ten sposób, są widoczne,
mediainfo --Info-Parameters
ale być może wystarczy to samo proste użycie ...źródło
Zrobiłem 1 liniową
for
pętlę, aby wyodrębnić rozdzielczość z katalogu plików.źródło
ls
nie zakończy się dobrze ... cytowanie nie naprawi bałaganu