web-dev-qa-db-ja.com

再エンコードせずにmp4ビデオを回転させる

Debian WheezyシステムでNexus 4で撮影したビデオを回転させる方法を探しています。ビデオはポートレートモードで撮影されており、それらを横向きモードに回転させたいと思います。好ましくは、回転はコマンドライン駆動です。

私は良い解決策を示唆しているいくつかの以前の質問を見つけましたが、私はそれをうまく機能させることができないようです。

最初にこの質問がありました: FFmpegでビデオを回転させる

しかし、ffmpegは時代遅れであり、avconvを使用する必要があることを示しています。この質問は、前進する方法の詳細を示しています。 https://askubuntu.com/questions/269429/how-can-i-rotate-video-by-180-degrees-with-avconv

このため、次のコマンドを使用しました。

avconv -i original.mp4 -vf "transpose=1" -codec:v libx264 -preset slow -crf 25 -codec:a copy flipped.mp4

ただし、これは骨の折れるほど遅く(最後のテストでは3分未満の映像で6時間以上かかった)、再生可能な映画にはなりません。また、Mbレート>レベル制限を示すログ出力でエラーが発生します。

ここで再エンコードに問題がありますか?ローテーションを適用する前に、まず携帯電話から別のより「実行可能な」エンコードにビデオを再エンコードする必要がありますか?または、別の重要なポイントがありませんか?

68
stedes

フラグを考慮しているメディアプレーヤーがファイルを回転させて再生するようにメタデータを変更する場合は、次のようにしてください。

ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=90 output.mp4

見つかったとおり stackoverflowの他の場所

98
ruediger05

Rotation = 0で問題が修正されました。ポートレートモードでビデオの録画を開始し、ミスを認識し、すぐに携帯電話を横向きにして録画を続けました。私のiphoneは、ビデオ全体の肖像としてビデオをマークしていました。

ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=0 output.mp4

それを修正しました。

46
Mangor

FFmpegおよび同様のプログラム メタデータの変更-map_metadataオプションを使用しても。 exiftoolは、回転行列と回転フラグを読み取ることができますが、書き込むことはできません。

真のロスレス(メタデータを含む)回転を取得するために解決策が見つからなかったため、16進エディター(例 HxD )を取得し、回転したビデオファイルを分析しました。

MP4の真のロスレス回転:

  • 16進エディタでmp4を開き、videを検索して、ビデオトラックのメタデータを見つけます
  • 上記のいくつかの行(私のファイルのほとんどは9、時には12)では、trak...\tkhdが表示されるはずです。
  • 間に@記号が必要です(HEX 40)
  • 回転行列が保存される前の2行
  • 回転なし:

    00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    40
    
  • 180°:

    FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    40
    
  • 90°cw:

    00 00 00 00 00 01 00 00 00 00 00 00 FF FF 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    40 
    
  • 90°ccw:

    00 00 00 00 FF FF 00 00 00 00 00 00 00 01 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    40
    

必要に応じてファイルを変更します。ローテーションフラグをサポートするプレーヤーでローテーションする必要があります(現在のほとんどのプレーヤーがサポートしています)。

ビデオにステレオオーディオが含まれる場合、これは明らかに切り替えられないため、サウンドをビデオの回転(180°)に一致させたい場合は、左右のチャンネルを切り替える必要があります。

20
aXeL-HH

質問で触れたことはいくつかあります。

  1. 再エンコードせずに回転できる可能性はほとんどありません。そのルールの例外(MJPEGコーデック)は既に指摘されていますが、それを使用している可能性は低いため、この質問の範囲を超えています。この機能の理由は、メタデータを介してJPEGを変換できることです。したがって、メタデータの回転があるコンテナを見つけることができれば、回転することはできますが、これまでのところ何も存在していません(または十分に広まっています)。
  2. ビデオの3分間を回転して再エンコードするのに時間がかかった場合、問題は巨大解像度にある可能性があります。そして、私は巨大avprobe original.mp4の出力を提供して、確認できるようにしてください。
  3. Libav対FFmpegの議論は非常に非生産的です(すでにここに投稿されているfudの量で確認できます)。基本的に何が起こったのかは、一部の開発者が何らかの方法でプロジェクトを分割したことでした.FFmpegプロジェクトが名前を維持することができたという事実は単なるまぐれであり、1つのプロジェクトをオリジナルと別のフォークと呼ぶことは意味がありません。プロジェクト間の違いは、主に開発スタイルと哲学にあります。 FFmpegをよりオープンソース、Libavをより多くのフリーソフトウェアとみなすなら、あなたはそんなに間違っているわけではありません。合理的な人々は、最終的に開発者が自分の感覚に達し、おそらくプロジェクトをマージするのではなく、より大きな範囲で協力することを望んでいます。 Ubuntuが最初に登場したとき、すべてのDebian GNU/Linuxチャットで「UbuntuはDebianではありません!!!!!!!」という大きなメッセージがありましたが、今では状況は落ち着いており、両者は非常に満足しています別の。
3
v010dya

この回答は、LordNeckbeardから提供されたコメントの要約です。

エンコードせずに回転

次の場合を除き、再エンコードせずに回転することはできません。

  • 入力はMJPEGです
  • 再生時に回転します

正しいffmpegを使用してエンコードして回転する

これに必要な手順を正しく理解するには、まずこの質問を読むか、少なくともこの質問をざっと読む必要があります。

ffmpeg、libav、avconvの違いと類似点は何ですか?

概要:avconvはffmpegのフォークです。debianのメンテナーはavconvを選択しました。ソースから正しいffmpegをコンパイルする必要があります。

次のステップでは、ソースから正しいffmpegをコンパイルします。詳細は次のとおりです。

Debian用ffmpegのコンパイルガイド

最後のステップは、他の投稿にあるコマンドを使用することです。

FFmpegでビデオを180°(垂直/逆さまに)反転するには? または FFmpegでビデオを回転

要約:ffmpeg -vfilters "rotate = 90" -i input.mp4 output.mp4

1
stedes