Vraag


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mijn vraag
Op reis met gopro van een vriend enkele leuke filmpjes geschoten. Echter is de filesize wel heel erg groot van die bestanden (1GB voor filmpje van 4:33) en echt wel te groot om te streamen. Met ffmpeg heb ik al verschillende zaken geprobeerd waarvan dit commando nog steeds een degelijke kwaliteit geeft en resulteert in een filesize van 42.3 MB voor 30 seconden film (dus ongeveer 400MB voor 4:33)
code:
1
ffmpeg -i GOPR0292.MP4 -c:v libx264 -crf 28 -level 3.1 -preset veryslow -tune film -profile:v baseline -filter:v scale=1920:1080 -r 30 -sws_flags lanczos -q:a 100 output.mp4


Echter vind ik dit steeds nog vrij hoog aangezien meeste films op mijn mediaserver maar 1 a 2 GB groot zijn en die duren 2u...

Bijgevolg vraag ik me af, of er nog betere instellingen bestaan om bij zo laag mogelijke filesize toch full hd resolutie te behouden aan 30fps (heb al wat gegoogled maar niet echt een antwoord gevonden)

Beste antwoord (via Verwijderd op 12-08-2016 16:01)


  • SuaveKadaver
  • Registratie: Juli 2011
  • Laatst online: 28-01 09:32
Hoi MeHiSt,

GoPro's houden van bitrate, dat klopt wel ja! Wat je kan doen is in plaats van CRF een bitrate op te geven. CRF is namelijk een relatieve waarde aan de orginele informatie en GoPro's nemen heel veel (soms kunstmatige) scherpte op, dus de CRF waarde kukelt snel in elkaar als je gaat comprimeren en dan blijft FFMPEG er data tegenaan schoppen.

Waarom doe je eigenlijk veryslow (beste kwaliteit) in combinatie met level 3.1, baseline, etc?

Je hoeft ook -tune film niet echt te gebruiken, dat is meer voor gecorrigeerd materiaal zover ik heb begrepen. Als je bronmateriaal al 1920x1080 is hoef je dat ook niet te defineren (zou ik zelfs niet doen) en hetzelfde geld voor -r 30. Daarmee is je -sws_flags ook overbodig en -q:a 100 lijkt me ook niet nodig, de GoPro neemt al aac op toch? Doe dan -c:a copy. Dan is de kwaliteit 1:1 met het orgineel en die bitrate is waarschijnlijk al netjes.

Kijk even op deze pagina:
https://trac.ffmpeg.org/wiki/Encode/H.264

Met name bij two-pass encoding. Daar geef je zelf een bitrate op en wordt de beste kwaliteit over de hele video gezocht. Duurt iets langer maar geeft de beste resulaten. Je kan het ook gewoon one-pass doen met -b:v, maar aan je veryslow trek ik de conclusie dat je kwaliteit hoog hebt zitten.

Als je nog vragen hebt doe dan ook even ffmpeg -i <videofile> en koppiepasta de blob data even hier, dan kan ik meelezen wat de bron precies is.

[ Voor 5% gewijzigd door SuaveKadaver op 10-08-2016 22:35 ]

Alle reacties


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • SuaveKadaver
  • Registratie: Juli 2011
  • Laatst online: 28-01 09:32
Hoi MeHiSt,

GoPro's houden van bitrate, dat klopt wel ja! Wat je kan doen is in plaats van CRF een bitrate op te geven. CRF is namelijk een relatieve waarde aan de orginele informatie en GoPro's nemen heel veel (soms kunstmatige) scherpte op, dus de CRF waarde kukelt snel in elkaar als je gaat comprimeren en dan blijft FFMPEG er data tegenaan schoppen.

Waarom doe je eigenlijk veryslow (beste kwaliteit) in combinatie met level 3.1, baseline, etc?

Je hoeft ook -tune film niet echt te gebruiken, dat is meer voor gecorrigeerd materiaal zover ik heb begrepen. Als je bronmateriaal al 1920x1080 is hoef je dat ook niet te defineren (zou ik zelfs niet doen) en hetzelfde geld voor -r 30. Daarmee is je -sws_flags ook overbodig en -q:a 100 lijkt me ook niet nodig, de GoPro neemt al aac op toch? Doe dan -c:a copy. Dan is de kwaliteit 1:1 met het orgineel en die bitrate is waarschijnlijk al netjes.

Kijk even op deze pagina:
https://trac.ffmpeg.org/wiki/Encode/H.264

Met name bij two-pass encoding. Daar geef je zelf een bitrate op en wordt de beste kwaliteit over de hele video gezocht. Duurt iets langer maar geeft de beste resulaten. Je kan het ook gewoon one-pass doen met -b:v, maar aan je veryslow trek ik de conclusie dat je kwaliteit hoog hebt zitten.

Als je nog vragen hebt doe dan ook even ffmpeg -i <videofile> en koppiepasta de blob data even hier, dan kan ik meelezen wat de bron precies is.

[ Voor 5% gewijzigd door SuaveKadaver op 10-08-2016 22:35 ]


Verwijderd

Topicstarter
Hoi scuzzo!
Alvast bedankt voor je uitleg!

Hier alvast de ffmpeg -i output
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
ffmpeg version N-80901-gfebc862 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
  configuration: --extra-libs=-ldl --prefix=/opt/ffmpeg --mandir=/usr/share/man --enable-avresample --disable-debug --enable-nonfree --enable-gpl --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --disable-decoder=amrnb --disable-decoder=amrwb --enable-libpulse --enable-libfreetype --enable-gnutls --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libvorbis --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libspeex --enable-libass --enable-avisynth --enable-libsoxr --enable-libxvid --enable-libvidstab
  libavutil      55. 28.100 / 55. 28.100
  libavcodec     57. 48.101 / 57. 48.101
  libavformat    57. 41.100 / 57. 41.100
  libavdevice    57.  0.102 / 57.  0.102
  libavfilter     6. 47.100 /  6. 47.100
  libavresample   3.  0.  0 /  3.  0.  0
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  1.100 /  2.  1.100
  libpostproc    54.  0.100 / 54.  0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'GOPR0292.MP4':
  Metadata:
    major_brand     : mp41
    minor_version   : 538120216
    compatible_brands: mp41
    creation_time   : 2014-01-10 08:40:14
  Duration: 00:04:33.31, start: 0.000000, bitrate: 30121 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 29974 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc (default)
    Metadata:
      creation_time   : 2014-01-10 08:40:14
      handler_name    :         GoPro AVC
      encoder         : GoPro AVC encoder
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      creation_time   : 2014-01-10 08:40:14
      handler_name    :         GoPro AAC
    Stream #0:2(eng): Data: none (tmcd / 0x64636D74), 0 kb/s (default)
    Metadata:
      creation_time   : 2014-01-10 08:40:14
      handler_name    :         GoPro TCD
      timecode        : 08:39:42:24
    Stream #0:3(eng): Data: none (fdsc / 0x63736466), 9 kb/s (default)
    Metadata:
      creation_time   : 2014-01-10 08:40:14
      handler_name    :         GoPro SOS
Waarom doe je eigenlijk veryslow (beste kwaliteit) in combinatie met level 3.1, baseline, etc?
Geen idee, had paar commando's gevonden op het net en deze gaf beste resultaat, veryslow heb ik er zelf van gemaakt omdat ik gelezen had (op zelfde site als jij linkte) dat je de traagste preset mag kiezen waarvoor je tijd hebt, dus had ik veryslow gekozen.

In begin stond de gopro ingesteld op 4k @ 30fps, maar vind ik niet nodig om op m'n dlna server te houden (originele bestanden houd ik op andere disks) daarom de 1920x1080 gedefinieerd om die paar filmpjes 4k in full hd te krijgen en die fps stond er nog van te experimenteren met 23.976 fps of dat veel uithaalde

Die 2-pass encoding probeer ik later eens naar te kijken!

Met bitrates had ik zelf ook al wat zitten spelen maar vind geen degelijke bitrate zonder te hoge filesizes te hebben, ik weet dat ze bij google 8Mbps gebruiken bij hd-video (en dus als ik -b:v 8000k gebruik) kom ik nog aan 280 MB voor een filmpje van 4:33 en de kwaliteit vind ik dan gewoon oke (maar wel vrij laag voor zo'n groot bestand). Ik zou toch naar iets willen komen in orde van 1GB per 30min film ofzo (dus rond de 4500kbps) maar dan vind ik kwaliteit net iets te laag.

ik geef wel toe, ik dacht dat video encoding veel simpler en dat er gewoon een universeel commando bestond waarmee je mooie afweging had tussen bitrate en kwaliteit 8)7

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Na wat spelen met de bitrate's heb ik een (volgens mij) degelijke afweging gevonden tussen filesize en kwaliteit, uiteindelijke commando:
code:
1
ffmpeg -i GOPR0292.MP4 -c:v libx264 -preset veryslow -b:v 6000k -filter:v scale=1920:1080 -r 30 -c:a copy output_2.mp4

waarbij filesize gereduceerd werd met 80%.

Acties:
  • 0 Henk 'm!

  • SuaveKadaver
  • Registratie: Juli 2011
  • Laatst online: 28-01 09:32
Als je afspeel apparatuur het aankan is HEVC/x265 ook het overwegen waard, dat is ongeveer de helft van de ruimte voor dezelfde kwaliteit. Afspelen is alleen een enorme b*tch.

Ik zou niet aan de framerate zitten, dat betekent alleen maar dat je frames zal weggooien of verzinnen. Daar wordt het niet mooier van, maar ik kan me wel voorstellen dat je wil beperken tot HD dus dan is je 1920x1080 en sws_scaler setting wel nuttig.

Je kan de volgende ook nog toevoegen: -profile:v high -level 4.2
Die zorgen als het goed is voor iets meer mogelijkheden voor de encoder, maakt je processor wat heter maar zou iets moeten schelen in de kwaliteit.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nogmaals bedankt voor je input scuzzo7!
met laatste setting erbij merk ik amper verschil met originele materiaal.

Gebruikt commando:
code:
1
ffmpeg -i GOPR0292.MP4 -c:v libx264 -preset veryslow -b:v 6000k -filter:v scale=1920:1080 -sws_flags lanczos -profile:v high -level 4.2 -c:a copy output_4.mp4


Nu effe shell scriptje en processor wat werk laten verzetten ;-)
Pagina: 1