2017-06-26 47 views
7

का उपयोग कर 360 वीडियो ट्रांसकोडिंग के लिए साइड डेटा जानकारी को संरक्षित करना मैं मुख्य रूप से बिटरेट को कम करने के लिए ffmpeg (गियर वीआर पर खेलने के लिए) का उपयोग कर एक 360 वीडियो ट्रांसकोड करने का प्रयास कर रहा हूं (यह एक आवश्यकता है)। लेकिन आउटपुट फ़ाइल "साइड डेटा" को हटाने के लिए प्रतीत होती है जिसमें 360 वीडियो मेटाडेटा है।एफएफएमपीई

इनपुट फ़ाइल ffprobe परिणाम (ध्यान दें साइड डेटा अनुभाग):

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4': 
Metadata: 
major_brand  : mp42 
minor_version : 0 
compatible_brands: mp42mp41 
creation_time : 2016-10-28T10:41:42.000000Z 
Duration: 00:02:09.56, start: 0.000000, bitrate: 20116 kb/s 
Stream #0:0(eng): Video: h264 (Main) (avc1/0x31637661), yuv420p(tv, bt709), 2560x1280, 19797 kb/s, 50 fps, 50 tbr, 50k tbn, 100 tbc (default) 
Metadata: 
    creation_time : 2016-10-28T10:41:42.000000Z 
    handler_name : Alias Data Handler 
    encoder   : AVC Coding 
Side data: 
    spherical: equirectangular (0.000000/0.000000/0.000000) 
Stream #0:1(eng): Audio: aac (LC) (mp4a/0x6134706D), 48000 Hz, stereo, fltp, 317 kb/s (default) 
Metadata: 
    creation_time : 2016-10-28T10:41:42.000000Z 
    handler_name : Alias Data Handler 

आदेश ट्रांसकोड करने की कोशिश की (बिटरेट और पूर्व निर्धारित के मूल्यों सिर्फ परीक्षण के लिए कर रहे हैं):

ffmpeg -i <input_file_name> -vf scale=2560x1280,setdar=16:9 -r 30 -c:v libx264 -b:v 500k -pix_fmt yuv420p -preset ultrafast -c:a aac -b:a 192K -map_metadata 0:s:v:0 -write_id3v2 1 -y test.mp4 
ffmpeg -i <input_file_name> -vf scale=2560x1280,setdar=16:9 -r 30 -c:v libx264 -b:v 500k -pix_fmt yuv420p -preset ultrafast -c:a aac -b:a 192K -map_metadata 0:s -y test.mp4 
ffmpeg -i <input_file_name> -vf scale=2560x1280,setdar=16:9 -r 30 -c:v libx264 -b:v 500k -pix_fmt yuv420p -preset ultrafast -c:a aac -b:a 192K -map_metadata 0 -y test.mp4 
ffmpeg -i <input_file_name> -vf scale=2560x1280,setdar=16:9 -r 30 -c:v libx264 -b:v 500k -pix_fmt yuv420p -preset ultrafast -c:a aac -b:a 192K -y test.mp4 

प्रत्येक मामले में ffprobe test.mp4 गायब "साइड डेटा" अनुभाग दिखाता है:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4': 
Metadata: 
major_brand  : isom 
minor_version : 512 
compatible_brands: isomiso2avc1mp41 
creation_time : 2016-10-28T10:41:42.000000Z 
encoder   : Lavf57.71.100 
Duration: 00:02:09.57, start: 0.000000, bitrate: 708 kb/s 
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1/0x31637661), yuv420p, 2560x1280 [SAR 8:9 DAR 16:9], 507 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default) 
Metadata: 
    creation_time : 2016-10-28T10:41:42.000000Z 
    handler_name : VideoHandler 
Stream #0:1(und): Audio: aac (LC) (mp4a/0x6134706D), 48000 Hz, stereo, fltp, 193 kb/s (default) 
Metadata: 
    creation_time : 2016-10-28T10:41:42.000000Z 
    handler_name : SoundHandler 

कोई मदद या सलाह को संरक्षित करने के साइड डाटा

+0

क्या '-फ्लैग्स रखरखाव' इनपुट या आउटपुट फ्लैग के रूप में काम करता है? – Mulvya

+0

@Mulvya धन्यवाद, मैंने अब इनपुट और आउटपुट फ्लैग दोनों के रूप में इसे आजमाया लेकिन आउटपुट का एफएफप्रोब अभी भी समान है (साइड डेटा सेक्शन के बिना)। 'ffmpeg -fflags keepside -i .....' और 'ffmpeg -i input.mp4 -vf ..... -fflags keepside -y test.mp4' – Icareus

+0

@ jeffcook2150 क्या आपके पास एक छोटी नमूना इनपुट फ़ाइल है जो आप साझा कर सकते हैं? – LordNeckbeard

उत्तर

2

सराहना की जाएगी हाल ffmpeg संस्करणों spherical पैकेट पक्ष डेटा लेकिन MP4 में यह लिखने के लिए समर्थित है में ffmpeg पाने के लिए आप unnoficial या experimental करने के लिए मानक अनुपालन मोड सेट करने के लिए है:

ffmpeg -i R0010309_er.MP4 -c copy -strict unofficial spherical.mp4 

ffprobe spherical.mp4 2>&1 | grep -A1 Side 
Side data: 
    spherical: equirectangular (0.000000/0.000000/0.000000) 

प्रासंगिक कोड libavformat/movenc.cmov_write_video_tag में समारोह:

if (track->mode == MODE_MP4 && mov->fc->strict_std_compliance <= FF_COMPLIANCE_UNOFFICIAL) { 
     AVStereo3D* stereo_3d = (AVStereo3D*) av_stream_get_side_data(track->st, AV_PKT_DATA_STEREO3D, NULL); 
     AVSphericalMapping* spherical_mapping = (AVSphericalMapping*)av_stream_get_side_data(track->st, AV_PKT_DATA_SPHERICAL, NULL); 

     if (stereo_3d) 
      mov_write_st3d_tag(pb, stereo_3d); 
     if (spherical_mapping) 
      mov_write_sv3d_tag(mov->fc, pb, spherical_mapping); 
    } 
+0

धन्यवाद! मैंने इसे गिट बिल्ड के साथ भी करने की कोशिश की लेकिन मुझे '-स्ट्रा अनौपचारिक' याद आ रही थी। ऐसा लगता है कि यह ffmpeg 3.3 के बाद से समर्थित है। – jeffcook2150

+0

@ jeffcook2150 आपका स्वागत है। कृपया ध्यान दें कि यदि आप कभी भी किसी अन्य प्रारूप (जैसे Matroska) पर रीमक्स करते हैं तो आपको अनुपालन विकल्प की आवश्यकता नहीं है। – aergistal