
휴대폰에서 생성된 비디오가 있고 Thomson TV 세트(USB를 통해)에서 문제 없이 재생됩니다. 영상의 세부 내용은 다음과 같습니다.
> avprobe 20170904_065655.mp4
avprobe version 11.3-6:11.3-1~trusty, Copyright (c) 2007-2014 the Libav developers
built on Apr 13 2015 22:25:55 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '20170904_065655.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2017-09-04 04:58:01
Duration: 00:01:05.34, start: 0.000000, bitrate: 17094 kb/s
Stream #0.0(eng): Video: h264 (High), yuv420p, 1920x1080, 17017 kb/s, 30 fps, 90k tbn (default)
Metadata:
creation_time : 2017-09-04 04:58:01
Side data:
displaymatrix: rotation of -90.00 degrees
Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
creation_time : 2017-09-04 04:58:01
# avprobe output
비디오가 시계 반대 방향으로 90도 회전됩니다. 그러므로 지적한 바와 같이여기, 다음 명령줄을 사용하여 비디오를 시계 방향으로 90도 회전하려고 합니다.
ffmpeg -i 20170904_065655.mp4 -vf "transpose=1" test.mp4
안타깝게도 동영상이 다음과 같이 회전합니다.180도. 비디오를 회전시키는 명령에 문제가 있습니까?
아무튼 를 이용해서 영상을 회전시킬 수는 있었는데 avidemux
저장된 새 영상 파일( rotated.mp4
)이 TV에서 재생이 되지 않았습니다('영상 형식은 지원되지 않습니다'). 다음과 같은 명령을 사용하여 파일을 다른 형식으로 변환하려고했습니다.
avconv -i rotated.mp4 -c:v h264 -q:v 3 -c:a libmp3lame out.avi
avconv -i rotated.mp4 -c:v mpeg1video -q:v 3 -c:a libmp3lame out.avi
avconv -i rotated.mp4 -r 25 -vb 20M -crf 20 output.avi
avconv -i rotated.mp4 -vcodec libx264 -acodec aac -strict -2 -b:a 384k output.mp4
그러나 그 어느 것도 효과가 없었습니다. 내가 무엇을 놓치고 있나요? 아니면 실제 형식/인코딩을 변경하지 않고 명령줄에서 비디오를 회전하는 방법이 있습니까?
의 avprobe
는rotated.mp4
avprobe version 11.3-6:11.3-1~trusty, Copyright (c) 2007-2014 the Libav developers
built on Apr 13 2015 22:25:55 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, avi, from 'rotated.mp4':
Duration: 00:00:30.77, start: 0.000000, bitrate: 6728 kb/s
Stream #0.0: Video: h264 (High), yuv420p, 1080x1920 [PAR 1:1 DAR 9:16], 30 fps, 30.02 tbn, 60.04 tbc
Stream #0.1: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
ffmpeg 사용여기avprobe
'LordNeckbeard'의 메소드를 다음에 적용한 후의 출력은 다음과 같습니다 rotated.mp4
.
avprobe version 11.3-6:11.3-1~trusty, Copyright (c) 2007-2014 the Libav developers
built on Apr 13 2015 22:25:55 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'output.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.82.104
Duration: 00:00:30.86, start: 0.000000, bitrate: 10397 kb/s
Stream #0.0(und): Video: h264 (Constrained Baseline), yuv420p, 1080x1920 [PAR 1:1 DAR 9:16], 8860 kb/s, 30 fps, 15360 tbn, 60 tbc (default)
Stream #0.1(und): Audio: [1][0][0][0] / 0x0001, 48000 Hz, 2 channels (default)
Unsupported codec with id 0 for input stream 1
# avprobe output
이제 오디오나 비디오가 모두 지원되지 않습니다.
답변1
ffmpeg -i input.mp4 -vf "scale=-2:1080,format=yuv420p" -c:a copy output.mp4
TV가 회전 측면 데이터를 무시하는 것처럼 보이기 때문에 비디오를 회전하려면 비디오를 다시 인코딩해야 합니다.
ffmpeg
이 작업은 자동으로 수행되므로 특별한 작업을 수행할 필요가 없습니다.그래도 작동하지 않으면
-profile:v baseline
추가 호환성을 위해 추가하세요. 나는 또한 시도-profile:v main
하고 생략하는 것이 좋습니다-profile:v
. 피할 수 있다면-profile:v
피하세요. 차선책은기본, 가장 최적이 아닌 것은기준선, 그러나 로컬 TV 재생에는 그다지 중요하지 않습니다. 무엇이든 작동하는 것이 가장 좋습니다.그만큼규모필터는 높이가 1080이 되도록 비디오를 축소합니다. 그렇지 않으면 1080x1920 크기의 비디오를 재생하지 않습니다.
사용하여체재필터는 호환 가능한 픽셀 형식을 보장합니다. 귀하의 입력은 이미 YUV 4:2:0 평면이지만 이는 다른 입력 유형에 대한 보험일 뿐입니다.
-c:a copy
불필요한 재인코딩을 피하기 위해 오디오를 스트림 복사(재다중화)하기 위해 추가되었습니다. AAC-c:a aac
이외 의 오디오가 포함된 입력의 경우-c:a copy
.TV는 까다로울 수 있으므로 추가 실험이 필요할 수 있습니다. 60초 길이의 짧은 세그먼트를 빠르게 테스트하려면
-t 60
.이후ffmpeg태그가 사용되었습니다. 나는 귀하가 이 태그를 에 대한 허용 가능한 대안으로 허용할 것이라고 가정했습니다
avconv
.avconv
나는 그것을 사용하지 않고 익숙하지 않기 때문에 이 중 어느 것도 적용되지 않을 수 있습니다 . 반드시 최신 버전의ffmpeg
. Linux의 경우 최신 버전을 다운로드할 수 있습니다ffmpeg
.https://www.johnvansickle.com/ffmpeg/
답변2
회전된 영상이 TV의 성능을 초과할 가능성이 있습니다.
회전으로 인해 해상도가 1920x1080에서 1080x1920으로 변경되었습니다.
TV가 1080p(풀 HD)인 경우 1,920x1,080을 지원하고, 720p인 경우 1,280x720을 지원합니다.
두 경우 모두 비디오 높이가 최대값보다 높습니다. 이러한 비디오를 보려면 2K 또는 4K TV가 필요합니다.