संपादित करें: मैंने सफलतापूर्वक डक टेक ऑफ का 10 बिट एनकोड बनाया ।
पहला तरीका: मैंने एक 10bit x264 बाइनरी बनाया जो स्टेटिक रूप से libx264 को जोड़ता है।
cp -al x264-git x264-10bit # instead of changing my normal git checkout
cd x264-10bit
./configure --extra-cflags=-march=native --enable-static --disable-interlaced --bit-depth=10
make -j2
sudo install x264 /usr/local/bin/x264-10bit
mkfifo pipe.y4m
ffmpeg -v verbose -i in -pix_fmt yuv420p10le -strict experimental -f yuv4mpegpipe pipe.y4m
(open another shell window / tab / screen(1) window):
x264 pipe.y4m --crf 30 --preset ultrafast -o 10bit-420.mkv
(अल्ट्राफास्ट एंड लो क्वालिटी क्योंकि यह कॉन्सेप्ट का प्रमाण है, क्वालिटी टेस्ट नहीं।) मैंने इसे स्वैसेले के साथ संकलित नहीं किया। (यह libavutil या कुछ में आरजीबी पिक्स एफएमटी के बारे में नाखुश था)। यह गलत है कि यदि इनपुट कलरस्पेस मेल नहीं खाता है --output-csp i444
, जो वास्तव में अच्छा है अगर आप गलती से x264 क्रोमा को नीचे नहीं लाना चाहते हैं। यह ठीक काम किया जब मैं इसे के कुछ फ्रेम खिलाया yuv444p14le.y4m
, 10bit उत्पादन। (यह बिट गहराई को छोटा कर सकता है, लेकिन स्वेसाले के बिना क्रोमा को नीचे नहीं गिरा सकता है।)
दूसरा तरीका: LD_LIBRARY_PATH
10bit libx264.so का चयन करने के लिए उपयोग करें
आप सब कुछ के लिए एक ही ffmpeg डायनामिक-लिंक्ड बाइनरी का उपयोग कर सकते हैं।
cp -al x264-git x264-10bit # instead of changing my normal git checkout
cd x264-10bit
./configure --extra-cflags=-march=native '--libdir=/usr/local/lib/high-bit-depth-codec' '--includedir=/usr/local/lib/high-bit-depth-codec/include' --disable-cli --enable-shared --disable-interlaced --bit-depth=10
make -j2
sudo make install-lib-shared # this Makefile target depends on install-lib-dev, hence setting --includedir
alias highdepth-ffmpeg='LD_LIBRARY_PATH=/usr/local/lib/high-bit-depth-codec ffmpeg'
highdepth-ffmpeg -v verbose -framerate 50 -f image2 \
-pattern_type glob -i ./3_DucksTakeOff_720p50_CgrLevels_SINC_FILTER_SVTdec05_/'*'.sgi \
-pix_fmt yuv420p10le -crf 30 -preset ultrafast \
-sws_flags +accurate_rnd+print_info \
with_ld_path.420p10.accurate_rnd.mkv
ffmpeg version N-68044-gb9dd809 Copyright (c) 2000-2015 the FFmpeg developers
built on Jan 14 2015 23:21:08 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
configuration: --enable-gpl --enable-version3 --enable-nonfree --disable-doc --disable-ffserver --enable-libbluray --enable-libschroedinger --enable-libtheora --enable-libx264 --enable-libx265 --enable-libmp3lame --enable-libopus --enable-libwebp --enable-libvpx --disable-outdev=oss --disable-indev=oss --disable-encoder=vorbis --enable-libvorbis --enable-libfdk-aac --disable-encoder=aac --disable-decoder=jpeg2000 --enable-libvidstab
libavutil 54. 16.100 / 54. 16.100
libavcodec 56. 20.100 / 56. 20.100
libavformat 56. 18.101 / 56. 18.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 7.101 / 5. 7.101
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 3.100 / 53. 3.100
Input #0, image2, from './3_DucksTakeOff_720p50_CgrLevels_SINC_FILTER_SVTdec05_/*.sgi':
Duration: 00:00:10.00, start: 0.000000, bitrate: N/A
Stream #0:0: Video: sgi, rgb48be, 1280x720, 50 tbr, 50 tbn, 50 tbc
[graph 0 input from stream 0:0 @ 0x1b6d8c0] w:1280 h:720 pixfmt:rgb48be tb:1/50 fr:50/1 sar:0/1 sws_param:flags=2
[auto-inserted scaler 0 @ 0x1b7dae0] w:iw h:ih flags:'0x41004' interl:0
[format @ 0x1b7e940] auto-inserting filter 'auto-inserted scaler 0' between the filter 'Parsed_null_0' and the filter 'format'
SwScaler: reducing / aligning filtersize 1 -> 4
Last message repeated 1 times
SwScaler: reducing / aligning filtersize 1 -> 1
SwScaler: reducing / aligning filtersize 9 -> 8
[swscaler @ 0x1b500c0] bicubic scaler, from rgb48be to yuv420p10le using MMXEXT
[swscaler @ 0x1b500c0] 1280x720 -> 1280x720
[auto-inserted scaler 0 @ 0x1b7dae0] w:1280 h:720 fmt:rgb48be sar:0/1 -> w:1280 h:720 fmt:yuv420p10le sar:0/1 flags:0x41004
[libx264 @ 0x1b78da0] using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64 SlowShuffle
[libx264 @ 0x1b78da0] profile High 10, level 3.2, 4:2:0 10-bit
[libx264 @ 0x1b78da0] 264 - core 144 r2525+2 6a4fca8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=0 intra_refresh=0 rc=crf mbtree=0 crf=30.0 qcomp=0.60 qpmin=0 qpmax=81 qpstep=4 ip_ratio=1.40 aq=0
Output #0, matroska, to 'with_ld_path.420p10.accurate_rnd.mkv':
Metadata:
encoder : Lavf56.18.101
Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuv420p10le, 1280x720, q=-1--1, 50 fps, 1k tbn, 50 tbc
Metadata:
encoder : Lavc56.20.100 libx264
Stream mapping:
Stream #0:0 -> #0:0 (sgi (native) -> h264 (libx264))
Press [q] to stop, [?] for help
No more output streams to write to, finishing.e=00:00:09.84 bitrate=12060.2kbits/s
frame= 500 fps= 14 q=-1.0 Lsize= 14714kB time=00:00:10.00 bitrate=12053.5kbits/s
video:14709kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.031423%
Input file #0 (./3_DucksTakeOff_720p50_CgrLevels_SINC_FILTER_SVTdec05_/*.sgi):
Input stream #0:0 (video): 500 packets read (2765056000 bytes); 500 frames decoded;
Total: 500 packets (2765056000 bytes) demuxed
Output file #0 (with_ld_path.420p10.accurate_rnd.mkv):
Output stream #0:0 (video): 500 frames encoded; 500 packets muxed (15062147 bytes);
Total: 500 packets (15062147 bytes) muxed
[libx264 @ 0x1b78da0] frame I:2 Avg QP:43.00 size:144760
[libx264 @ 0x1b78da0] frame P:498 Avg QP:49.83 size: 29663
[libx264 @ 0x1b78da0] mb I I16..4: 100.0% 0.0% 0.0%
[libx264 @ 0x1b78da0] mb P I16..4: 5.1% 0.0% 0.0% P16..4: 79.3% 0.0% 0.0% 0.0% 0.0% skip:15.6%
[libx264 @ 0x1b78da0] coded y,uvDC,uvAC intra: 67.8% 60.5% 41.9% inter: 50.1% 16.3% 2.8%
[libx264 @ 0x1b78da0] i16 v,h,dc,p: 5% 54% 33% 8%
[libx264 @ 0x1b78da0] i8c dc,h,v,p: 53% 39% 6% 3%
[libx264 @ 0x1b78da0] kb/s:12049.24
(same bitrate and stats as with the y4m pipe,
so it behaves the same with the same input data... good.)
मैं स्पष्ट रूप से उन गुणवत्ता सेटिंग्स के साथ कुछ भी देखने की कोशिश नहीं की। मैं चाहता था कि यह तेजी से चले, और डिस्क स्पेस का एक गुच्छा बर्बाद न करें क्योंकि मैं हमेशा चीजों पर बदलाव की कोशिश करते समय बहुत सारे आउटपुट फाइल बनाता हूं।
एक अलग x264 प्रक्रिया में बड़े पैमाने पर y4m डेटा को पाइपिंग नहीं करने से यह 12 के बजाय 14 एफपीएस हो गया, इसलिए अल्ट्राफास्ट के लिए एक सभ्य स्पीडअप। धीमी सांकेतिक शब्दों में बदलना ओवरहेड बौना होगा।
मेरा स्रोत 48bit RGB है। मैंने पाया कि आउटपुट mkv पर exact_rnd का कोई प्रभाव नहीं था। (बिट-समान परिणाम एमकेवी हैडर में कुछ बिट्स को छोड़कर , और -sws_flags
, के साथ -sws_flags +accurate_rnd
, -vf scale=flags=accurate_rnd
शायद रैंडमाइज्ड एमकेवी यूयूआईडी है। यहां तक कि -qp 0
इसलिए, मैं इसे राउंडिंग त्रुटि से नहीं खो रहा था। cmp -l f1 f2 | less
बाइनरी फ़ाइलों की तुलना करने के लिए । कुछ प्रारंभिक अंतर के बाद भी। या ssdeep -p
शायद accurate_rnd
अब डिफ़ॉल्ट है? "
वहाँ एक ffmpeg swscaler झंडा है जो मायने रखता है, अगर आप ffmpeg को अपने क्रोमा को downsample दे रहे हैं: डिफ़ॉल्ट बाइसिक के बजाय lanczos। (मुझे लगता है कि लैंज़ोज़ को अभी भी उच्च गुणवत्ता के लिए सबसे अच्छा विकल्प माना जाता है? थोड़ी देर के लिए पढ़ा नहीं जाता है।)
highdepth-ffmpeg -i in -pix_fmt yuv420p10le ...encode...opts...
-vf scale=flags=lanczos -sws_flags +accurate_rnd+print_info with_ld_path.420p10.accurate_rnd.lanczos.mkv
काम नहीं +lanczos
करने के लिए जोड़ना -sws_flags
:
[format @ 0x28e4940] auto-inserting filter 'auto-inserted scaler 0' between the filter 'Parsed_null_0' and the filter 'format'
[swscaler @ 0x28b60c0] Exactly one scaler algorithm must be chosen, got 204
[auto-inserted scaler 0 @ 0x28e3ae0] Failed to configure output pad on auto-inserted scaler 0
Error opening filters!
यदि आप इसे 10 बिट्स से अधिक गहरा इनपुट देने की कोशिश करते हैं, तो ffmpeg मना कर देता है।
highdepth-ffmpeg ... -pix_fmt yuv444p14le
[graph 0 input from stream 0:0 @ 0x36ec9c0] w:1280 h:720 pixfmt:rgb48be tb:1/50 fr:50/1 sar:0/1 sws_param:flags=2
Incompatible pixel format 'yuv444p14le' for codec 'libx264', auto-selecting format 'yuv444p10le'
[Parsed_scale_0 @ 0x36e2a00] w:1280 h:720 fmt:rgb48be sar:0/1 -> w:1280 h:720 fmt:yuv444p10le sar:0/1 flags:0x200
[libx264 @ 0x3701d80] using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64 SlowShuffle
[libx264 @ 0x3701d80] profile High 4:4:4 Predictive, level 3.2, 4:4:4 10-bit
असल में, ffmpeg के libx264 ड्राइवर हमेशा x264 को खिलाने पर जोर देते हैं, इसके लिए संकलित बिट गहराई। जैसे -pix_fmt yuv420p
:
Incompatible pixel format 'yuv420p' for codec 'libx264', auto-selecting format 'yuv420p10le'
x264.h कहता है:
/* x264_bit_depth:
* Specifies the number of bits per pixel that x264 uses. This is also the
* bit depth that x264 encodes in. If this value is > 8, x264 will read
* two bytes of input data for each pixel sample, and expect the upper
* (16-x264_bit_depth) bits to be zero.
* Note: The flag X264_CSP_HIGH_DEPTH must be used to specify the
* colorspace depth as well. */
X264_API extern const int x264_bit_depth;
मुझे लगता है कि आंतरिक रूप से x264 (सीएलआई) में हमेशा पिक्सेल प्रारूपों को अप-कन्वर्ट करना होता है, कोड में 8 बिट इनपुट, हर फ़ंक्शन के 10 बिट आउटपुट संस्करण नहीं होते हैं। और यह भी, मुझे लगता है कि विभिन्न इनपुट बिट डेप्थ को स्वीकार करना सिर्फ x264 सीएलआई में है, न कि लाइब्रेरी एपीआई में। मैं उत्सुक हूँ कि क्या होता है जब आप एपीआई इनपुट को फीड करते हैं जहाँ उच्चतर बिट सेट होते हैं ... (ffpeg आपको कोड को हैक किए बिना ऐसा करने की अनुमति नहीं देता है, इसलिए यह ऐसा कुछ नहीं है जिससे किसी को बचने की चिंता करने की आवश्यकता हो।)
frame.c:370: So this is why ffmpeg can't give 8-bit input to libx264
#if HIGH_BIT_DEPTH
if( !(src->img.i_csp & X264_CSP_HIGH_DEPTH) )
{
x264_log( h, X264_LOG_ERROR, "This build of x264 requires high depth input. Rebuild to support 8-bit input.\n" );
return -1;
}
#else
कोई pix_fmt निर्दिष्ट नहीं होने पर, ffmpeg yuv444p10le
आरजीबी इनपुट दिए जाने पर चुनता है । या इसके साथ libx264rgb
, यह 8bit आरजीबी को उन कार्यों को खिलाती है जो 16 बिट (जिनमें से महत्वपूर्ण हैं) की उम्मीद कर रहे हैं, और सीफ़ॉल्ट>> <। मैं रिपोर्ट करता हूँ कि ऊपर की तरफ ...
highdepth-ffmpeg -v verbose -framerate 50 -f image2 -pattern_type glob -i ./3_DucksTakeOff_720p50_CgrLevels_SINC_FILTER_SVTdec05_/'*'.sgi -qp 0 -preset ultrafast -sws_flags print_info+accurate_rnd -frames 2 -c:v libx264rgb lossless.rgb.mkv
ffmpeg version N-68044-gb9dd809 Copyright (c) 2000-2015 the FFmpeg developers
built on Jan 14 2015 23:21:08 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
configuration: --enable-gpl --enable-version3 --enable-nonfree --disable-doc --disable-ffserver --enable-libbluray --enable-libschroedinger --enable-libtheora --enable-libx264 --enable-libx265 --enable-libmp3lame --enable-libopus --enable-libwebp --enable-libvpx --disable-outdev=oss --disable-indev=oss --disable-encoder=vorbis --enable-libvorbis --enable-libfdk-aac --disable-encoder=aac --disable-decoder=jpeg2000 --enable-libvidstab
libavutil 54. 16.100 / 54. 16.100
libavcodec 56. 20.100 / 56. 20.100
libavformat 56. 18.101 / 56. 18.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 7.101 / 5. 7.101
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 3.100 / 53. 3.100
Input #0, image2, from './3_DucksTakeOff_720p50_CgrLevels_SINC_FILTER_SVTdec05_/*.sgi':
Duration: 00:00:10.00, start: 0.000000, bitrate: N/A
Stream #0:0: Video: sgi, rgb48be, 1280x720, 50 tbr, 50 tbn, 50 tbc
[graph 0 input from stream 0:0 @ 0x1eb9660] w:1280 h:720 pixfmt:rgb48be tb:1/50 fr:50/1 sar:0/1 sws_param:flags=2
[auto-inserted scaler 0 @ 0x1eba120] w:iw h:ih flags:'0x41000' interl:0
[format @ 0x1eb94c0] auto-inserting filter 'auto-inserted scaler 0' between the filter 'Parsed_null_0' and the filter 'format'
SwScaler: reducing / aligning filtersize 1 -> 4
Last message repeated 1 times
SwScaler: reducing / aligning filtersize 1 -> 1
Last message repeated 1 times
[swscaler @ 0x1eba480] bicubic scaler, from rgb48be to rgb24 using MMXEXT
[swscaler @ 0x1eba480] 1280x720 -> 1280x720
[auto-inserted scaler 0 @ 0x1eba120] w:1280 h:720 fmt:rgb48be sar:0/1 -> w:1280 h:720 fmt:rgb24 sar:0/1 flags:0x41000
No pixel format specified, rgb24 for H.264 encoding chosen.
Use -pix_fmt yuv420p for compatibility with outdated media players.
[libx264rgb @ 0x1ecf020] using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64 SlowShuffle
[libx264rgb @ 0x1ecf020] profile High 4:4:4 Predictive, level 3.2, 4:4:4 10-bit
[libx264rgb @ 0x1ecf020] 264 - core 144 r2525+2 6a4fca8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=0 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=0 chroma_qp_offset=0 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=0 intra_refresh=0 rc=cqp mbtree=0 qp=0
Output #0, matroska, to 'lossless.rgb.mkv':
Metadata:
encoder : Lavf56.18.101
Stream #0:0: Video: h264 (libx264rgb) (H264 / 0x34363248), rgb24, 1280x720, q=-1--1, 50 fps, 1k tbn, 50 tbc
Metadata:
encoder : Lavc56.20.100 libx264rgb
Stream mapping:
Stream #0:0 -> #0:0 (sgi (native) -> h264 (libx264rgb))
Press [q] to stop, [?] for help
No more output streams to write to, finishing.
Segmentation fault (core dumped)
मैं रिपोर्ट करता हूँ कि ऊपर।
वैसे भी, यह पता चला है कि अपने आप को ffmpeg के लिए दोहरी-गहराई वाले वातावरण का निर्माण करना बहुत आसान था, या कोई अन्य प्रोग्राम जिसे आप libx264, libx265, और कुछ भी चाहते हैं के उच्च-बिट-गहराई-संकलित संस्करणों के साथ चलाना चाहते हैं। । (इसीलिए मैंने इसे "हाईडेप" कहा, न कि छोटे नाम के लिए "10 बिट"। "
संपादित करें का अंत: नीचे यहाँ मेरे ramblings recompiling के बिना कर रहे हैं। और win64 के लिए ffmpeg को कैसे संकलित करें, इसके बारे में एक अच्छा सा
खुद की कोशिश की, क्योंकि आप एक cmdline कि x264 के लिए उच्च बिट गहराई इनपुट खिलाने की कोशिश नहीं की थी।
ffmpeg पिक्सेल प्रारूप नाम ( ffmpeg -pix_fmts
) केवल एक व्यवस्था निर्दिष्ट नहीं करते हैं, वे एक सटीक बिट व्यवस्था में मैप करते हैं, और इस प्रकार प्रत्येक प्रारूप + बिट-डेप्थ कॉम्बो का एक अलग नाम है। मुझे लगता है कि आप -pix_fmt yuv422p
"इनपुट के रूप में एक ही बिट गहराई में 422 कन्वर्ट करने के लिए" मतलब की उम्मीद कर रहे थे ।
विकिपीडिया का कहना है कि H.264 केवल Hi444PP के साथ 8-14 बिट गहराई का समर्थन करता है, अन्य केवल 10bit तक हैं। Hi444PP एकमात्र ऐसी प्रोफ़ाइल है जो भविष्य कहनेवाला दोषरहित कोडिंग का समर्थन करती है, जिसका उपयोग x264 -qp 0
या के लिए करता है -crf 0
। संपादित करें: AFAICT, x264 अभी भी केवल 8, 9 या 10 बिट के लिए संकलित होने का समर्थन करता है।
वैसे भी, यहाँ कमांड से बेकार आउटपुट का एक गुच्छा है जो काम नहीं करता है क्योंकि मैंने अपने स्थानीय x264 को फिर से नहीं किया है। (लेकिन यह x264 recompiled के साथ काम करना चाहिए। मैं इस जवाब को संपादित कर सकता हूं अगर मैं खुद इसके साथ खेलना चाहता हूं।)
ffmpeg -v verbose -framerate 50 -f image2 -pattern_type glob -i ./3_DucksTakeOff_720p50_CgrLevels_SINC_FILTER_SVTdec05_/'*'.sgi -c:v libx264 -pix_fmt yuv420p10le -profile high10 yuv-high.mkv
ffmpeg version N-68044-gb9dd809 Copyright (c) 2000-2015 the FFmpeg developers
built on Jan 14 2015 23:21:08 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
configuration: --enable-gpl --enable-version3 --enable-nonfree --disable-doc --disable-ffserver --enable-libbluray --enable-libschroedinger --enable-libtheora --enable-libx264 --enable-libx265 --enable-libmp3lame --enable-libopus --enable-libwebp --enable-libvpx --disable-outdev=oss --disable-indev=oss --disable-encoder=vorbis --enable-libvorbis --enable-libfdk-aac --disable-encoder=aac --disable-decoder=jpeg2000 --enable-libvidstab
libavutil 54. 16.100 / 54. 16.100
libavcodec 56. 20.100 / 56. 20.100
libavformat 56. 18.101 / 56. 18.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 7.101 / 5. 7.101
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 3.100 / 53. 3.100
Input #0, image2, from './3_DucksTakeOff_720p50_CgrLevels_SINC_FILTER_SVTdec05_/*.sgi':
Duration: 00:00:10.00, start: 0.000000, bitrate: N/A
Stream #0:0: Video: sgi, rgb48be, 1280x720, 50 tbr, 50 tbn, 50 tbc
Please use -profile:a or -profile:v, -profile is ambiguous
File 'yuv-high.mkv' already exists. Overwrite ? [y/N] y
[graph 0 input from stream 0:0 @ 0x24797e0] w:1280 h:720 pixfmt:rgb48be tb:1/50 fr:50/1 sar:0/1 sws_param:flags=2
Incompatible pixel format 'yuv420p10le' for codec 'libx264', auto-selecting format 'yuv420p'
[auto-inserted scaler 0 @ 0x24938c0] w:iw h:ih flags:'0x4' interl:0
[format @ 0x2494680] auto-inserting filter 'auto-inserted scaler 0' between the filter 'Parsed_null_0' and the filter 'format'
[auto-inserted scaler 0 @ 0x24938c0] w:1280 h:720 fmt:rgb48be sar:0/1 -> w:1280 h:720 fmt:yuv420p sar:0/1 flags:0x4
[libx264 @ 0x248eda0] using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64 SlowShuffle
[libx264 @ 0x248eda0] profile High, level 3.2
[libx264 @ 0x248eda0] 264 - core 144 r2525+2 6a4fca8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, matroska, to 'yuv-high.mkv':
Metadata:
encoder : Lavf56.18.101
Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuv420p, 1280x720, q=-1--1, 50 fps, 1k tbn, 50 tbc
Metadata:
encoder : Lavc56.20.100 libx264
Stream mapping:
Stream #0:0 -> #0:0 (sgi (native) -> h264 (libx264))
Press [q] to stop, [?] for help
No more output streams to write to, finishing.e=00:00:09.02 bitrate=18034.6kbits/s
frame= 500 fps=6.6 q=-1.0 Lsize= 21568kB time=00:00:09.96 bitrate=17739.6kbits/s
video:21564kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.020773%
Input file #0 (./3_DucksTakeOff_720p50_CgrLevels_SINC_FILTER_SVTdec05_/*.sgi):
Input stream #0:0 (video): 500 packets read (2765056000 bytes); 500 frames decoded;
Total: 500 packets (2765056000 bytes) demuxed
Output file #0 (yuv-high.mkv):
Output stream #0:0 (video): 500 frames encoded; 500 packets muxed (22081186 bytes);
Total: 500 packets (22081186 bytes) muxed
[libx264 @ 0x248eda0] frame I:2 Avg QP:29.33 size:131874
[libx264 @ 0x248eda0] frame P:257 Avg QP:31.07 size: 75444
[libx264 @ 0x248eda0] frame B:241 Avg QP:33.54 size: 10073
[libx264 @ 0x248eda0] consecutive B-frames: 3.6% 96.4% 0.0% 0.0%
[libx264 @ 0x248eda0] mb I I16..4: 0.1% 71.9% 28.0%
[libx264 @ 0x248eda0] mb P I16..4: 0.0% 4.5% 1.1% P16..4: 36.1% 37.6% 19.6% 0.0% 0.0% skip: 1.0%
[libx264 @ 0x248eda0] mb B I16..4: 0.0% 0.2% 0.1% B16..8: 34.3% 2.6% 1.1% direct: 9.6% skip:52.2% L0: 6.2% L1:46.6% BI:47.2%
[libx264 @ 0x248eda0] 8x8 transform intra:78.4% inter:60.4%
[libx264 @ 0x248eda0] coded y,uvDC,uvAC intra: 98.3% 95.3% 85.9% inter: 51.7% 34.8% 12.8%
[libx264 @ 0x248eda0] i16 v,h,dc,p: 5% 77% 4% 14%
[libx264 @ 0x248eda0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 2% 43% 11% 3% 5% 2% 16% 2% 16%
[libx264 @ 0x248eda0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 3% 40% 9% 4% 6% 3% 17% 2% 16%
[libx264 @ 0x248eda0] i8c dc,h,v,p: 47% 40% 6% 7%
[libx264 @ 0x248eda0] Weighted P-Frames: Y:1.2% UV:0.4%
[libx264 @ 0x248eda0] ref P L0: 70.9% 26.5% 1.8% 0.7% 0.0%
[libx264 @ 0x248eda0] ref B L0: 99.5% 0.5%
[libx264 @ 0x248eda0] kb/s:17664.40
$ x264 --fullhelp | less
...
Output bit depth: 8 (configured at compile time)
ध्यान दें Incompatible pixel format 'yuv420p10le' for codec 'libx264', auto-selecting format 'yuv420p'
लाइन।
शायद मुझे ज़रूरत नहीं थी -profile
, और एक उच्च-बिट गहराई x264 के साथ, यह सिर्फ काम करेगा। (और संभावित रूप से 444 10bit चुनें, जिसे ffmpeg कॉल करता है yuva444p10le
।) मुझे लगता है कि उच्च बिट गहराई x264 स्वीकार कर सकता है yuv444p14le
, लेकिन फिर भी केवल 10bit h.264 का उत्पादन करेगा। Cmdline x264 --fullhelp
8 से 10 तक आउटपुट बिट डेप्थ के बारे में बहुत स्पष्ट है, अधिक नहीं। अजीब है कि -profile high10
सिर्फ चुपचाप 8bit x264 द्वारा नजरअंदाज कर दिया है।
आंतरिक रूप से, उच्च बिट गहराई के लिए संकलित x264 किसी भी 10 बिट डेटा को संग्रहीत करने के लिए 16bpp का उपयोग करता है, इसलिए यह संभवतः 16 बिट मूल्यों के साथ गति खोज और इतने पर करता है। और 10 बिट के बजाय 16 बिट उच्च डीसीटी हो सकता है, जब तक कि 6 बिट्स को अनदेखा करने से प्राप्त होने की गति नहीं है। यदि आप DCT से पहले 10bit तक चक्कर लगाते हैं, तो इससे थोड़ा अलग DCT गुणांक उत्पन्न हो सकता है। (तो आप संभावित रूप से x264 को खिलाने से पहले 10bit से नीचे परिवर्तित करने से अलग उत्पादन प्राप्त करते हैं, बनाम इसे 12, 14 या 16bit दे रहे हैं।) मुझे चाहिए। कोड को देखें या सामान बनाने से पहले इसे आज़माएँ, हालाँकि। इस अनुच्छेद पर भरोसा मत करो। : पी
(संपादित करें: ffmpeg 102 प्रति घटक से अधिक x264-10bit को कुछ भी नहीं खिलाएगा। यह बिटकॉइन का उपयोग स्वयं की गहराई को कम करने के लिए करेगा।)
मुझे आश्चर्य है कि वैश्विक चर और एपीआई कार्यों के लिए अलग-अलग नामों का उपयोग करने के लिए x264 और x265 को पैच करना कितना कठिन होगा, जब उच्च-बिट-गहराई के लिए संकलित किया जाता है। तब आप एक ही बार में दोनों संस्करणों का निर्माण कर सकते हैं, और उन दोनों के खिलाफ जुड़े fmmpeg है। Ffmpeg libx264
और libx264rgb
रैपर इनपुट स्ट्रीम के आधार पर एपी के उपयुक्त संस्करण को कॉल करने का ध्यान रख सकते हैं। (अन्यथा आपको ffmpeg में कुल 4 विभिन्न x264 "कोडेक्स" के लिए -c:v libx264-deep
या libx264rgb-deep
, की आवश्यकता होगी ।)
खिड़कियों के लिए संकलन ffmpeg कैसे पार करें
संपादित करें: विंडोज़ के लिए, मुझे नहीं लगता कि LD_LIBRARY_PATH
libx264 DLL के लिए कुछ भी सुविधाजनक है , इसलिए आपका सबसे अच्छा दांव अभी भी एक उच्च-बिट-डेप्थ स्टैटिक बाइनरी का निर्माण करना है, और सामान्य उपयोग के लिए एक और है। उच्च-गहराई libx264 बिल्कुल सामान्य गहराई h.264 आउटपुट नहीं कर सकता। सिर्फ स्पीड पेनल्टी नहीं, यह सिर्फ नहीं हो सकता।
खिड़कियों के लिए अपने स्वयं के ffmpeg (स्थिर बाइनरी) को संकलित करने का सबसे आसान तरीका https://github.com/rdp/ffmpeg-windows-build-helpers है । लिनक्स मशीन पर रेपो क्लोन को दबाएं (या शायद OS X की तरह काम करने वाले gcc के साथ एक और सिस्टम?), फिर
./cross_compile_ffmpeg.sh --high-bitdepth=y --disable-nonfree=n --build-choice=win64
पहले रन के लिए लगभग 8 घंटे का समय लगा, क्योंकि इसने स्रोत से mingw-cross-compile GCC का निर्माण किया, साथ ही सब कुछ। (यदि आप मूल रूप से एक खराब संकलक के साथ इसे संकलित कर रहे थे, तो बूटस्ट्रैप के लिए कई बार खुद को पुनर्निर्माण करने के लिए चूक।)
आप बिल्ड स्क्रिप्ट को अपडेट कर सकते हैं git pull
, और इसे फिर से चलाना, ffmpeg, x264, x265 के लिए नवीनतम गिट अपडेट को खींच लेंगे, और शायद कुछ अन्य प्रोजेक्ट्स जो इसे स्रोत से संकलित करते हैं। (अधिकांश के लिए यह केवल टैरोबॉल डाउनलोड करता है।)
मेरा लिनक्स डेस्कटॉप इसकी उम्र दिखा रहा है। मैं एक w का उपयोग करता हूं जिसका उपयोग मैं ज्यादातर खेलों के लिए करता हूं। जब से मैंने वीडियो एन्कोडिंग के साथ खिलवाड़ करना शुरू किया है, मुझे इसका क्वाड-कोर सैंडब्रिज काफी उपयोगी लगता है। x265 के लिए। संभवतः X265 के कुछ कार्यों में AVX / SSE4 के लिए केवल asm संस्करण हैं, इसलिए यह मेरी SSSE3 लिनक्स मशीन (Conroe) पर C पर वापस आ रहा है। यह या यह 1fps पर अधिक ध्यान देने योग्य है ...