Подтвердить что ты не робот

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

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

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

Для начала возник такой вопрос: Вращение видео с помощью FFmpeg

Но это указывает на то, что ffmpeg устарел и что я должен использовать avconv. Я нашел этот вопрос, детализирующий способ идти вперед. https://askubuntu.com/info/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 минут) и не приводит к воспроизведению фильма. Я также получаю сообщение об ошибке при выводе журнала, в котором указана скорость передачи в МБ>.

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

4b9b3361

Ответ 1

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

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

как найдено fooobar.com/questions/27617/....

Ответ 2

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

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

Исправлено.

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

Вращение без кодирования

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

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

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

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

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

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

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

Руководство по сборке ffmpeg для Debian

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

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

Сводка: ffmpeg -vfilters "rotate = 90" -i input.mp4 output.mp4