2017-06-26 4 views
7

を使用して360ビデオトランスコーディングのための側のデータ情報を保存します。しかし、出力ファイルは、360ビデオメタデータを持つ「サイドデータ」を削除しているようです。は(これは必要条件である)私は、ビットレートを減らすために、主に、(今のところ、ギアVRで再生する)のffmpegを使用して360ビデオをトランスコードしようとしていますFFmpegの

入力ファイル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 

またはアドバイスは、サイドのデータがsphericalパケット側-データはMP4でそれを書くことではなく、サポートされる最新のffmpegのバージョンでは

+0

は-fflagsが入力または出力フラグとして仕事をkeepside' 'していますか? – Mulvya

+0

@Mulvyaのおかげで、Iは、入力と出力の両方のフラグとして今それを試してみましたが、出力のffprobeは、(側のデータ部なし)も同じです。 'ffmpeg-keeplags -i .....'と 'ffmpeg -i input.mp4 -vf ..... -fflags keepside -y test.mp4' – Icareus

+0

@ jeffcook2150短いサンプル入力ファイルがありますか?共有することができますか? – LordNeckbeard

答えて

2

をいただければ幸い維持するために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.c機能mov_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

ありがとう!私もgitビルドでこれを試しましたが、私は '非厳密な非公式 'を欠いていました。 ffmpeg 3.3からサポートされているようです。 – jeffcook2150

+0

@ jeffcook2150ようこそ。他のフォーマット(Matroskaなど)にリックスアウトした場合、コンプライアンスオプションは必要ありません。 – aergistal

関連する問題