Skip to content

Commit

Permalink
Update ffmpeg.md
Browse files Browse the repository at this point in the history
  • Loading branch information
konoos56 committed Jan 18, 2024
1 parent 7091cdd commit 9e1a9c1
Showing 1 changed file with 53 additions and 3 deletions.
56 changes: 53 additions & 3 deletions docs/apps/ffmpeg.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,16 @@ ffmpeg -formats
```shell
ffmpeg -i video_input.wav -qscale 0 video_output.mp4
```
##В данном примере приведён аналог опции `-qscale 0` для сохранения оригинальность качества видео путём сохранения битрейта.

Как перекодировать все файлы в директории не зависимо от расширения видео-файлов с аппаратным ускорением NVENC и сохранением оригинального битрейта и копирование первой аудио-дорожки. Так же тут сохранено оригинальное название файлов.

```shell
for i in *; do
bitrate=$(ffmpeg -hide_banner -i "$i" 2>&1 | grep -oP 'bitrate: \K[0-9]+')
ffmpeg -hide_banner -i "$i" -map 0:v:0 -map 0:a:0 -c:v h264_nvenc -b:v ${bitrate}k -c:a copy "/путь/к/существующей/директории/где/сохранить/итоговые/файлы/${i%.*}.mkv";
done
```

## Измените разрешение видео или соотношение сторон

Expand All @@ -76,9 +86,49 @@ ffmpeg -i video_input.mov -s 1024x576 video_output.mp4
```

## Изменение структуры контейнера видео-файла без изменения качества видео
Допустим у нас есть видео файл с 5 аудио дорожками, а нам необходимо видео конкретно с одной аудио дорожкой.
`-map 0:v:0` тут выделяем первую видео дорожку. `-map 0:a:0` тут указываем что нужна только первая аудио-дорожка. (Порядок начинается не с 1 а с 0, будьте внимательны)
Допустим у нас есть видео файл с 5 аудио дорожками и многочисленным количеством субтитров, а нам необходимо видео конкретно с первой аудио дорожкой и вторыми по порядку субтитрами.
`-map 0:v:0` тут выделяем первую видео дорожку. `-map 0:a:0` тут указываем что нужна только первая аудио-дорожка. `-map 0:s:1` тут указываем что нужны только вторые по порядку субтитры (Порядок начинается не с 1 а с 0, будьте внимательны)

```shell
ffmpeg -hide_banner -i "файл.mkv" -map 0:v:0 -map 0:a:0 -c:v copy -c:a copy "/путь/к/файлу/куда/сохранить/файл.mkv"
ffmpeg -hide_banner -i "файл.mkv" -map 0:v:0 -map 0:a:0 -map 0:s:1 -c:v copy -c:a copy -c:s copy "/путь/к/файлу/куда/сохранить/файл.mkv"
```

##Обрезка видео без перекодирования в текущем каталоге.
К примеру первые 45 минут вырезать из видео:

```shell
ffmpeg -i "Видео.mkv" -ss 00:45:00 -c copy "Видео2.mkv"
```
Обрезать видео с определенного времени до определенного времени:

```shell
ffmpeg -i "Видео.mkv" -ss 00:45:00 -to 1:55:00 -c copy "Видео2.mkv"
```

##Обьеденяет видео без перекодирования с расширением .mkv (текущий каталог) аудио с расширением .mka и субтитры с расширением .ass с одинаковыми названиями. Так же сохраняется оригинальность названия и расширения видео-файлов.

Предположим что у вас есть сериал в котором находятся серии и два каталога с нужным аудио-переводом и субтитрами. (Все изначальные расширения в команде вы можете изменить под свои)

```shell
for i in *.mkv;
do
ffmpeg -hide_banner -i "$i" -i "/Путь/к/аудио/файлам/${i%.*}.mka" -i "/Путь/к/субтитрам/${i%.*}.ass" -map 0:v:0 -map 1:a -map 2:s -c:v copy -c:a copy -c:s copy "/Путь/куда/сохранить/${i}";
done
```

##Справка по обозначению опций `-map 0:v:0` `-map 0:a:0` `-map 0:s:0`

```shell
Изменять -map 0:v:0 не рекомендуется так как видео файлы могут содержать в себе определённые обложки и программа за основу может взять не само видео а обложку (картинку)
Изменяя -map 0:a:0 мы выбираем какую аудио дорожку скопировать (-map 0:a:0 первая по порядку, -map 0:a:1 вторая, -map 0:a:2 третья и так далее)
Изменяя -map 0:s:0 принцип схож с аудио дорожками (-map 0:s:0 первая по порядку, -map 0:s:1 вторая, -map 0:s:2 третья и так далее)
```

##Вывод названия кодека, количество каналов аудио, язык и название аудио дорожки.

```shell
for file in *; do
echo "Файл: $file"
ffprobe -v error -select_streams a -show_entries stream=codec_name,channels,tags:stream_tags=language,title -of csv=p=0 "$file"
done
```

0 comments on commit 9e1a9c1

Please sign in to comment.