มันคือปี 2019 และถึงเวลาที่เราตัดสินใจเลือก GIF (
เราไม่จำเป็นต้องมี GIF ในที่ที่เรากำลังจะไป!
หากเป้าหมายของคุณคือการปรับปรุงความเร็วในการโหลดไซต์ คุณจะต้องกำจัด GIF! แต่แล้วคุณจะสร้างภาพเคลื่อนไหวได้อย่างไร? คำตอบคือวิดีโอ และในกรณีส่วนใหญ่ คุณจะได้รับคุณภาพที่ดีขึ้นและประหยัดพื้นที่ถึง 50-90%! ในชีวิต สิ่งต่างๆ ส่วนใหญ่มีทั้งข้อดีและข้อเสีย เมื่อคุณแทนที่ GIF ด้วยวิดีโอ บ่อยครั้งคุณจะไม่พบข้อเสียใดๆ
ลง GIF ทั้งหมด!
โชคดีที่การแทนที่ GIF ด้วยวิดีโอเป็นเรื่องปกติในช่วงไม่กี่ปีที่ผ่านมา ดังนั้นเครื่องมือที่จำเป็นทั้งหมดจึงถูกใช้งานอยู่แล้ว ในโพสต์นี้ ฉันจะไม่ประดิษฐ์วงล้อขึ้นมาใหม่ แต่จะปรับปรุงโซลูชันที่มีอยู่เพียงเล็กน้อยเท่านั้น นี่คือส่วนสำคัญ:
- ถ่าย GIF และแปลงเป็นวิดีโอ
- เข้ารหัสวิดีโอโดยใช้ H.264 หรือ VP9 เช่น บีบอัดและบรรจุลงในคอนเทนเนอร์ MP4 หรือ WebM
- แทนที่
<img>
โดยเปิด GIF แบบเคลื่อนไหว<video>
ด้วยลูกกลิ้ง - เปิดการเล่นอัตโนมัติโดยไม่มีเสียงและการวนซ้ำสำหรับเอฟเฟกต์ GIF
มันคือปี 2019
ตอนนี้ปี 2019 แล้ว ความก้าวหน้าก้าวไปข้างหน้าและเราต้องตามให้ทัน จนถึงตอนนี้ เรามีตัวเลือกตัวแปลงสัญญาณสองตัวเลือกที่ได้รับการสนับสนุนอย่างกว้างขวางในเบราว์เซอร์และเครื่องมือเข้ารหัสวิดีโอทั้งหมด:
- H.264 - เปิดตัวในปี 2003 และใช้กันอย่างแพร่หลายที่สุดในปัจจุบัน
- VP9 - ปรากฏในปี 2013 และได้รับการปรับปรุงการบีบอัดเกือบ 50% เมื่อเทียบกับ H.264 แม้ว่า
ขณะที่พวกเขาเขียนที่นี่ ไม่ใช่ทุกอย่างที่ไม่ได้เป็นสีดอกกุหลาบเสมอไป
หมายเหตุ: แม้ว่า H.265 จะเป็นเวอร์ชันถัดไปของ H.264 และสามารถแข่งขันกับ VP9 ได้ แต่ฉันไม่คิดว่าเป็นเพราะการรองรับเบราว์เซอร์ที่ไม่ดีดังที่แสดงในหน้า
โปรดจำไว้ว่าเป้าหมายของเราคือการลดขนาด GIF ขนาดใหญ่ให้มีขนาดเล็กที่สุดเท่าที่จะเป็นไปได้เพื่อเพิ่มความเร็วในการโหลด คงจะเป็นเรื่องแปลกในปี 2019 ถ้าเราไม่มีมาตรฐานใหม่สำหรับการบีบอัดวิดีโอในคลังแสงของเรา แต่มันมีอยู่จริงและเรียกว่า AV1 ด้วย AV1 คุณสามารถทำได้
AV1 พร้อมให้บริการคุณตั้งแต่ปี 2019!
บนเดสก์ท็อป
ล่าสุดมีการเพิ่มการสนับสนุนการถอดรหัสวิดีโอ AV1 ในเวอร์ชันเดสก์ท็อป
บนสมาร์ทโฟน
ขณะนี้ไม่มีการรองรับฮาร์ดแวร์สำหรับสมาร์ทโฟนเนื่องจากขาดตัวถอดรหัสที่เหมาะสม คุณสามารถถอดรหัสซอฟต์แวร์ได้ แม้ว่าจะทำให้สิ้นเปลืองแบตเตอรี่มากขึ้นก็ตาม SOC มือถือรุ่นแรกที่รองรับการถอดรหัสฮาร์ดแวร์ AV1 จะปรากฏในปี 2020
แล้วคนอ่านบทความก็แบบว่า “ถ้ามือถือยังไม่รองรับจริง ๆ แล้วทำไมถึงใช้ AV1 ล่ะ?”
AV1 เป็นตัวแปลงสัญญาณที่ค่อนข้างใหม่และเรากำลังอยู่ในช่วงเริ่มต้นของการปรับตัว คิดว่าบทความนี้เป็นเวที "ในขณะที่คุณทำอาหาร คนจะตามมา" การสนับสนุนเดสก์ท็อปจะช่วยเพิ่มความเร็วให้กับไซต์สำหรับผู้ชมบางส่วน และตัวแปลงสัญญาณเก่าสามารถใช้เป็นสถานการณ์สำรองได้เมื่ออุปกรณ์เป้าหมายไม่รองรับ AV1 แต่เมื่อผู้ใช้เปลี่ยนไปใช้อุปกรณ์ที่รองรับ AV1 ทุกอย่างจะพร้อม เพื่อให้บรรลุเป้าหมายนี้ เราจำเป็นต้องสร้างแท็กวิดีโอดังที่แสดงด้านล่าง ซึ่งจะช่วยให้เบราว์เซอร์สามารถเลือกรูปแบบที่ต้องการได้ - AV1 - >> VP9 - >> H.264. ถ้าผู้ใช้มีอุปกรณ์หรือเครื่องนำทางเก่ามากที่ไม่รองรับวิดีโอเลย (ซึ่งไม่น่าเป็นไปได้อย่างยิ่งกับ H264)จากนั้นเขาก็จะเห็น GIF เท่านั้น
<video style="display:block; margin: 0 auto;" autoplay loop muted playsinline poster="RollingCredits.jpg">
<source src="media/RollingCredits.av1.mp4" type="video/mp4">
<source src="media/RollingCredits.vp9.webm" type="video/webm">
<source src="media/RollingCredits.x264.mp4" type="video/mp4">
<img src="media/RollingCredits.gif">
</video>
การสร้าง AV1
การสร้างวิดีโอใน AV1 เป็นเรื่องง่าย
# Linux or Mac
## Проход 1
ffmpeg -i input.mp4 -c:v libaom-av1 -b:v 200k -filter:v scale=720:-1 -strict experimental -cpu-used 1 -tile-columns 2 -row-mt 1 -threads 8 -pass 1 -f mp4 /dev/null &&
## Проход 2
ffmpeg -i input.mp4 -pix_fmt yuv420p -movflags faststart -c:v libaom-av1 -b:v 200k -filter:v scale=720:-1 -strict experimental -cpu-used 1 -tile-columns 2 -row-mt 1 -threads 8 -pass 2 output.mp4
# Windows
## Проход 1
ffmpeg.exe -i input.mp4 -c:v libaom-av1 -b:v 200k -filter:v scale=720:-1 -strict experimental -cpu-used 1 -tile-columns 2 -row-mt 1 -threads 8 -pass 1 -f mp4 NUL && ^
## Проход 2
ffmpeg.exe -i input.mp4 -pix_fmt yuv420p -movflags faststart -c:v libaom-av1 -b:v 200k -filter:v scale=720:-1 -strict experimental -cpu-used 1 -tile-columns 2 -row-mt 1 -threads 8 -pass 2 output.mp4
นี่คือรายละเอียดของพารามิเตอร์:
-i - Входной файл.
-pix_fmt - Используем формат 4:2:0 для выбора информации о цветности в видео. Существует много других возможных форматов, но 4:2:0 наиболее совместимый.
-c:v - Какой кодек использовать, в нашем случае - AV1.<br />
-b:v – Средний битрейт, которого мы хотим добиться.
-filter:v scale - Фильтр масштаба ffmpeg используется для уменьшения разрешения видео. Мы устанавливаем X:-1 что говорит ffmpeg уменьшить ширину до X, сохранив соотношение сторон.
-strict experimental - Надо указать, т.к. AV1 достаточно новый кодек.
-cpu-used - Ужасно названный параметр, который на самом деле используется для выбора уровня качества видео. Возможные значения 0-4. Чем меньше значение, тем лучше качество и, соответственно, больше время, которое займёт кодировка.
-tile-columns - Для использования нескольких тредов. Говорит AV1 разбить видео на отдельные колонки, которые могут быть перекодированы независимо для лучшей утилизации ЦПУ.
-row-mt – Тоже, что и предыдущий параметр, но разбивает так же на строки внутри колонок.
-threads - Количество тредов.
-pass - Какой проход сейчас выполняется.
-f - Используется только при первом проходе. Указывает формат выходного файла, т.е. MP4 в нашем случае.
-movflags faststart - Включаем быстрый старт видео, перемещая часть данных в начало файла. Это позволит начать воспроизведение ещё до полной загрузка файла.
การทำ GIF
ในการสร้าง GIF ฉันใช้คำสั่งด้านล่าง เพื่อลดขนาด ฉันปรับขนาด GIF เป็นกว้าง 720px และ 12 fps แทนที่จะเป็นวิดีโอ 24 fps ดั้งเดิม
./ffmpeg -i /mnt/c/Users/kasing/Desktop/ToS.mov -ss 00:08:08 -t 12
-filter_complex "[0:v] fps=12,scale=720:-1" -y scene2.gif
ผลการทดสอบ
ดูครั้งเดียว ดีกว่าอ่านร้อยรอบใช่ไหม? มาตรวจสอบให้แน่ใจว่า AV1 เป็นตัวเลือกที่เหมาะสมสำหรับวัตถุประสงค์ของเรา ฉันถ่ายวิดีโอ Tears Of Steel ฟรีที่นี่
หมายเหตุ 1: หากไฟล์ด้านล่างไม่โหลดสำหรับคุณ อาจถึงเวลาที่ต้องอัปเดตเบราว์เซอร์ของคุณ ฉันอยากจะแนะนำเบราว์เซอร์ที่ใช้ Chromium เช่น Chrome, Vivaldi, Brave หรือ Opera นี่คือข้อมูลล่าสุดเกี่ยวกับการรองรับ AV1
หมายเหตุ 2: สำหรับ Firefox 66 บน Linux คุณจะต้องตั้งค่าสถานะ media.av1.enabled
สู่ความหมาย true
в about:config
หมายเหตุ 3: ฉันตัดสินใจที่จะไม่รวม GIF ปกติไว้ด้านล่าง เนื่องจากมีขนาดใหญ่และปริมาณข้อมูลที่ต้องใช้ในการโหลดหน้านี้ (ซึ่งคงจะเป็นเรื่องน่าขัน เนื่องจากหน้านี้เกี่ยวกับการลดปริมาณข้อมูลบนหน้าเว็บ :)) แต่คุณสามารถดู GIF สุดท้ายได้ที่นี่
หมายเหตุของผู้แปล: Habr ไม่อนุญาตให้คุณเปิดใช้งานการเล่นอัตโนมัติและวนซ้ำไฟล์ ดังนั้นคุณจึงสามารถประเมินคุณภาพได้เท่านั้น คุณสามารถดูได้ว่า "ภาพเคลื่อนไหว" จะมีลักษณะเป็นอย่างไร
ฉาก 1 @ 200 Kbps
มีการเคลื่อนไหวมากมายที่นี่ ซึ่งมีความอ่อนไหวเป็นพิเศษที่บิตเรตต่ำ คุณจะเห็นได้ทันทีว่า H.264 แย่แค่ไหนที่บิตเรตนี้ โดยจะมองเห็นสี่เหลี่ยมจัตุรัสได้ทันที VP9 ปรับปรุงสถานการณ์เล็กน้อย แต่ยังคงมองเห็นช่องสี่เหลี่ยมได้ AV1 ชนะอย่างชัดเจน ทำให้ได้ภาพที่ดีขึ้นอย่างเห็นได้ชัด
H.264
VP9
AV1
ฉาก 2 @ 200 Kbps
มีเนื้อหา CGI โปร่งแสงมากมายที่นี่ ผลลัพธ์ไม่ต่างจากครั้งที่แล้ว แต่โดยรวม AV1 ดูดีขึ้น
H.264
VP9
AV1
ฉาก 3 @ 100 Kbps
ในฉากนี้ เราลดบิตเรตลงเหลือ 100 Kbps และผลลัพธ์ก็สม่ำเสมอ AV1 ยังคงความเป็นผู้นำแม้ใช้บิตเรตต่ำ!
H.264
VP9
AV1
เชอร์รี่บนเค้ก
เพื่อจบบทความนี้โดยรู้สึกถึงปริมาณแบนด์วิธที่ประหยัดได้เมื่อเทียบกับ GIF - ขนาดรวมของวิดีโอทั้งหมดจะสูงกว่า... 1.62 เมกะไบต์!! ขวา. 1,708,032 ไบต์ร่วมเพศ! เพื่อการเปรียบเทียบ นี่คือขนาดวิดีโอ GIF และ AV1 สำหรับแต่ละฉาก
GIF
AV1
ฉากที่ 1
11.7 MB
0.33 MB
ฉากที่ 2
7.27 MB
0.18 MB
ฉากที่ 3
5.62 MB
0.088 MB
น่าทึ่งมาก! มันไม่ได้เป็น?
หมายเหตุ: ไม่ได้กำหนดขนาดไฟล์ของ VP9 และ H264 เนื่องจากแทบไม่แตกต่างจาก AV1 เนื่องจากใช้บิตเรตเดียวกัน การเพิ่มคอลัมน์ที่มีขนาดเท่ากันอีกสองคอลัมน์จะซ้ำซ้อน เพียงเพื่อเน้นว่าตัวแปลงสัญญาณเหล่านี้ให้คุณภาพที่ดีกว่า GIF มากในขนาดไฟล์ที่เล็กกว่ามาก
ที่มา: will.com