web-dev-qa-db-ja.com

iPhoneからキャプチャしたビデオは、ffmpegを使用して.mp4に変換すると回転します

IPhoneからキャプチャしたビデオをアプリにアップロードしようとすると、サーバーが.movから.mp4に変換して、他のプラットフォームで再生できるようにします。ただし、問題は、ビデオを(縦向きで)撮影し、それを(ffmpegを使用して)変換し、サーバーから再生すると、回転して表示されることです。何か案が?

19
aqs

Ffmpegのバージョンとコンパイル方法に応じて、次のいずれかが機能します...

ffmpeg -vfilters "rotate=90" -i input.mov output.mp4

...または...

ffmpeg -vf "transpose=1" -i input.mov output.mp4
9
Kirby Todd

FFMPEGは、デフォルトの動作を、回転メタデータを使用してビデオソースを自動回転するように変更しました 2015年 。これはv2.7としてリリースされました。

Ffmpegのバージョンがv2.7以降で、ローテーションメタデータが尊重されていない場合は、メタデータに基づくカスタムローテーションを使用していることが問題である可能性があります。これにより、同じロジックが2回適用され、ローテーションが変更またはキャンセルされます。

カスタムローテーションの削除(推奨)に加えて、-noautorotateで自動ローテーションをオフにするオプションがあります。

ffmpeg -noautorotate -i input.mp4...

これは一部の古いリリースでも機能します。

28
Albin

また、.movをローテーションするときに、QuickTime固有のメタデータを削除することもできます。これにより、VLCとQuickTimeでビデオが同じように回転するようになります。

ffmpeg -i in.mov -vf "transpose=1" -metadata:s:v:0 rotate=0 out.mov

-metadataオプションに関するドキュメントは次のとおりです( http://ffmpeg.org/ffmpeg.html から):

-metadata[:metadata_specifier] key=value (output,per-metadata)

メタデータのキーと値のペアを設定します。

オプションのmetadata_specifierを指定して、ストリームまたはチャプターにメタデータを設定できます。詳細については、-map_metadataのドキュメントをご覧ください。

このオプションは、-map_metadataで設定されたメタデータをオーバーライドします。空の値を使用してメタデータを削除することもできます。

たとえば、出力ファイルにタイトルを設定するには、次のようにします。

 ffmpeg -i in.avi -metadata title="my title" out.flv 

最初のオーディオストリームの言語を設定するには:

 ffmpeg -i INPUT -metadata:s:a:1 language=eng OUTPUT
19
maartencls

完全を期すために、これが起こっている理由は、iPhoneが実際にビデオを1つの固定された方向でのみキャプチャするためです。測定された方向は、アップル固有のメタデータに記録されます。

その結果、Quicktime Playerはメタデータを読み取り、再生中にビデオを正しい方向に回転しますが、他のソフトウェア(VLCなど)はそれを行わず、実際のコーデックデータで方向付けされたように表示します。

これが理由です rotate=90(またはvflip、またはtransposeなど)は、一部の人には機能しますが、他の人には機能しません。記録中のカメラの保持方法に応じて、必要な回転は90度、180度、または270度です。メタデータを読み取らずに、どれだけの回転が必要かを推測しているだけで、あるビデオを修正する変更は別のビデオでは失敗します。

18
blahdiblah

vflipフィルターを使用する

ffmpeg -i input.mov -vf "vflip" output.mp4

回転が機能せず、transpose = 1が90度回転していた

6
user984677

だから-私もこの問題に遭遇しました、そしてここに私の$ 0.02:

1.)一部のビデオには方向/回転メタデータがあり、一部にはありません:MTS(sony AVHCD)または私が持っているAVI-方向タグがありません。 MOVとMP4(ipad/iphoneまたはsamsung galaxy note2)をお持ちください。

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

2.)ffmpeg-メタページタグのあるmanページに関係なく、出力ファイルに設定されていないようです。 -rotation-tagは常に「0」です。それは出力でそれを正しく報告します-しかし、それはexiftoolによって報告される権利を決して設定しません。 -しかし、ちょっと-少なくともそれはあり、常に0です。

3.)回転角度:+/- 90回転したい場合:時計回りに90の転置= 1、180度が必要な場合は2 ccw-このフィルターを2回追加します。覚えておいてください-それはあなたが指定するフィルターチェーンです。 :-)-さらに下を参照してください。

4.)回転してからスケーリングする:これはトリッキーです-MP4出力フォーマット違反にすぐに入るからです。 1920x1080 MOVがあるとします。 90度回転すると1080x1920が得られ、-1:720-> 1080 *(720/1920)= 405 horizに再スケーリングされ、405水平は2-エラーで割り切れません。これを手動で修正します。これを自動的に修正する-シェルスクリプトの作業が少し必要です。

5.)拡大縮小して回転:この方法で実行できますが、最終的には720x1280になります。うん。ただし、ここでのフィルターの例は次のようになります。

すべてをまとめる:-注-「意図的に間違った回転タグ」、例として-表示されないAT ALLが出力に表示されます!これは入力を取ります-そしてそれを180度回転させます、それを縮小します-回転タグをリセットします-通常、iphone/ipad2は180度回転した素材を作成できます。'-metadata Rotation = x 'を行から外してください...

/ 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:72 -f mp4 -y output-movie.MP4

私は複数のデバイスを持っています-セットトップボックス、ipad2、note2のように、すべての入力素材(mp4、mov、MTS、AVIに関係なく)を720p mp4に変換し、今までのところすべての結果のビデオは正しく再生されます(方向、サウンド)すべての開発者に。

それが役に立てば幸い。

4
user2974635

トピックは古いですが。これが誰かを助けることを願っています:

Ffmpegの最新バージョンを取得する: https://www.ffmpeg.org/download.html

私のために働いたコマンド(180度反転):

ffmpeg -noautorotate -i input.mp4 -filter:v "rotate=PI" output.mp4

度が-filter:v "PI/180*degrees"によって決定されるとき

例:45度の場合は-filter:v "45*PI/180"

素敵な説明はこちら https://superuser.com/questions/578321/how-to-rotate-a-video-180-with-ffmpeg

0
xShen

または...既存のファイルのタグを変更するだけです:

現在の回転を読む

exiftool -Rotation <file>

次に、例えば:

exiftool -Rotation=180 <file>

180に設定する

0
lbt

私はIpad3でビデオを撮影しました、そしてそれは私がすべてのAppleデバイスのいくつかのバージョンでの一般的な状況だと思います。それ以外に、3分の長いMOVファイル(1920x1090)サイズが約500 Mbだったため、簡単に共有できませんでした。MP4に変換し、stackoverflowで見つけたすべてのスレッドを分析する必要がありました。これが、使用したffmpegの最終的なコード文字列です( ffmpegバージョン2.8.4):

ffmpeg -i IN.MOV -s 960x540 -metadata:s:v rotate="0" -acodec libmp3lame OUT.mp4

サイズ変更やオーディオコーデックの変更が必要ない場合は、 '-metadata:s:v rotate = "0"'のままにしておいてもかまいません。ビデオのサイズを変更すると、幅と高さが4に完全に分割されることに注意してください。

0
Paul Pi

IPhoneからポートレート形式のビデオをWebページに含めるために、.mp4ファイルをポートレート表示で取得するための次のレシピを見つけました。

ステップ1:QuickTime Playerで、ファイルを480pにエクスポートします(720pまたは1080pも同様に機能すると思います)。再び.movファイルを取得します。

手順2:QT Playerで新しいファイルを取得し、「iPad、iPhone…」にエクスポートします。 .m4vファイルを取得します。

ステップ3:私はMiro Video Converterを使用していますが、.mp4ファイルを取得するために、おそらくすぐに利用できるコンバータがすべて機能します。

(長巻き)チャームのように機能します。

0
Lubin