Поворот 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 минут отснятого материала) и не приводит к воспроизводимому фильму. Я также получаю сообщение об ошибке в выходных данных журнала который указывает скорость Мб > ограничение уровня.

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

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

5 60

5 ответов:

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

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

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

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

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

исправил.

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

чтобы получить истинный без потерь (ВКЛ. метаданные) вращение, я не мог найти решение, поэтому я схватил шестнадцатеричный редактор (например 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° 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° КНО:

    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 input. mp4 output. mp4