2017-08-29 4 views
0

J'ai eu des difficultés à trouver de nombreuses réponses avec la documentation FFMPEG, les forums et ici. Ce que j'essaie de faire est de compresser une vidéo de capture d'écran, mais avec seulement des données RVB. Les étapes que je suis en train de prendre sont:FFMPEG RGB vidéo de conversion sans perte

ffmpeg -f avfoundation -pix_fmt 0rgb -r "30" -i "1" -vcodec libx264rgb -pix_fmt rgb24 -crf 0 -t 25 -q 0 -y ~/Desktop/RGB.mkv 

south-58-45:~ danielcarter$ ffmpeg -f avfoundation -pix_fmt 0rgb -r "30" -i "1" -vcodec libx264rgb -pix_fmt rgb24 -crf 0 -t 170 -q 0 -y -v info ~/Desktop/output.mkv 
ffmpeg version 3.3 Copyright (c) 2000-2017 the FFmpeg developers 
    built with Apple LLVM version 8.1.0 (clang-802.0.41) 
    configuration: --prefix=/usr/local/Cellar/ffmpeg/3.3 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-vda 
    libavutil  55. 58.100/55. 58.100 
    libavcodec  57. 89.100/57. 89.100 
    libavformat 57. 71.100/57. 71.100 
    libavdevice 57. 6.100/57. 6.100 
    libavfilter  6. 82.100/6. 82.100 
    libavresample 3. 5. 0/3. 5. 0 
    libswscale  4. 6.100/4. 6.100 
    libswresample 2. 7.100/2. 7.100 
    libpostproc 54. 5.100/54. 5.100 
[avfoundation @ 0x7fc39d004c00] Stream #0: not enough frames to estimate rate; consider increasing probesize 
Input #0, avfoundation, from '1': 
    Duration: N/A, start: 175270.249500, bitrate: N/A 
    Stream #0:0: Video: rawvideo ([0]RGB/0x42475200), 0rgb, 1440x900, 1000k tbr, 1000k tbn, 1000k tbc 
Stream mapping: 
    Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264rgb)) 
Press [q] to stop, [?] for help 
[libx264rgb @ 0x7fc39d13ea00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2 
[libx264rgb @ 0x7fc39d13ea00] profile High 4:4:4 Predictive, level 4.0, 4:4:4 8-bit 
[libx264rgb @ 0x7fc39d13ea00] 264 - core 148 r2748 97eaef2 - H.264/MPEG-4 AVC codec - Copyleft 2003-2016 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x1:0x111 me=hex subme=7 psy=0 mixed_ref=1 me_range=16 chroma_me=1 trellis=0 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=0 chroma_qp_offset=0 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc=cqp mbtree=0 qp=0 
Output #0, matroska, to '/Users/danielcarter/Desktop/output.mkv': 
    Metadata: 
    encoder   : Lavf57.71.100 
    Stream #0:0: Video: h264 (libx264rgb) (H264/0x34363248), rgb24, 1440x900, q=-1--1, 30 fps, 1k tbn, 30 tbc 
    Metadata: 
     encoder   : Lavc57.89.100 libx264rgb 
    Side data: 
     cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1 
frame= 5100 fps= 30 q=-1.0 Lsize= 12167kB time=00:02:49.96 bitrate= 586.4kbits/s speed=0.999x  
video:12134kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.267659% 
[libx264rgb @ 0x7fc39d13ea00] frame I:21 Avg QP: 0.00 size:430796 
[libx264rgb @ 0x7fc39d13ea00] frame P:5079 Avg QP: 0.00 size: 665 
[libx264rgb @ 0x7fc39d13ea00] mb I I16..4: 61.3% 0.0% 38.7% 
[libx264rgb @ 0x7fc39d13ea00] mb P I16..4: 0.1% 0.0% 0.0% P16..4: 0.0% 0.0% 0.0% 0.0% 0.0% skip:99.9% 
[libx264rgb @ 0x7fc39d13ea00] 8x8 transform intra:0.0% inter:11.2% 
[libx264rgb @ 0x7fc39d13ea00] coded y,u,v intra: 48.0% 31.6% 29.0% inter: 0.0% 0.0% 0.0% 
[libx264rgb @ 0x7fc39d13ea00] i16 v,h,dc,p: 76% 22% 2% 0% 
[libx264rgb @ 0x7fc39d13ea00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 46% 35% 7% 2% 2% 1% 1% 1% 3% 
[libx264rgb @ 0x7fc39d13ea00] Weighted P-Frames: Y:0.0% UV:0.0% 
[libx264rgb @ 0x7fc39d13ea00] ref P L0: 83.1% 6.4% 5.3% 5.2% 
[libx264rgb @ 0x7fc39d13ea00] kb/s:584.71 

Ceci capture l'écran sur mon mac. Au meilleur de ma connaissance, cela crée un fichier sans perte et j'ai comparé les captures d'écran qui le confirment. La prochaine étape est l'endroit où je pense avoir un problème. Parce que je veux exécuter la compression sur les données RVB brutes j'ai besoin de convertir le MKV en un fichier RVB;

ffmpeg -i ~/Desktop/RGB.mkv -c:v rawvideo -pix_fmt rgb24 -crf 0 -ss 00:00:03 -to 00:02:01 -q 0 -y ~/Desktop/out.rgb 

south-58-45:~ danielcarter$ ffmpeg -i ~/Desktop/output.mkv -c:v rawvideo -pix_fmt rgb24 -crf 0 -ss 00:00:03 -to 00:02:01 -q 0 -y ~/Desktop/out.rgb 
ffmpeg version 3.3 Copyright (c) 2000-2017 the FFmpeg developers 
    built with Apple LLVM version 8.1.0 (clang-802.0.41) 
    configuration: --prefix=/usr/local/Cellar/ffmpeg/3.3 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-vda 
    libavutil  55. 58.100/55. 58.100 
    libavcodec  57. 89.100/57. 89.100 
    libavformat 57. 71.100/57. 71.100 
    libavdevice 57. 6.100/57. 6.100 
    libavfilter  6. 82.100/6. 82.100 
    libavresample 3. 5. 0/3. 5. 0 
    libswscale  4. 6.100/4. 6.100 
    libswresample 2. 7.100/2. 7.100 
    libpostproc 54. 5.100/54. 5.100 
Input #0, matroska,webm, from '/Users/danielcarter/Desktop/output.mkv': 
    Metadata: 
    ENCODER   : Lavf57.71.100 
    Duration: 00:02:50.00, start: 0.000000, bitrate: 586 kb/s 
    Stream #0:0: Video: h264 (High 4:4:4 Predictive), gbrp(tv, gbr/unknown/unknown, progressive), 1440x900, 30 fps, 30 tbr, 1k tbn, 60 tbc (default) 
    Metadata: 
     ENCODER   : Lavc57.89.100 libx264rgb 
     DURATION  : 00:02:50.000000000 
Codec AVOption crf (Select the quality for constant quality mode) specified for output file #0 (/Users/danielcarter/Desktop/out.rgb) has not been used for any stream. The most likely reason is either wrong type (e.g. a video option with no video streams) or that it is a private option of some encoder which was not actually used for any stream. 
Stream mapping: 
    Stream #0:0 -> #0:0 (h264 (native) -> rawvideo (native)) 
Press [q] to stop, [?] for help 
Output #0, rawvideo, to '/Users/danielcarter/Desktop/out.rgb': 
    Metadata: 
    encoder   : Lavf57.71.100 
    Stream #0:0: Video: rawvideo (RGB[24]/0x18424752), rgb24, 1440x900, q=2-31, 933120 kb/s, 30 fps, 30 tbn, 30 tbc (default) 
    Metadata: 
     DURATION  : 00:02:50.000000000 
     encoder   : Lavc57.89.100 rawvideo 
frame= 3540 fps=111 q=-0.0 Lsize=13440938kB time=00:01:58.00 bitrate=933120.0kbits/s speed=3.68x  
video:13440938kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000% 

Une fois que j'ai cela, je peux ensuite compresser et décompresser avec succès. Je reçois ensuite un fichier de travail à lire en utilisant;

ffmpeg -f rawvideo -vcodec rawvideo -s 1440x900 -r 30 -pix_fmt rgb24 -i ~/Desktop/out.rgb -c:v libx264rgb -pix_fmt rgb24 -x264opts keyint=300:min-keyint=300:no-scenecut -y -crf 0 ~/Desktop/rgbplay.mkv 

south-58-45:~ danielcarter$ ffmpeg -f rawvideo -vcodec rawvideo -s 1440x900 -r 30 -pix_fmt rgb24 -i ~/Desktop/out.rgb -c:v libx264rgb -pix_fmt rgb24 -x264opts keyint=300:min-keyint=300:no-scenecut -y -crf 0 ~/Desktop/rgbplay.mkv 
ffmpeg version 3.3 Copyright (c) 2000-2017 the FFmpeg developers 
    built with Apple LLVM version 8.1.0 (clang-802.0.41) 
    configuration: --prefix=/usr/local/Cellar/ffmpeg/3.3 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-vda 
    libavutil  55. 58.100/55. 58.100 
    libavcodec  57. 89.100/57. 89.100 
    libavformat 57. 71.100/57. 71.100 
    libavdevice 57. 6.100/57. 6.100 
    libavfilter  6. 82.100/6. 82.100 
    libavresample 3. 5. 0/3. 5. 0 
    libswscale  4. 6.100/4. 6.100 
    libswresample 2. 7.100/2. 7.100 
    libpostproc 54. 5.100/54. 5.100 
[rawvideo @ 0x7fb1f9002600] Estimating duration from bitrate, this may be inaccurate 
Input #0, rawvideo, from '/Users/danielcarter/Desktop/out.rgb': 
    Duration: 00:01:58.00, start: 0.000000, bitrate: 933120 kb/s 
    Stream #0:0: Video: rawvideo (RGB[24]/0x18424752), rgb24, 1440x900, 933120 kb/s, 30 tbr, 30 tbn, 30 tbc 
Stream mapping: 
    Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264rgb)) 
Press [q] to stop, [?] for help 
[libx264rgb @ 0x7fb1f9010c00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2 
[libx264rgb @ 0x7fb1f9010c00] profile High 4:4:4 Predictive, level 4.0, 4:4:4 8-bit 
[libx264rgb @ 0x7fb1f9010c00] 264 - core 148 r2748 97eaef2 - H.264/MPEG-4 AVC codec - Copyleft 2003-2016 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x1:0x111 me=hex subme=7 psy=0 mixed_ref=1 me_range=16 chroma_me=1 trellis=0 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=0 chroma_qp_offset=0 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=2 keyint=300 keyint_min=151 scenecut=0 intra_refresh=0 rc=cqp mbtree=0 qp=0 
Output #0, matroska, to '/Users/danielcarter/Desktop/rgbplay.mkv': 
    Metadata: 
    encoder   : Lavf57.71.100 
    Stream #0:0: Video: h264 (libx264rgb) (H264/0x34363248), rgb24, 1440x900, q=-1--1, 30 fps, 1k tbn, 30 tbc 
    Metadata: 
     encoder   : Lavc57.89.100 libx264rgb 
    Side data: 
     cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1 
frame= 3540 fps= 64 q=-1.0 Lsize= 8319kB time=00:01:57.96 bitrate= 577.7kbits/s speed=2.13x  
video:8297kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.273154% 
[libx264rgb @ 0x7fb1f9010c00] frame I:12 Avg QP: 0.00 size:437670 
[libx264rgb @ 0x7fb1f9010c00] frame P:3528 Avg QP: 0.00 size: 919 
[libx264rgb @ 0x7fb1f9010c00] mb I I16..4: 61.9% 0.0% 38.1% 
[libx264rgb @ 0x7fb1f9010c00] mb P I16..4: 0.1% 0.0% 0.0% P16..4: 0.0% 0.0% 0.0% 0.0% 0.0% skip:99.8% 
[libx264rgb @ 0x7fb1f9010c00] 8x8 transform intra:0.0% inter:15.1% 
[libx264rgb @ 0x7fb1f9010c00] coded y,u,v intra: 49.7% 36.5% 33.7% inter: 0.0% 0.0% 0.0% 
[libx264rgb @ 0x7fb1f9010c00] i16 v,h,dc,p: 73% 25% 1% 0% 
[libx264rgb @ 0x7fb1f9010c00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 45% 36% 7% 2% 2% 2% 2% 1% 3% 
[libx264rgb @ 0x7fb1f9010c00] Weighted P-Frames: Y:0.0% UV:0.0% 
[libx264rgb @ 0x7fb1f9010c00] ref P L0: 81.3% 7.7% 6.7% 4.3% 
[libx264rgb @ 0x7fb1f9010c00] kb/s:575.96 

Mais ici, j'ai une variance de pixels. Je suppose qu'il y a une conversion RGB-YUV-RGB quelque part mais je ne suis pas assez intelligent pour savoir où. Si l'un de vous peut aider, je serais reconnaissant pour toujours.

Voici une photo des deux alambics côte à côte qui montre les différences;

pixel difference

Si vous avez besoin quelque chose de plus je peux poster aussi. Cheers, DC

+0

Pouvez-vous fournir le plein, la sortie non coupée de l'exécutable ffmpeg lors de l'exécution de chacun des ci-dessus avec des informations les lignes de commande -v? En particulier, il serait intéressant de voir la configuration de swscale (le cas échéant). –

+0

Ajout de la sortie – DCDCDC

+0

Votre MKV est marqué comme ayant la gamme TV. Les formats RVB doivent être pc/full. – Mulvya

Répondre

0

J'ai réussi à obtenir ce travail en supprimant une étape. La conversion de mkv-> rgb posait le problème, il utilisait gbrp comme format de pixel et cela créait de légères différences de couleur sur l'ensemble de l'écran. Merci à Mulvya d'avoir aussi souligné les marqueurs de la gamme, sans quoi je n'aurais pas su où regarder.

Pour que cela fonctionne, j'utilise le code suivant pour afficher la capture directement en RVB; Ensuite, vous pouvez convertir cela en un fichier MKV pour la lecture en utilisant;

ffmpeg -report -f rawvideo -vcodec rawvideo -s 1440x900 -r 30 -pix_fmt rgb24 -color_range 2 -i ~/Desktop/output.rgb -c:v libx264rgb -pix_fmt rgb24 -ss 00:00:04 -to 00:02:02 -color_range 2 -x264opts crf=0 -y ~/Desktop/rgbplay.mkv 

Merci pour tout, je peux dormir à nouveau haha ​​