Ru-Board.club
← Вернуться в раздел «Программы»

» FFmpeg

Автор: guru431
Дата сообщения: 21.11.2012 15:23

Официальный сайт | Сборки для Windows | Документация (англ.) | Исходный код

FFmpeg — набор свободных библиотек с открытым исходным кодом, которые позволяют записывать, конвертировать и передавать цифровые аудио- и видеозаписи в различных форматах, а также консольная утилита ffmpeg.exe, представляющая из себя универсальный видеоконвертер.

Ссылки на русском:
Документация по FFmpeg
Статья «19 команд FFmpeg для любых нужд»

Примеры использования:
Преобразовать в MKV
Захвата с экрана
Подготовка качественных GIF-файлов из видео при помощи FFmpeg
Автор: guru431
Дата сообщения: 26.11.2012 16:40
В общем-то, как всегда - помоги себе сам!

Сам решил проблему как смог. Ключей или дополнительных настроек для ffmpeg я не нашел. На помощь пришла командная строка )))

Если коротко:
1. На разрешение видео я забил - решил не менять при конвертации.
2. Битрейт видео - не больше 600 kbps (Батник будет для каждого видео перед конвертацией проверять его битрейт и если он меньше 600, то менять не будет).
3. Все настройки кодирования вынесены вперед. Перед каждой настройкой стоит "+" или "-". "+" означает, что настройка будет учитываться при конвертировании, "-" - нет.

Собственно сам код:

Код: set format_files=mp4
set folder_sources=d:\sources
set folder_destination=d:\destination

set video_codec=:+:libx264
set number_frames=:+:25
set video_bitrate=:+:600
set video_resolution=:-:640x480

set audio_codec=:+:libfaac
set number_channels=:+:2
set audio_bitrate=:+:128
set audio_sampling_rate=:+:48000


for /f "tokens=1,2 delims=:" %%a in ('echo %video_codec%') do (set video_codec_status=%%a&set video_codec_value=%%b)
if %video_codec_status%==+ (set set_video_codec=-vcodec %video_codec_value%) else (set set_video_codec= )
for /f "tokens=1,2 delims=:" %%a in ('echo %number_frames%') do (set number_frames_status=%%a&set number_frames_value=%%b)
if %number_frames_status%==+ (set set_number_frames=-r %number_frames_value%) else (set set_number_frames= )
for /f "tokens=1,2 delims=:" %%a in ('echo %video_bitrate%') do (set video_bitrate_status=%%a&set video_bitrate_value=%%b)
if %video_bitrate_status%==+ (set set_video_bitrate=-b %video_bitrate_value%k) else (set set_video_bitrate= )
for /f "tokens=1,2 delims=:" %%a in ('echo %video_resolution%') do (set video_resolution_status=%%a&set video_resolution_value=%%b)
if %video_resolution_status%==+ (set set_video_resolution=-s %video_resolution_value%) else (set set_video_resolution= )
for /f "tokens=1,2 delims=:" %%a in ('echo %audio_codec%') do (set audio_codec_status=%%a&set audio_codec_value=%%b)
if %audio_codec_status%==+ (set set_audio_codec=-acodec %audio_codec_value%) else (set set_audio_codec= )
for /f "tokens=1,2 delims=:" %%a in ('echo %number_channels%') do (set number_channels_status=%%a&set number_channels_value=%%b)
if %number_channels_status%==+ (set set_number_channels=-ac %number_channels_value%) else (set set_number_channels= )
for /f "tokens=1,2 delims=:" %%a in ('echo %audio_bitrate%') do (set audio_bitrate_status=%%a&set audio_bitrate_value=%%b)
if %audio_bitrate_status%==+ (set set_audio_bitrate=-ab %audio_bitrate_value%k) else (set set_audio_bitrate= )
for /f "tokens=1,2 delims=:" %%a in ('echo %audio_sampling_rate%') do (set audio_sampling_rate_status=%%a&set audio_sampling_rate_value=%%b)
if %audio_sampling_rate_status%==+ (set set_audio_sampling_rate=-ar %audio_sampling_rate_value%) else (set set_audio_sampling_rate= )


cd "%folder_sources%"
for %%a in (*.*) do (for /f "tokens=6 delims= " %%i in ('"ffmpeg -i "%%a" 2>&1>nul | find /i "bitrate:""') do if %%i gtr %video_bitrate_value% (%ffmpeg_exe% -i "%%a" -strict -2 -f %format_files% %set_video_codec% %set_number_frames% %set_video_bitrate% %set_video_resolution% %set_audio_codec% %set_number_channels% %set_audio_bitrate% %set_audio_sampling_rate% "%folder_destination%\%%a.%format_files%") else (%ffmpeg_exe% -i "%%a" -strict -2 -f %format_files% %set_video_codec% %set_number_frames% -b %%ik %set_video_resolution% %set_audio_codec% %set_number_channels% %set_audio_bitrate% %set_audio_sampling_rate% "%folder_destination%\%%a.%format_files%"))
Автор: driver29
Дата сообщения: 30.11.2015 00:32
Установил программу FFmpeg? – как описано на странице сайта «Как установить программу FFmpeg на системе Windows».

Не получается запустить …
В пункте 4 написано: «Откройте командную строку. Введите команду “ffmpeg –version”. Если командная строка выдаст информацию о текущей версии программы FFmpeg, значит, вы все сделали правильно, и программа установлена корректно. Теперь FFmpeg можно запускать из командной строки».
Информация о текущей версии программы FFmpeg не выдаётся!
И как её запускать?
Кто сможет что подсказать?
Автор: hErAx
Дата сообщения: 30.11.2015 00:55
у вас мало опыта работы с командной строкой.
вы явно что-то напутали с переменной %PATH%
но обсуждать переменные лучше в соответствующих темах
в данном случае вам поможет такой вот файл реестра

Код:
REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\ffmpeg.exe]
@="C:\\Путь\\к\\папке\\ffmpeg\\ffmpeg.exe"


Автор: driver29
Дата сообщения: 30.11.2015 02:58
hErAx, спасибо, что откликнулись.
Да, ... нет у меня опыта работы с командной строкой, - но научится хочется …
До запуска программы я пока не дошёл …
Команду на запрос «информации о текущей версии программы FFmpeg» я пишу правильно,
Но получаю результат непонятный!



А, он должен быть примерно такой:

Автор: hErAx
Дата сообщения: 30.11.2015 09:19
driver29как можно так часто противоречить своим-же словам!

Цитата:
До запуска программы я пока не дошёл …
вы запускаете программу с параметром –version, и здесь же утверждаете, что не делаете этого.

Цитата:
Команду на запрос «информации о текущей версии программы FFmpeg» я пишу правильно
вы её не пишите, а вставляете из буфера обмена. там вместо дефиса написано тире, а нужен именно дефис.
Автор: unreal666
Дата сообщения: 30.11.2015 09:47
и версия ffmpeg какая-то старая.
Скачай отсюда последнюю версию, которая 32-bit Static.
Автор: driver29
Дата сообщения: 30.11.2015 15:02
hErAx

Цитата:
вы её не пишите, а вставляете из буфера обмена. там вместо дефиса написано тире, а нужен именно дефис.

Да, hErAx, Вы правы, - ранее я вставлял команду из буфера обмена
С дефисом получился вот такой результат:



Спасибо за подсказку.



Добавлено:

Цитата:
и версия ffmpeg какая-то старая.
Скачай отсюда последнюю версию, которая 32-bit Static.

Спасибо.
Я и этой версией ещё ничего не обрабатывал …
По Вами предложенной ссылке мне видимо нужна версия 64-bit
Естественно возникает вопрос, -как правильно удалить предыдущую версию?
И установка этих, Вами предложенных, производится аналогично?


Добавлено:
unreal666

Цитата:
и версия ffmpeg какая-то старая.
Скачай отсюда последнюю версию, которая 32-bit Static.

Скачал по Вашей ссылке архив ffmpeg-20151126-git-72eaf72-win64-static.7z
Распаковал и новыми файлами просто заменил на диске С в папке ffmpeg старые.
Вот ниже скрин результата выполнения команды ffmpeg –version


Автор: unreal666
Дата сообщения: 30.11.2015 17:47

Цитата:
Вот ниже скрин результата выполнения команды ffmpeg –version

видно что новая
еще вопросы?
Автор: driver29
Дата сообщения: 30.11.2015 19:42
unreal666

Цитата:
еще вопросы?

Как написать команду для конвертирования видео из формата avi в формат mp4?
В какой папке разместить конвертируемое видео и какие данные ещё нужны о видеофайле для написания команды?

Автор: unreal666
Дата сообщения: 30.11.2015 21:09
driver29
блин. Опять непонятно, что ты хочешь. Конвертировать или только перемуксовать?
- Если перемуксовать, то какими конкретно кодеками закодировано видео и аудио в этом avi и что еще от него нужно?
- Если перекодировать то указывай все требования к кодированию.

Тут телепатов нема.

А то можно просто указать ком. строку вида

Код: ffmpeg -i "мой_фиг_его_знает_ави.avi" "мой_выходной_с_какими-то_там_параметрами_мп4.mp4"
Автор: driver29
Дата сообщения: 01.12.2015 06:15
unreal666, у меня была задача:
Вырезать (скопировать) из скачанного с youtube.com в формате *.mp4 ролика кусок длительностью на пару минут, - и главное, чтобы этот кусок остался в прежнем формате (*.mp4).
Я вырезал этот кусок программой VirtualDub, но сохранить его там предлагается в формате avi!
Вот я и искал способ конвертирования видео из формата avi в формат mp4 …
Я никогда такими делами не занимался, да и в дальнейшем вряд ли придётся, …
Вы мне подкинули идею конвертирования видеофайлов программой ffmpeg, но затем начали писать о «перемуксовке» и послали читать многостраничную доку по ffmpeg.
В поисках я наткнулся на ролик Александра Ороховатского «Самый быстрый способ обрезки и слияния видеофайлов»
Вот я его методом я и вырезал (скопировал), пользуясь ffmpeg, нужный мне кусок прямо в формате mp4!
Для того чтобы в командной стоке, писать меньше символов я поместил видеофайл прямо в корень диска (раздела) «C». Команда получилась следующая: «C:\ffmpeg\bin\ffmpeg.exe -ss 00:09:28 -i c:\12.mp4 -t 00:02:24 -vcodec copy -acodec copy c:\122.mp4».
Вот предлагаю здесь посмотреть скрин выполненной команды. (12.mp4, - исходный файл; 122.mp4. – сохранённая копи нужной части файла).
"Вырезка" получилась нужного мне размера. Просматривается как в исходном файле. Единственно, что мне не понятно, - это выделенные красным и жёлтым цветами стоки (см. скрин).
Пробовал вырезать (скопировать) из другого, снятого фотоаппаратом, файла - получается то же самое …
Если у Вас поэтому («цвету») есть какие-либо мысли, - поделитесь …
Автор: unreal666
Дата сообщения: 01.12.2015 10:52

Цитата:
Если у Вас поэтому («цвету») есть какие-либо мысли, - поделитесь …

пофигу на эти предупреждения.
Если хочешь, чтобы они не появлялись, добавь в ком. строку опцию -flags +global_header .

Добавлено:
кстати, вот тебе для размышления более навороченный пример:

Код: ffmpeg -i "input.mp4" -i "input_audio.m4a" -map_chapters -1 -map 0:v:0 -c:v copy -map 1:a:0 -c:a copy -metadata:s:v:0 language=rus -metadata:s:v:0 title="Это видеодорожка" -metadata:s:a:0 language=rus -metadata:s:a:0 title="Это аудиодорожка" "muxed.mp4"
Автор: driver29
Дата сообщения: 01.12.2015 16:07

Цитата:
Если хочешь, чтобы они не появлялись, добавь в ком. строку опцию -flags +global_header

Не плохо бы было, если бы Вы пояснили, что означает эта опция и в какое место строки её добавлять …

Автор: unreal666
Дата сообщения: 01.12.2015 17:07
вообще форсирует глобальные заголовки. Но в данном случае он просто подавляет эти предупреждения, т.к. файлы что с этой опцией, что без нее, имеют абсолютное совпадение.
Пихать его перед именем выходного файла.
Автор: driver29
Дата сообщения: 01.12.2015 17:50
Кстати, для ffmpeg существуют графические оболочки!
Смотрим, к примеру, статью:
«iFFmpeg. Графическая оболочка для консольной утилиты FFmpeg»
Автор: unreal666
Дата сообщения: 01.12.2015 18:07
driver29
для Mac OS и притом платная.
Автор: driver29
Дата сообщения: 01.12.2015 18:58

Цитата:
для Mac OS и притом платная.

Я выше написал: «к примеру» …
Вот Вам и для Windows: «Avanti – это графический интерфейс, написанный специально для программы FFmpeg, …
Avanti, в свою очередь, значительно повышает удобство работы с приложением, предоставляя доступ ко всем его функциям через приятную графическую оболочку. Главное окно содержит большой набор всевозможных инструментов и элементов управления. Кроме того, оболочка совершенно бесплатна». http://soft.mydiv.net/win/download-AVANTI.html

Автор: unreal666
Дата сообщения: 01.12.2015 19:43

Цитата:
предоставляя доступ ко всем его функциям через приятную графическую оболочку.

посмотрел я его. По части "ко всем его функциям" - это они загнули. Даже рядом не стояло.
Автор: driver29
Дата сообщения: 01.12.2015 20:47

Цитата:
посмотрел я его. По части "ко всем его функциям" - это они загнули. Даже рядом не стояло.

Многие знают, что ffmpeg — это сила, но не все знают, какая именно. Он многогранен и безграничен, а его возможности постигли лишь немногие профессионалы …
И тем не менее, этот инструмент может быть полезен почти всем, кто хоть иногда работает с видео и звуком, даже на бытовом уровне.
Автор: miks5
Дата сообщения: 11.02.2016 02:17
Avanti GUI FAQ на русском есть, хоть что-нибудь на русском есть? С обычным конвертированием понятно: 1 входной = 1 выхожной файл.
Интересует:
1. поддерживает ли Avanti GUI все/почти все опции FFmpeg которые доступны в командной строке
2. допустим склеить 1.mp3 + 2.mp3=3.mp3, 1.mp4+2.mp4=3.mp4 без конвертирования, все аудио/видео значения одинаковы
3. пакетную обработку поддерживает: конвертирацию 5-6 файлов по списку из папки
4. что пишется в User VIDEO/AUDIO options
Автор: tahr2007
Дата сообщения: 22.02.2016 15:48
можно ли одной командой склеить два ts файла и сразу сохранить в mkv?


Код: ffmpeg -i concat:"D:\1.ts|D:\2.ts" -c copy D:\3.mkv
Автор: V0lt_r
Дата сообщения: 01.03.2016 18:19
Хотелось бы видеть полноценную тему по FFmpeg на Ru.Board. Что лучше: переписать шапку этой темы или новую тему создать?
Автор: ivan3259
Дата сообщения: 01.03.2016 18:46
V0lt_r

Цитата:
Что лучше: переписать шапку этой темы или новую тему создать?

С созданием новых тем периодически возникают проблемы, мне кажется эту можно "забрать" безболезненно.
Автор: V0lt_r
Дата сообщения: 01.03.2016 19:58
Пример, как сделать пакетный файл для рутинных операций.

Быстрая перепаковка видеофайла в MKV
Скачиваем static сборку, вытаскиваем оттуда ffmpeg.exe и рядом создаем файл Преобразовать_в_MKV.cmd со следующим содержимым:
Код: cd /d "%~dp0"
ffmpeg -i %1 -vcodec copy -acodec copy %1.mkv
pause
Автор: ivan3259
Дата сообщения: 01.03.2016 20:56
V0lt_r

Цитата:
Теперь хватаем видеофайл и перетягиваем его на наш cmd-файл

По такому-же принципу есть возможность в МР4 преобразовывать?
(Или конвертировать с заданными параметрами)
Автор: V0lt_r
Дата сообщения: 01.03.2016 21:31
ivan3259
Цитата:
По такому-же принципу есть возможность в МР4 преобразовывать?
(Или конвертировать с заданными параметрами)
Да, возможно, если контейнер кодек поддерживает.
Автор: ivan3259
Дата сообщения: 02.03.2016 04:31
V0lt_r

Цитата:
По такому-же принципу есть возможность в МР4 преобразовывать?
(Или конвертировать с заданными параметрами)

Я хотел готовые решения выпросить, сам пока слаб в этом.
Автор: V0lt_r
Дата сообщения: 02.03.2016 06:03
ivan3259
Чтобы просто перепаковать в mp4, нужно лишь заменить расширение в моем скрипте. Если контейнер, что-то не кушает, то попробуй убрать "-vcodec copy -acodec copy". Если нужно, что-то конкретное на выходе, то посмотри статью "19 команд ffmpeg для любых нужд" (ссылка в шапке), там много разных примеров с описанием.
Автор: ivan3259
Дата сообщения: 02.03.2016 06:23
V0lt_r
Спасибо, попробую.
"19 команд ffmpeg для любых нужд" в первую очередь прочитал и... не получилось по ихнему

Страницы: 123

Предыдущая тема: Stop Motion анимацию


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.