Поворот mp4 видео без повторного кодирования

Я ищу способ повернуть видео, снятые с моим Nexus 4 на моем Debian Wheezy sytem. Видео снимаются в портретном режиме, и я хотел бы повернуть их в ландшафтный режим. Предпочтительно вращение управляется командной строкой.

Я нашел несколько предыдущих вопросов, которые намекают на хорошее решение, но мне не удается заставить его работать.

для начала был этот вопрос: поворот видео с 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

тем не менее, это кропотливо медленно (последний тест занял у меня более 6 часов менее 3 минут съемки) и не приводит к воспроизводимому фильму. Я также получаю ошибку в выходе журнала в котором говорится Mb Rate > level limit.

есть ли проблема здесь с перекодировкой ? Должен ли я сначала перекодировать видео с моего телефона на другую, более "работоспособную" кодировку перед применением поворотов? Или я упускаю еще один важный момент ?

спасибо заранее

5 ответов


Если вы просто хотите изменить метаданные таким образом, что mediaplayers, которые считают флаг играть файл повернут, попробуйте что-то вроде:

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

Как найти в другом месте на stackoverflow.


Rotation=0 Исправлена ошибка. Я начал записывать видео в портретном режиме, понял свою ошибку и сразу же повернул телефон к пейзажу, чтобы продолжить запись. Мой iphone отметил видео как портрет для всего видео.

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

исправил.


FFmpeg и подобных программ изменить метаданные даже . exiftool может читать матрицу вращения и флаг вращения, но не может написать его.

чтобы получить true без потерь (ВКЛ. метаданные), я не мог найти решение, поэтому я схватил шестнадцатеричный редактор (например,HxD) и проанализировал повернутые видеофайлы.

истинное вращение без потерь MP4:

  • открыть mp4 с шестнадцатеричным редактором и поиск vide чтобы найти метаданные видеотрека
  • некоторые строки выше (для моих файлов в основном 9, иногда 12) вы должны увидеть trak...\tkhd
  • между ними должна быть @ знак (HEX 40)
  • в двух строках перед ним хранится матрица вращения
  • нет вращение:

    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° по часовой стрелке:

    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°), вам нужно переключить левый и правый каналы.


есть несколько вещей, которые вы затронули в своем вопросе:

  1. почти нет шансов, что вы сможете вращаться без повторного кодирования. Исключение из этого правила (кодек MJPEG) уже было указано, но маловероятно, что вы его используете, поэтому оно выходит за рамки этого вопроса. Я упомяну, что причина этой способности заключается в том, что JPEG может быть преобразован с помощью метаданных. Таким образом, если вы сможете найти контейнер, который имеет метаданные вращение, вы сможете вращаться, но пока не существует (или достаточно широко распространены).
  2. если это заняло ваши часы, чтобы повернуть и повторно закодировать 3 минуты видео, то проблема может лежать на огромный. И я имею в виду огромный! Можете ли вы предоставить вывод avprobe original.mp4 чтобы это можно было установить.
  3. дебаты Libav против FFmpeg очень контрпродуктивны (вы можете видеть, что по количеству fud, размещенного здесь уже). В основном то, что произошло, было разделением проекта с некоторыми разработчиками, идущими в ту или иную сторону, тот факт, что проект FFmpeg сумел сохранить название, - это просто случайность, и нет смысла называть один проект оригинальным, а другой-вилкой. Различия между проектами в основном в стиле разработки и по философии. Если бы Вы охарактеризовали FFmpeg как более открытый исходный код и Libav как более свободное программное обеспечение, вы бы не ошиблись. Рациональные люди надеются, что со временем разработчики придут в себя и, возможно, не объединят проекты, а будут сотрудничать в большей степени. Когда Ubuntu вышел первоначально, в каждом чате Debian GNU/Linux были огромные сообщения по линии "Ubuntu-это не Debian!!!!!!!", но сейчас ситуация успокоилась, и обе стороны вполне довольны друг друга.

этот ответ является просто резюме комментариев, предоставленных LordNeckbeard.

поворот без кодирования

вращение без повторного кодирования невозможно, если только:

  • ваш вход MJPEG
  • вы вращаетесь при воспроизведении

поворот с кодировкой, используя правильный ffmpeg

чтобы правильно понимать шаги, необходимые для этого, следует начать с чтения или по крайней мере читаете этот вопрос:

каковы различия и сходства между ffmpeg, libav и avconv?

сводка: avconv-это вилка ffmpeg, сопровождающий debian выбрал avconv, вы должны скомпилировать правильный ffmpeg из источника.

следующим шагом будет компиляция правильного ffmpeg из источника, как описано здесь:

руководство по компиляции ffmpeg для Debian

последним шагом является использование команд, найденных в другие сообщения:

как перевернуть видео на 180° (вертикально / вверх ногами) с помощью FFmpeg? или поворот видео с FFmpeg

резюме: ffmpeg-vfilters "rotate=90" - i вход.выход mp4.mp4