Skip to content

Conversation

@Sheisuka
Copy link

Hi there
I've translated README to Russian!
It's not brilliant but I hope it will do the job

@leandromoreira
Copy link
Owner

Thanks Sheisuka, I hope another person that knows Russian can review it.

@vardbabayan
Copy link

Hey @leandromoreira, I know Russian so I can review it on this weekend

@Sheisuka
Copy link
Author

Sheisuka commented Oct 17, 2025

Hi @vardbabayan
I was planning to make some changes on the weekend, I would highly appreciate it if you waited a little bit
I can mention you here when I'm done

@vardbabayan
Copy link

@Sheisuka Sure, just ping me when it's ready for review

@Sheisuka
Copy link
Author

Hey @vardbabayan, it's ready


Мы начнём с краткого ликбеза: что такое видео, аудио, кодек и контейнер, затем вкратце пройдемся по командной строке `FFmpeg`, и, наконец, перейдём к коду. Если вам это неинтересно, смело пролистывайте прямо к разделу [Learning FFmpeg libav the hard way](#learn-ffmpeg-libav-the-hard-way) (да, ссылка с картинкой посреди фразы — это отсылка к мемам, не баг).

Кто-то говорит, что видеостриминг в Интернете — будущее традиционного ТВ. В любом случае, FFmpeg — вещь, которую стоит изучить.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Думаю "Some people used to say" точнее перевести как "Некоторые люди раньше говорили, что ..."

* [видео — то, что ты видишь!](#video---what-you-see)
* [аудио — то, что ты слышишь!](#audio---what-you-listen)
* [кодек — сжатие данных](#codec---shrinking-data)
* [контейнер — дом для аудио и видео](#container---a-comfy-place-for-audio-and-video)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"comfy place" - уютное место, здесь стоит поправить "контейнер - уютное место для аудио и видео"

* [контейнер — дом для аудио и видео](#container---a-comfy-place-for-audio-and-video)
* [FFmpeg — командная строка](#ffmpeg---command-line)

* [FFmpeg CLI 101](#ffmpeg-command-line-tool-101)
Copy link

@vardbabayan vardbabayan Oct 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo: [FFmpeg CLI 101] shouldn't be [FFmpeg — командная строка 101] ?

* [Transsizing (изменение разрешения)](#transsizing)
* [Бонус: адаптивный стриминг](#bonus-round-adaptive-streaming)
* [Дальше — больше](#going-beyond)
* [Learning FFmpeg libav the hard way](#learn-ffmpeg-libav-the-hard-way)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Learning FFmpeg libav the hard way -> Изучаем FFmpeg и libav трудным путем

поправить тот же момент на 15й строке

* [Дальше — больше](#going-beyond)
* [Learning FFmpeg libav the hard way](#learn-ffmpeg-libav-the-hard-way)

* [Глава 0 — печально известный «hello world»](#chapter-0---the-infamous-hello-world)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: вокруг hello world можно убрать кавычки


## аудио — то, что ты слышишь!

Молчаливое видео может многое передать, но без звука это будет совсем не то.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Здесь дословно будет немного иначе перевод:

  • Хотя видео без звука может выражать самые разные чувства, добавление звука делает просмотр более приятным.

$ ffmpeg -i input.mp4 output.avi
```

Мы только что сделали **ремаксим** (remuxing) — конвертировали один контейнер в другой.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ремаксим -> ремультиплексирование

4. опции выходного файла
5. выходной URL/путь

Блоки 2–5 можно повторять сколько угодно.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: 2-5 -> 2, 3, 4 и 5

(порядок аргументов важен)

bunny_1080p_60fps_vp9.webm # выходной url
```

Эта команда берёт `mp4` с двумя потоками (аудио в `aac` и видео в `h264`) и делает `webm`, изменяя и аудио-, и видео-кодеки.
Copy link

@vardbabayan vardbabayan Oct 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Более корректный перевод:

Эта команда берёт на входе файл mp4 с двумя потоками (аудио закодированное кодеком aac и видео закодированное с помощью кодека h264) и конвертирует в webm, изменяя изначальные аудио, и видео кодеки.


**Что это?** преобразование одного из потоков (аудио или видео) из одного кодека в другой.

**Зачем?** иногда устройство (TV, смартфон, консоль и т.д.) не поддерживает кодек X, но поддерживает кодек Y; также новые кодеки нередко дают лучшую степень сжатия.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

иногда устройство -> иногда некоторые устройства


**Что это?** конвертация из одного формата (контейнера) в другой.

**Зачем?** некоторые устройства не поддерживают контейнер X, но поддерживают Y; новые контейнеры иногда дают современные фичи.
Copy link

@vardbabayan vardbabayan Oct 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"иногда некоторые устройства ..."

"дают ..." -> "предоставляют ..."


![transrating](/img/transrating.png)

**Что это?** изменение битрейта или создание альтернативных «редишнов» (версий).
Copy link

@vardbabayan vardbabayan Oct 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Предлагаю поправить, чтобы оставить ссылку на оригинальный термин для читателей:

или создание альтернативных версий видео (renditions).


**Что это?** изменение битрейта или создание альтернативных «редишнов» (версий).

**Зачем?** кто-то будет смотреть через `2G` на слабом смартфоне, а кто-то — через `fiber` на 4K-TV; стоит предложить несколько версий одного видео под возможности зрителя.
Copy link

@vardbabayan vardbabayan Oct 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fiber -> оптоволокно

стоит предложить несколько версий одного видео с разным битрейтом под возможности зрителя.


![transsizing](/img/transsizing.png)

**Что это?** изменение разрешения. Как уже сказано, часто идёт в паре с transrating.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: Как уже сказано, transsizing часто идёт в паре с transrating.


![adaptive streaming](/img/adaptive-streaming.png)

**Что это?** производим несколько разрешений (битрейтов), режем медиа на чанки и отдаём по HTTP.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

режем медиа на чанки -> режем медиа на фрагменты


**Что это?** производим несколько разрешений (битрейтов), режем медиа на чанки и отдаём по HTTP.

**Зачем?** гибкость — можно смотреть и на слабом смартфоне, и на 4K-TV; легко масштабировать и деплоить, но может добавить задержку.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Больше передает смысл этот вариант:

Зачем? чтобы обеспечить гибкий медиаконтент, который можно смотреть как на маломощном смартфоне, так и на 4K-телевизоре, его также легко масштабировать и развертывать, но это может добавить задержку.


## Дальше — больше

[Применений FFmpeg — тьма](https://github.com/leandromoreira/digital_video_introduction/blob/master/encoding_pratical_examples.md#split-and-merge-smoothly).

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Применений FFmpeg — тьма] -> [Существует множество других способов использования FFmpeg.]

Раз уж [FFmpeg](#ffmpeg---command-line) настолько полезен в CLI для базовых операций с медиафайлами, как использовать его в своих программах?

FFmpeg — это [набор библиотек](https://www.ffmpeg.org/doxygen/trunk/index.html), которые можно интегрировать в свои приложения.
Обычно при установке FFmpeg ставятся и эти библиотеки. Я буду называть их совокупно **FFmpeg libav**.
Copy link

@vardbabayan vardbabayan Oct 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

дабы не использовать "cовокупно" -> Я буду называть набор этих библиотек FFmpeg libav.


> Это название — дань уважения серии Zed Shaw [Learn X the Hard Way](https://learncodethehardway.org/), в частности его книге Learn C the Hard Way.

## Глава 0 — печально известный «hello world»

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

кавычки вокруг hello world не нужны

## Глава 0 — печально известный «hello world»

Этот hello world не выведет `"hello world"` в терминал :tongue:
Вместо этого мы **распечатаем информацию о видео** — формат (контейнер), длительность, разрешение, каналы аудио; а затем **декодируем несколько кадров и сохраним их как изображения**.
Copy link

@vardbabayan vardbabayan Oct 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. каналы аудио -> аудио каналы
    в речи обычно так звучит естественнее

  2. а затем -> и напоследок

![ffmpeg libav architecture - decoding process](/img/decoding.png)

Сначала нужно загрузить медиафайл в компонент [`AVFormatContext`](https://ffmpeg.org/doxygen/trunk/structAVFormatContext.html) (контейнер также называют «format»).
На самом деле полностью файл не читается: зачастую парсится только заголовок.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

«format» -> формат (и без кавычек)

форма файла = контейнер файла (e.g mp4 / mov / etc..)

Сначала нужно загрузить медиафайл в компонент [`AVFormatContext`](https://ffmpeg.org/doxygen/trunk/structAVFormatContext.html) (контейнер также называют «format»).
На самом деле полностью файл не читается: зачастую парсится только заголовок.

После чтения минимального **заголовка контейнера** можно получить доступ к его потокам (по сути — сырой аудио/видео).

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(по сути — сырой аудио/видео) поменять на (думайте о них как о примитивных аудио и видеоданных)

На самом деле полностью файл не читается: зачастую парсится только заголовок.

После чтения минимального **заголовка контейнера** можно получить доступ к его потокам (по сути — сырой аудио/видео).
Каждый поток доступен через [`AVStream`](https://ffmpeg.org/doxygen/trunk/structAVStream.html).

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Каждый поток доступен через компонент, называемый AVStream ...


> Stream — красивое слово для «непрерывного потока данных».

Допустим, у нашего видео два потока: аудио в [AAC](https://en.wikipedia.org/wiki/Advanced_Audio_Coding) и видео в [H264 (AVC)](https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC). Из каждого потока мы извлекаем **кусочки данных** — пакеты, [`AVPacket`](https://ffmpeg.org/doxygen/trunk/structAVPacket.html).

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Переделать весь абзац:

Допустим, у нашего видео есть два потока: аудио в AAC Кодек и видео в H264 (AVC) Кодек. Из каждого потока мы извлекаем кусочки данных, называеые пакетами которые будут загружены в компонент называемый AVPacket.


Допустим, у нашего видео два потока: аудио в [AAC](https://en.wikipedia.org/wiki/Advanced_Audio_Coding) и видео в [H264 (AVC)](https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC). Из каждого потока мы извлекаем **кусочки данных** — пакеты, [`AVPacket`](https://ffmpeg.org/doxygen/trunk/structAVPacket.html).

**Данные в пакетах всё ещё кодированы** (сжаты), и чтобы их декодировать, передаём их соответствующему [`AVCodec`](https://ffmpeg.org/doxygen/trunk/structAVCodec.html).

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

кодированы -> закодированы

из контекста т.к далее их придется декодировать

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants