video captured from iphone gets rotated when converted to .mp4 using ffmpeg

后端 未结 10 1754
名媛妹妹
名媛妹妹 2020-12-01 02:31

When I try to upload videos captured from my iPhone in my app, the server performs a conversion from .mov to .mp4 so that it can be played in other platforms. However the pr

10条回答
  •  有刺的猬
    2020-12-01 02:50

    So - I too ran into this issue, and here my $0.02 on it:

    1.) some videos DO have Orientation/Rotation metadata, some don't: MTS (sony AVHCD) or the AVIs I have - DO NOT have an orientation tag. MOVs and MP4s (ipad/iphone or samsung galaxy note2) DO HAVE it.

    you can check the setting via 'exiftool -Rotation file'.
    My videos often have 90 or 180 as the rotation.
    

    2.) ffmpeg - regardless of the man-page with the metadata-tag, just doesn't EVER seem to set it in the output file. - the rotation-tag is ALWAYS '0'. it correctly reports it in the output - but it's never set right to be reported by exiftool. - But hey - at least it's there and always 0.

    3.) rotation angles: if you want rotate +/- 90: transpose=1 for clockwise 90, 2 ccw now if you need 180 degree - just add this filter TWICE. remember - it's a filter-chain you specify. :-) - see further down.

    4.) rotate then scale: this is tricky - because you quickly get into MP4 output format violations. Let's say you have a 1920x1080 MOV. rotate by 90 gives 1080x1920 then we rescale to -1:720 -> 1080*(720/1920) = 405 horiz And 405 horizontal is NOT divisable by 2 - ERROR. fix this manually. FIXING THIS automatically - requires a bit of shell-script work.

    5.) scale then rotate: you could do it this way - but then you end up with 720x1280. yuck. But the filter-example here would be: "-vf yadif=1,scale=-1:720,transpose=1" It's just not what I want - but could work quite OK.

    Putting it all together: - NOTE - 'intentionally WRONG Rotation-tag', just to demonstrate - it won't show up AT ALL in the output ! This will take the input - and rotate it by 180 degree, THEN RESCALE IT - resetting the rotation-tag. - typically iphone/ipad2 can create 180deg rotated material. you just can leave '-metadata Rotation=x' out the line...

    /usr/bin/ffmpeg -i input-movie.mov -timestamp 2012-06-23 08:58:10 -map_metadata 0:0 -metadata Rotation=270 -sws_flags lanczos -vcodec libx264 -x264opts me=umh -b 2600k -vf yadif=1,transpose=1,transpose=1,scale=1280:720 -f mp4 -y output-movie.MP4

    I have multiple devices - like a settop box, ipad2, note2, and I convert ALL my input-material (regardless whether it's mp4,mov,MTS,AVI) to 720p mp4, and till now ALL the resulting videos play correct (orientation,sound) on every dev.

    Hope it helps.

提交回复
热议问题