如何旋轉視訊並使其可以在電視上播放?

如何旋轉視訊並使其可以在電視上播放?

我有一個來自手機的視頻,它本身可以在 Thomson 電視機上播放(透過 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) 無法在電視機上播放(“視頻格式不受支援”)。我嘗試使用以下命令將文件轉換為不同的格式

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

但這些都不起作用。我缺什麼?或者有沒有辦法在命令列上旋轉視訊而不改變實際的格式/編碼?

的是avproberotated.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
  • 由於電視似乎忽略了旋轉輔助數據,因此您必須重新編碼視訊才能旋轉它。ffmpeg會自動執行此操作,因此您無需執行任何特殊操作。

  • 如果仍然不起作用,請添加-profile:v baseline以增加相容性。我建議也嘗試-profile:v main和省略-profile:v.如果你能逃脫懲罰,避免-profile:v,下一個最好的就是主要的,最不理想的是基線,但這對本地電視播放來說並不重要:只要有效就是最好的。

  • 規模過濾器將縮小視頻,使高度為 1080,否則將無法播放 1080x1920 大小的視頻。

  • 使用格式過濾器將確保相容的像素格式。您的輸入已經是 YUV 4:2:0 平面,但這只是其他輸入類型的保險。

  • -c:a copy添加到流複製(重新復用)音訊以避免不必要的重新編碼。對於包含 AAC-c:a aac以外的音訊的輸入,請使用-c:a copy.

  • 電視可能很挑剔,因此這可能需要進一步的實驗。要快速測試 60 秒的短片段,您可以添加-t 60.

  • 自從使用標籤我假設您會允許它是可接受的替代品avconv。這些都不適用,avconv因為我不使用它並且我不熟悉它。確保使用最新版本的ffmpeg.對於 Linux,您可以下載最新版本ffmpeghttps://www.johnvansickle.com/ffmpeg/

答案2

旋轉的影片可能超出了電視的能力。

旋轉將解析度從 1920x1080 變更為 1080x1920。

如果您的電視為 1080p(全高清),則支援 1,920x1,080,如果只有 720p,則支援 1,280x720。

在這兩種情況下,影片高度都超過最大值。您需要一台 2K 或 4K 電視才能觀看此類影片。

相關內容