program tip

다시 인코딩하지 않고 mp4 비디오 회전

radiobox 2020. 11. 10. 07:59
반응형

다시 인코딩하지 않고 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 Rate> level limit를 나타내는 로깅 출력 오류가 발생합니다.

여기에 다시 인코딩에 문제가 있습니까? 회전을 적용하기 전에 먼저 휴대폰의 비디오를 더 "작동 가능한"다른 인코딩으로 다시 인코딩해야합니까? 아니면 다른 중요한 점을 놓치고 있습니까?


플래그를 고려하는 미디어 플레이어가 회전 된 파일을 재생하도록 메타 데이터를 변경하려면 다음과 같이 시도하십시오.

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

stackoverflow의 다른 곳에서 찾을 수 있습니다 .


Rotation = 0이 내 문제를 해결했습니다. 저는 세로 모드로 동영상을 녹화하기 시작했고 실수를 깨닫고 즉시 휴대 전화를 가로로 돌려 녹화를 계속했습니다. 내 아이폰은 전체 비디오를 세로로 표시했습니다.

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

고쳤다.


FFmpeg유사한 프로그램 옵션을 사용해도 메타 데이터를 변경합니다-map_metadata . exiftool회전 행렬과 회전 플래그를 읽을 수 있으며 버전 10.89부터는 아래에 설명 된대로 작성합니다.

진정한 무손실 (메타 데이터 포함) 회전을 얻기 위해 솔루션을 찾을 수 없었기 때문에 16 진 편집기 (예 : HxD )를 잡고 회전 된 비디오 파일을 분석했습니다.

MP4의 진정한 무손실 회전 :

  • 16 진수 편집기로 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 ° 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. There is almost no chance that you will able able to rotate without reencoding. The exception to that rule (MJPEG codec) has already been pointed out, but it's unlikely that you are using it, so it goes beyond the scope of this question. I will mention that the reason for this ability is that JPEG can be converted via metadata. Thus if you'll be able to find a container which has the metadata rotation, you'll be able to rotate, but none exist (or are wide spread enough) so far.
  2. If it took your hours to rotate and reencode 3 minutes of the video, then the problem can lie on an enormous resolution. And i mean huge! Can you please provide the output of the avprobe original.mp4 so that it can be ascertained.
  3. Libav versus FFmpeg debates are very counterproductive (you can see that by the amount of fud posted here already). Basically what has happened was a split of the project with some developers going one way and some another, the fact that FFmpeg project has managed to keep the name is just a fluke and it makes no sense to call one project original and another a fork. The differences between projects are mostly in the development style and on the philosophy. If you would characterise FFmpeg as more Open Source and Libav as more Free Software, you'd not be all that mistaken. Rational people hope that eventually the developers will come to their senses, and maybe not merge the projects, but cooperate to the larger extent. When Ubuntu came out originally, on every Debian GNU/Linux chat there were huge messages along the line of "Ubuntu is NOT Debian!!!!!!!", but now the situation has calmed down and both sides are quite happy with one another.

This answer is simply a summary of the comments provided by LordNeckbeard.

Rotating without encoding

Rotating without re-encoding is not possible unless:

  • your input is MJPEG
  • you rotate upon playback

Rotate with encoding using the correct ffmpeg

To correctly understand the steps needed to this, one should start by reading or at least skimming this question:

What are the differences and similarities between ffmpeg, libav, and avconv?

Summary: avconv is a fork of ffmpeg, debian maintainer chose avconv, you have to compile the correct ffmpeg from source.

The next step would be compiling the correct ffmpeg from source as is detailed here:

Compilation guide of ffmpeg for Debian

The final step is using the commands found in other posts:

How to flip a video 180° (vertical/upside down) with FFmpeg? or Rotating videos with FFmpeg

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

참고URL : https://stackoverflow.com/questions/25031557/rotate-mp4-videos-without-re-encoding

반응형