YouTube の推奨するショート動画 9:16 を ffmpeg で作成する

「縦長で60秒以内」だけで、アップロードして公開できますが、YouTube の推奨する「アスペクト比 9:16」で見やすい画面で公開したいですよね。



ffmpeg で「動画ファイルのアスペクト比の変更」をやってみます。

動画に写ってる映像のアスペクト比はそのままで保持します。

「余白の追加 (pad)」と「切り抜き (crop) 」することで動画ファイルのアスペクト比を 9:16 にする、という話です。

少しやってみたので書いてみます。

以下は、参考になるエントリーです。

👉 Resizing videos with ffmpeg/avconv to fit into static sized player - Super User hatena-bookmark
👉 video - FFmpeg - scale and pad - Super User hatena-bookmark
👉 リサイズする scale | ニコラボ hatena-bookmark

 

🎞️ 考えられる基本パターン

出来上がりのアスペクト比は、9:16 です。

元動画が縦長であれば、

以下のどちらか。

横長であれば、

以下のどちらか。

というかんじで、

「余白の追加 (pad)」や「切り抜き (crop) 」

をします。

 

🎞️ ffmpeg の video_filter を使う

分かりやすくするために、「縦長」、「横長」といいましたが、実際は、元動画のアスペクト比が「9:16」を超えるか超えないか、が大事になります。

元動画アスペクト比が 9:16 より縦長の場合


ffmpeg -i input -vf "pad=ih*9/16:ih:-1:-1" output


ffmpeg -i input -vf "crop=iw:iw/(9/16)" output

元動画アスペクト比が 9:16 より横長の場合


ffmpeg -i input -vf "pad=iw:iw/(9/16):-1:-1" output


ffmpeg -i input -vf "crop=ih*9/16:ih" output

pad / crop 共に、中心に合わせています。

 

🎞️ もう少し便利に

元画像のアスペクト比は ffmpeg は認識できるので、そこを判別させます。

pad するか、crop するかは、動画内容の目視判断で。


ffmpeg \
  -i input \
  -vf "pad='if(lt(iw/ih,9/16),ih*9/16,iw)':'if(lt(iw/ih,9/16),ih,iw/(9/16))':-1:-1" \
  output


ffmpeg \
  -i input \
  -vf "crop='if(lt(iw/ih,9/16),iw,ih*9/16)':'if(lt(iw/ih,9/16),iw/(9/16),ih)'" \
  output

もし、画像が大きすぎる場合は,",scale=720:1280" など追加して、アスペクト比を保持しながら縮小します。

 

🎞️ まとめ

最初のリンクにあるコードでも意図する 9:16 動画 は作成できたのですが、気持ちが悪いので基本的なとこだけ調べてみました。

video filter を以下の形にまとめておけば、出来上がりの width x height を考慮したスクリプトが自在に書けそうです。


-vf "pad='max(iw,ih*(720/1280))':ow/(720/1280):-1:-1,scale=720:1280"


-vf "crop='min(iw,ih*(720/1280))':ow/(720/1280),scale=720:1280"

今後も、公式マニュアルを見ながら、あれこれやってみたいと思います。

👉 pad - Video Filters - FFmpeg Filters Documentation hatena-bookmark
👉 crop - Video Filters - FFmpeg Filters Documentation hatena-bookmark
👉 scale - Video Filters - FFmpeg Filters Documentation hatena-bookmark
👉 Expression Evaluation - FFmpeg Utilities Documentation hatena-bookmark



👉 YouTubeに縦長動画をどうアップするべきか? hatena-bookmark


Twitter の代替は Jake Wharton さんの Mastodon が最強じゃね?


👉 「Tweetbot」のTapbot、マストドンアプリ「Ivory」開発中 - ITmedia NEWS hatena-bookmark

そういえば、こんなの公開されてます。Twitter ではありません。

👉 Jake Wharton (@jw@jakewharton.com) - Mastodon hatena-bookmark


Singular Solution
Keep your Twitter follower count at zero by blocking and then quickly unblocking any new followers.

Available as a binary and Docker container.

👉 JakeWharton/singular-solution: Keep your Twitter follower count at zero by blocking and then quickly unblocking any new followers hatena-bookmark

docker + mastodon で Twitter クローン的なものを動かしてるのか、何なのか。

よく分かりませんが。

そういえば tweetbot 使ってましたね、Jake さんも。


ffprobe vs mediainfo

みなさんは、どっちを使っていますか。


❯ ffprobe movie.mov
[aac @ 0x7fa2d9f05f40] Assuming an incorrectly encoded 7.1 channel layout instead of a spec-compliant 7.1(wide) layout, use -strict 1 to decode according to the specification instead.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'movie.mov':
  Metadata:
    major_brand     : qt
    minor_version   : 0
    compatible_brands: qt
    creation_time   : 2023-01-12T09:51:58.000000Z
    com.apple.quicktime.make: Apple
    com.apple.quicktime.model: iMac19,1
    com.apple.quicktime.software: macOS 13.1 (22C65)
    com.apple.quicktime.creationdate: 2023-01-12T18:51:56+0900
  Duration: 00:00:03.05, start: 0.000000, bitrate: 998 kb/s
  Stream #0:0[0x1](und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1280x720 [SAR 1:1 DAR 16:9], 627 kb/s, 60 fps, 60 tbr, 6k tbn (default)
    Metadata:
      creation_time   : 2023-01-12T09:51:58.000000Z
      handler_name    : Core Media Video
      vendor_id       : [0][0][0][0]
      encoder         : H.264
  Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, 7.1, fltp, 8 kb/s (default)
    Metadata:
      creation_time   : 2023-01-12T09:51:58.000000Z
      handler_name    : Core Media Audio
      vendor_id       : [0][0][0][0]
[aac @ 0x7fa2db00f3c0] Assuming an incorrectly encoded 7.1 channel layout instead of a spec-compliant 7.1(wide) layout, use -strict 1 to decode according to the specification instead.


❯ mediainfo movie.mov
General
Complete name                            : movie.mov
Format                                   : MPEG-4
Format profile                           : QuickTime
Codec ID                                 : qt   0000.00 (qt  )
File size                                : 372 KiB
Duration                                 : 3 s 50 ms
Overall bit rate mode                    : Variable
Overall bit rate                         : 998 kb/s
Encoded date                             : UTC 2023-01-12 09:51:58
Tagged date                              : UTC 2023-01-12 09:52:01
Writing library                          : Apple QuickTime
com.apple.quicktime.make                 : Apple
com.apple.quicktime.model                : iMac19,1
com.apple.quicktime.software             : macOS 13.1 (22C65)
com.apple.quicktime.creationdate         : 2023-01-12T18:51:56+0900

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : Main@L3.2
Format settings                          : CABAC / 2 Ref Frames
Format settings, CABAC                   : Yes
Format settings, Reference frames        : 2 frames
Format settings, GOP                     : M=2, N=60
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 3 s 50 ms
Source duration                          : 4 s 50 ms
Bit rate mode                            : Variable
Bit rate                                 : 663 kb/s
Maximum bit rate                         : 768 kb/s
Width                                    : 1 280 pixels
Height                                   : 720 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 60.000 FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.012
Stream size                              : 247 KiB (66%)
Source stream size                       : 310 KiB (83%)
Title                                    : Core Media Video
Encoded date                             : UTC 2023-01-12 09:51:58
Tagged date                              : UTC 2023-01-12 09:52:01
Color range                              : Limited
Color primaries                          : BT.709
Transfer characteristics                 : BT.709
Matrix coefficients                      : BT.709
Codec configuration box                  : avcC

Audio
ID                                       : 2
Format                                   : AAC LC
Format/Info                              : Advanced Audio Codec Low Complexity
Codec ID                                 : mp4a-40-2
Duration                                 : 3 s 50 ms
Source duration                          : 3 s 971 ms
Bit rate mode                            : Constant
Bit rate                                 : 8 247 b/s
Nominal bit rate                         : 960 kb/s
Channel(s)                               : 8 channels
Channel layout                           : C L R Ls Rs Lw Rw LFE
Sampling rate                            : 44.1 kHz
Frame rate                               : 43.066 FPS (1024 SPF)
Compression mode                         : Lossy
Stream size                              : 3.07 KiB (1%)
Source stream size                       : 4.01 KiB (1%)
Title                                    : Core Media Audio
Encoded date                             : UTC 2023-01-12 09:51:58
Tagged date                              : UTC 2023-01-12 09:52:01

どっちがいいんですかね。


👉 FFmpeg/ffprobe.c at master · FFmpeg/FFmpeg hatena-bookmark

 


👉 MediaArea/MediaInfo: Convenient unified display of the most relevant technical and tag data for video and audio files. hatena-bookmark