2017-08-29 25 views
0

私は、FFMPEGのドキュメント、フォーラム、そしてここで多くの回答を見つけるのが難しいです。 私がやろうとしているのは、画面キャプチャビデオを圧縮することですが、RGBデータだけです。 現在行っている手順は次のとおりです。FFMPEG RGB無損失変換ビデオ

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 

これは、私のMacで画面をキャプチャします。私の知る限りでは、これはロスレスファイルを作成し、これを確認するスクリーンショットを比較しました。 次のステップは私に問題があると思うところです。 生のRGBデータで圧縮を実行したいので、MKVをRGBファイルに変換する必要があります。

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% 

これを取得したら、正常に圧縮して解凍することができます。私はそれを使用して再生する作業ファイルを取得します。

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 

しかし、ここではピクセルの分散があります。私の推測では、どこかでRGB-YUV-RGB変換が行われていますが、どこで動くか分かりません。 あなたのいずれかが私が永遠に感謝してくれることを助けることができるならば。

ここに2つの静止画を並べて表示して、その違いを示しています。

pixel difference

あなたはより多くの何が必要な場合は、私もそれを投稿することができます。 乾杯、 DC

+0

あなたはffmpegの実行ファイルの完全な、ノーカット出力を提供することができ笑再び眠ることができますか?特に、swscale(もしあれば)の設定を見るのは興味深いでしょう。 –

+0

出力を追加しました – DCDCDC

+0

あなたのMKVはTVを持っているとマークされています。 RGB形式はpc/fullでなければなりません。 – Mulvya

答えて

0

私はステップを削除することでこれを動作させることができました。 mkv-> rgbからの変換で問題が発生しました。ピクセル形式としてgbrpを使用していたため、画面全体で色のわずかな違いが生じました。レンジマーカを指摘してくれたマルビアにありがとうございました。それがなければどこを見てもわからなかったでしょう。

これを動作させるには、次のコードを使用して直接RGBにキャプチャすることができます。

ffmpeg -f avfoundation -pix_fmt 0rgb -color_range 2 -r "30" -i "1" -vcodec rawvideo -pix_fmt rgb24 -color_range 2 -t 210 -q 0 -y -v info ~/Desktop/output.rgb 

次に再生用にMKVファイルに変換できます。

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 

すべてをありがとう、私は-v情報と上記commandlinesのそれぞれを実行するとき

関連する問題