![在 ffmpeg 中对 360 视频使用视频滤镜时保留等距矩形边数据](https://linux22.com/image/1570612/%E5%9C%A8%20ffmpeg%20%E4%B8%AD%E5%AF%B9%20360%20%E8%A7%86%E9%A2%91%E4%BD%BF%E7%94%A8%E8%A7%86%E9%A2%91%E6%BB%A4%E9%95%9C%E6%97%B6%E4%BF%9D%E7%95%99%E7%AD%89%E8%B7%9D%E7%9F%A9%E5%BD%A2%E8%BE%B9%E6%95%B0%E6%8D%AE.png)
我有一个 360° 视频,想使用 ffmpeg 将其横向移动,以便在播放器中打开视频时默认视点会移动。我发现了这个问题 (如何在 ffmpeg 中水平偏移视频?) 帮助我完成了转换,但是当我使用此方法来转换视频时,视频的侧面数据(包含等距矩形格式的信息)就消失了。
ffprobe
这是我的输入文件中使用的相关部分:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf57.83.100 Duration: 00:00:05.01, start: 0.000000, bitrate: 57592 kb/s Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuvj420p(pc), 3840x1920 [SAR 1:1 DAR 2:1], 57515 kb/s, 29.95 fps, 29.95 tbr, 29948 tbn, 59.90 tbc (default) Metadata: handler_name : VideoHandler Side data: spherical: equirectangular (0.000000/0.000000/0.000000)
然后我使用上面链接中描述的覆盖过滤器,如下所示:
ffmpeg -i test.mp4 -filter_complex "[0:v][0:v]overlay=960:0[bg]; [bg][0:v]overlay=960-W,format=yuvj420p[out]" -map "[out]" -map 0:a -c:v libx264 -crf 0 -c:a copy test_shifted.mp4
生成的文件中不包含等距矩形边数据:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test_shifted.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf57.83.100 Duration: 00:00:05.01, start: 0.000000, bitrate: 245636 kb/s Stream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuvj420p(pc), 3840x1920 [SAR 1:1 DAR 2:1], 245758 kb/s, 29.95 fps, 29.95 tbr, 14974 tbn, 59.90 tbc (default) Metadata: handler_name : VideoHandler
我研究了这个问题(https://stackoverflow.com/questions/44760588/preserving-side-data-information-for-360-video-transcoding-using-ffmpeg) 并尝试了那里提到的方法(keepside
标志,-strict unofficial
),但问题本身涉及流复制,并且在视频流上使用过滤器时似乎都不起作用。
我正在使用ffmpeg version 3.4.4-0ubuntu0.18.04.1
。如果有人能帮助我保留我的元数据,我将不胜感激!