Kirjoittaja Aihe: Videotiedostojen ominaisuuksien listaaminen  (Luettu 3223 kertaa)

jarmala

  • Käyttäjä
  • Viestejä: 790
    • Profiili
Videotiedostojen ominaisuuksien listaaminen
« : 06.08.18 - klo:21.13 »
Tuli eteen ongelma: miten listaan ziljoonan videotiedoston ominaisuudet? Kiinnostus olisi tällä kertaa resoluutioon. Mllä ohjelmalla saan listan

file1<tab>1920<tab>1080
file2<tab>720<tab>576
...

ffprobe ja avprobe eivät pukkaa tulostettaan stdout:iin, joten niistä ei saa grepillä tietoja ulos.
Exiftool tulostaa stdout:iin, mutta taitoni eivät riitä poimimaan siitä nimeä, leveyttä ja korkeutta erilleen samalle riville...

Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB
Ubuntu 22.04 LTS, KDE Plasma, Celeron N5105, 8 GB

nm

  • Käyttäjä
  • Viestejä: 16430
    • Profiili
Vs: Videotiedostojen ominaisuuksien listaaminen
« Vastaus #1 : 06.08.18 - klo:21.53 »
Voit listata videon ominaisuuksia kätevimmin ffproben show_entries -toiminnon avulla. Videon resoluution saa csv:nä ulos tähän tapaan:

Koodia: [Valitse]
ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of "csv=p=0" video.mp4
ziljoonan tiedoston listaus halutussa formaatissa onnistunee sitten vaikkapa findin avustuksella:

Koodia: [Valitse]
find /polku/videohakemistoon -printf '%p|' -exec ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of "csv=p=0:s=|" {} \; | tr '|' '\t'

Katso myös: https://trac.ffmpeg.org/wiki/FFprobeTips


ffprobe ja avprobe eivät pukkaa tulostettaan stdout:iin, joten niistä ei saa grepillä tietoja ulos.

Jos haluaa grepata stderriä, sekin kyllä onnistuu tarvittaessa ohjaamalla stderr stdoutiin:

Koodia: [Valitse]
joku_komento_joka_listaa_stderriin 2>&1 | grep hakusana
Mutta tätä ei tarvita tässä tapauksessa, kun ffprobesta saa asioita ulos fiksumminkin.
« Viimeksi muokattu: 06.08.18 - klo:21.55 kirjoittanut nm »

jarmala

  • Käyttäjä
  • Viestejä: 790
    • Profiili
Vs: Videotiedostojen ominaisuuksien listaaminen
« Vastaus #2 : 07.08.18 - klo:11.30 »

Koodia: [Valitse]
find /polku/videohakemistoon -printf '%p|' -exec ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of "csv=p=0:s=|" {} \; | tr '|' '\t'

Erinomaista!

Nyt jälkikäteen huomaa kuitenkin sen, että pitäisi miettiä kunnolla etukäteen, mitä toivoo... Mitenkähän saisin tuon tiedoston nimen viimeiseksi siinä rivillä? Tulisi siistimpi listaus.
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB
Ubuntu 22.04 LTS, KDE Plasma, Celeron N5105, 8 GB

nm

  • Käyttäjä
  • Viestejä: 16430
    • Profiili
Vs: Videotiedostojen ominaisuuksien listaaminen
« Vastaus #3 : 07.08.18 - klo:12.55 »
Nyt jälkikäteen huomaa kuitenkin sen, että pitäisi miettiä kunnolla etukäteen, mitä toivoo... Mitenkähän saisin tuon tiedoston nimen viimeiseksi siinä rivillä? Tulisi siistimpi listaus.

Tämä taitaa olla hivenen mutkikasta, koska ffproben csv-ulostulo ei jostain syystä mahdollista eri kategorioiden metadatan tulostamista samalle riville, joten sillä ei saa suoraan listattua resoluutiota ja tiedoston nimeä yhdellä rivillä. Lisäksi se kirjoittaa rivinvaihdon loppuun, joten riviin on hankalaa lisätä asioita. Tietty rivinvaihdot voi korvata muilla merkeillä putkittamalla tr:lle, mutta menee purkkavirityksen puolelle.

Ei nyt äkkiseltään tule mieleen parempaa yhden rivin komentoa kuin tämä:

Koodia: [Valitse]
find . -exec bash -c 'echo -n $(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of "csv=p=0:s=|" {}); echo "|{}"' \; | tr '|' '\t'
Vaihtoehtoisesti voisi järjestää alkuperäisen listauksen sarakkeet uudelleen vaikkapa awk:lla tai perlillä.
« Viimeksi muokattu: 07.08.18 - klo:13.00 kirjoittanut nm »

jarmala

  • Käyttäjä
  • Viestejä: 790
    • Profiili
Vs: Videotiedostojen ominaisuuksien listaaminen
« Vastaus #4 : 07.08.18 - klo:16.07 »

Koodia: [Valitse]
find . -exec bash -c 'echo -n $(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of "csv=p=0:s=|" {}); echo "|{}"' \; | tr '|' '\t'
Vaihtoehtoisesti voisi järjestää alkuperäisen listauksen sarakkeet uudelleen vaikkapa awk:lla tai perlillä.

Juu, parempi sortteerata sarakkeita, koska tuo ei sellaisenaan toimi, koska tiedostojen nimissä on tietenkin myös välilyöntejä...
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB
Ubuntu 22.04 LTS, KDE Plasma, Celeron N5105, 8 GB

nm

  • Käyttäjä
  • Viestejä: 16430
    • Profiili
Vs: Videotiedostojen ominaisuuksien listaaminen
« Vastaus #5 : 07.08.18 - klo:16.27 »
Juu, parempi sortteerata sarakkeita, koska tuo ei sellaisenaan toimi, koska tiedostojen nimissä on tietenkin myös välilyöntejä...

No sen voi korjata taktisilla lainausmerkeillä:
Koodia: [Valitse]
find . -exec bash -c 'echo -n $(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of "csv=p=0:s=|" "{}"); echo "|{}"' \; | tr '|' '\t'
Nyt menee rikki vain, jos nimissä on rivinvaihtoja, putkimerkkejä tai lainausmerkkejä.  ;D

jarmala

  • Käyttäjä
  • Viestejä: 790
    • Profiili
Vs: Videotiedostojen ominaisuuksien listaaminen
« Vastaus #6 : 07.08.18 - klo:17.19 »

No sen voi korjata taktisilla lainausmerkeillä:
Koodia: [Valitse]
find . -exec bash -c 'echo -n $(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of "csv=p=0:s=|" "{}"); echo "|{}"' \; | tr '|' '\t'

Kiitoksia.

Väkersin siitä kyllä jo itsekin seuraavan:

Koodia: [Valitse]
find * -printf '%p|' -exec ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of "csv=p=0:s=|" {} \; | awk -F'|' '{printf "%6s %6s %s\n",$2,$3,$1}' | sort --key=1.15
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB
Ubuntu 22.04 LTS, KDE Plasma, Celeron N5105, 8 GB