Автор |
Повідомлення |
sergiyko.5 Забанено
З нами з: 25.02.16 Востаннє: 29.10.20 Повідомлень: 3624
|
2019-06-18 10:29 |
Є завдання - автоматизація видобутку аудіодоріжок з великої кількості відеофайлів для збереження у власний архів.
ОС Windows 10. Задача: Початкові данні: тека з відеофайлами mpg, прописані назви та нумерація серій.
Треба написати скріпт, щоб запустивши його в любій теці ремуксити аудіо з тими ж назвами.
Сам батнік ремуксу має такий вигляд:
Код: | ffmpeg -i "G:\VideoDisk\Mult\2019-01\S01E09.mpg" -sn -vn -acodec copy "G:\VideoDisk\Mult\2019-01\S01E09.remuxed.mp2"
ffmpeg -i "G:\VideoDisk\Mult\2019-01\S01E10.mpg" -sn -vn -acodec copy "G:\VideoDisk\Mult\2019-01\S01E10.remuxed.mp2" |
Потрібно створити автоматично і виконати цей батнік з прописаними всіма файлами в данній теці. Прохання допомогти.
Є батнік який записує в текстовий файл всі назви файлів присутніх в теці:
Код: | dir /b >>filelist.txt |
Треба їх якось об'єднати. Рішення:
01.Завантажити на компьютер ffmpeg.exe, вказати системі де він знаходиться:
Цей компьютер - Властивості - Додаткові настройки системи - Змінні оточення - Patch - прописати теку, де лежить ffmpeg.exe 02. Створити текстовим редактором файл з вмістом:
Код: | for %%C in ("*.mpg") do (ffmpeg -i "%%~C" -vn -c:a copy "%%~NC.mp2")
pause |
і зберегти його як audio.bat
Скопіювати цей файл в теку з відеофайлами з яких треба ремуксити аудіо і запускаємо подвійним кліком.
Інше завдання - пакетно демуксити велику кількість перекодованого відео та створеного аудіо наприклад після синхронізації.
Рішення:
01.Завантажити на компьютер .exe, зазвичай він входит в пакет MKVToolNix GUI, вказати системі де він знаходиться:
Цей компьютер - Властивості - Додаткові настройки системи - Змінні оточення - Patch - прописати теку, де лежить .exe 02. Файли однієї серії повинні мати одну й ту саму назву, наприклад - 45. та 45.
Покласти файли відео та аудіо в одну теку.
03. Скопіювати в цю теку раніше підготовлений батнік videodemux.bat і запустити:
Код: | FOR %%A IN (*.) DO .exe -o "%%~NA".. --no-global-tags --language 0:ukr --default-track 0:yes --compression 0:none --track-name ^"0:DUB 2ch^" "%%~NA". --title ^"Rip by sergiyko^" --default-track 0:yes --compression 0:none --default-track 1:yes -A --no-global-tags --track-order 1:0,0:0 "%%A"
PAUSE |
|
|
|
|
|
krigg070 Відео Гуртом - фільмокрай
З нами з: 29.10.14 Востаннє: 14.12.24 Повідомлень: 2430
|
2019-06-18 10:51 |
sergiyko.5
Код: | for %%C in ("G:\VideoDisk\Mult\2019-01\*.mpg") do (
ffmpeg -i "%%~C" -vn -c:a copy "G:\VideoDisk\Mult\2019-01\%%~NC.mpa"
) |
|
|
|
|
|
sergiyko.5 Забанено
З нами з: 25.02.16 Востаннє: 29.10.20 Повідомлень: 3624
|
2019-06-18 11:00 |
З теками щось не так, вони вже прописані, не працює. |
|
|
|
|
krigg070 Відео Гуртом - фільмокрай
З нами з: 29.10.14 Востаннє: 14.12.24 Повідомлень: 2430
|
2019-06-18 11:07 |
Код помилки.
Додано через 1 хвилину 26 секунд:
ffmpeg мусить бути занесений до змінних оточення, інакше замість просто ffmpeg треба прописувати повний шлях до ffmpeg.exe
Додано через 3 хвилини 46 секунд:
Перевір символи. Коротше кажучи розбирайся, зараз немає часу. |
|
|
|
|
sergiyko.5 Забанено
З нами з: 25.02.16 Востаннє: 29.10.20 Повідомлень: 3624
|
2019-06-18 13:35 |
Створив .bat у теці з відеофайлами:
Код: | for %%C in ("G:\VideoDisk\Mult\2019-01\*.mpg") do (ffmpeg -i "%%~C" -vn -c:a copy "G:\VideoDisk\Mult\2019-01\%%~NC.mp2")
pause |
ffmpeg прописав:
Код помилки відсутній, і демуксування не проходить:
|
|
|
|
|
Neytreenor Відео Гуртом - запис з ТБ
З нами з: 03.04.11 Востаннє: 14.12.24 Повідомлень: 4322
|
2019-06-18 13:41 |
sergiyko.5 написано: | ffmpeg прописав |
В path треба теку ffmpeg/bin прописати.
Додано через 2 хвилини 5 секунд:
І мабуть краще завантажити собі окремий білд ffmpeg, а не витягати аби звідки. |
|
|
|
|
sergiyko.5 Забанено
З нами з: 25.02.16 Востаннє: 29.10.20 Повідомлень: 3624
|
2019-06-18 14:04 |
Спрацював код
Код: | for %%C in ("G:\VideoDisk\Mult\2019-01\Mecard\*.mpg") do (ffmpeg -i "%%~C" -vn -c:a copy "G:\VideoDisk\Mult\2019-01\Mecard\%%~NC.mpa") |
але як без привязки до прописаних шляхів? |
|
|
|
|
krigg070 Відео Гуртом - фільмокрай
З нами з: 29.10.14 Востаннє: 14.12.24 Повідомлень: 2430
|
2019-06-18 14:06 |
Не треба створювати нову змінну, а відредагувати системну змінну Path -> C:\ffmpeg\bin
Як запустити скрипт:
1. Відкрити cmd.exe
2. Перетягнути батник script.bat у вікно cmd.exe (скопіюється повний шлях до скрипта)
3. Натиснути Enter, має запуститися. |
|
|
|
|
sergiyko.5 Забанено
З нами з: 25.02.16 Востаннє: 29.10.20 Повідомлень: 3624
|
2019-06-18 14:11 |
krigg070
у вас в коді прописаний шлях до теки, як зробити щоб шлях був у вигляді перемінної
Цитата: | G:\VideoDisk\Mult\2019-01\*.mpg |
|
|
|
|
|
Neytreenor Відео Гуртом - запис з ТБ
З нами з: 03.04.11 Востаннє: 14.12.24 Повідомлень: 4322
|
2019-06-18 14:12 |
sergiyko.5 написано: | але як без привязки до прописаних шляхів? |
Прибери шляхи та й годі
Код: | for %%C in (*.mpg) do (ffmpeg -i "%%~C" -vn -c:a copy %%~NC.mpa) |
Якось так має працювати. *.mpg можна просто * , якщо у теці лише відеофайли.
Потім скрипт треба буде запускати з теки з відео, папку зі скриптом теж треба буде в path прописати. |
|
|
|
|
sergiyko.5 Забанено
З нами з: 25.02.16 Востаннє: 29.10.20 Повідомлень: 3624
|
2019-06-18 14:21 |
krigg070, Neytreenor
Дякую, працює. |
|
|
|
|
krigg070 Відео Гуртом - фільмокрай
З нами з: 29.10.14 Востаннє: 14.12.24 Повідомлень: 2430
|
2019-06-18 14:25 |
sergiyko.5 написано: | у вас в коді прописаний шлях до теки, як зробити щоб шлях був у вигляді перемінної |
Код: | set PathToDir="G:\VideoDisk\Mult\2019-01"
for %%C in ("%PathToDir%\*.mpg") do (
ffmpeg -i "%%~C" -vn -c:a copy "%PathToDir%\%%~NC.mpa"
) |
Додано через 3 хвилини 35 секунд:
Neytreenor написано: |
Прибери шляхи та й годі
Код:
for %%C in (*.mpg) do (ffmpeg -i "%%~C" -vn -c:a copy %%~NC.mpa)
Якось так має працювати. *.mpg можна просто * , якщо у теці лише відеофайли.
Потім скрипт треба буде запускати з теки з відео, папку зі скриптом теж треба буде в path прописати.
|
Потім будеш совати батник по різних теках. Ну як хочеш. |
|
|
|
|
Neytreenor Відео Гуртом - запис з ТБ
З нами з: 03.04.11 Востаннє: 14.12.24 Повідомлень: 4322
|
2019-06-18 14:39 |
krigg070 написано: | Потім будеш совати батник по різних теках. Ну як хочеш. |
?
Кладеш скрипт у окрему теку, називаєш його по-людськи (наприклад, getaudio.bat), прописуєш ту теку у path. Потім заходиш у теку з відео, вбиваєш getaudio у рядок адреси провідника/файлового менеджера/командний рядок - і опа,воно працює . |
|
|
|
|
sergiyko.5 Забанено
З нами з: 25.02.16 Востаннє: 29.10.20 Повідомлень: 3624
|
2019-06-18 14:44 |
krigg070 написано: | Потім будеш совати батник по різних теках. Ну як хочеш. |
Так, але він універсальний вийшов, нічого змінювати в ньому не треба.
Додано через 2 хвилини 36 секунд:
Neytreenor
Я кидаю універсальий файл 3.bat в теку з відео, запускаю двійним натисканням кнопки мишки, на виході аудіофайли для архіву.
Додано через 2 хвилини 20 секунд:
Все просто. Раніше кожен файл окремо обробляв, щоб видобути аудіо, морока ще та.
В планах пакетний демукс перекодованого відео avc та аудіо за допомогою MKVToolNix. |
|
|
|
|
Neytreenor Відео Гуртом - запис з ТБ
З нами з: 03.04.11 Востаннє: 14.12.24 Повідомлень: 4322
|
2019-06-18 14:58 |
sergiyko.5 написано: | Я кидаю універсальий файл 3.bat в теку з відео |
Копіювати файл - теж морока .
sergiyko.5 написано: | В планах пакетний демукс перекодованого відео avc та аудіо за допомогою MKVToolNix. |
У мене теж була ідея автоматизувати збірку відео/аудіо, але щось постійно у відеофайлах які використовую бардак в середині: то одні субтитри, то по двоє, назви та властивості треків гуляють. Тому поки ручками, так надійніше. |
|
|
|
|
sergiyko.5 Забанено
З нами з: 25.02.16 Востаннє: 29.10.20 Повідомлень: 3624
|
2019-06-21 11:53 |
Оновив шапку, думаю корисний матеріал для зацікавлених. |
|
|
|
|
Electroz Відео Гуртом - підтримка та поширення
З нами з: 18.09.14 Востаннє: 14.12.24 Повідомлень: 5269
|
2019-06-21 18:53 |
sergiyko.5
Для файлів у форматі ts також працює? |
|
|
|
|
sergiyko.5 Забанено
З нами з: 25.02.16 Востаннє: 29.10.20 Повідомлень: 3624
|
2019-06-21 19:12 |
для контейнера .ts та інших з відеофайлом в mpeg2 код слідуючий:
Код: | for %%C in ("*. ") do (ffmpeg -i "%%~C" -vn -c:a copy "%%~NC.mp2")
pause |
Додано через 4 хвилини 53 секунди:
Цитата: | ("*. ")
("*.ts ")
("*.mpg ") |
Краще прописувати потрібне розширення, інакше скрипт буде обробляти всі файли, навіть не відео. |
|
|
|
|
Electroz Відео Гуртом - підтримка та поширення
З нами з: 18.09.14 Востаннє: 14.12.24 Повідомлень: 5269
|
2019-06-21 21:05 |
sergiyko.5
Дякую, працює. |
|
|
|
|
Electroz Відео Гуртом - підтримка та поширення
З нами з: 18.09.14 Востаннє: 14.12.24 Повідомлень: 5269
|
2019-06-24 13:30 |
Як прибрати оригінальну доріжку? Потрібно залишити лише українську. |
|
|
|
|
Neytreenor Відео Гуртом - запис з ТБ
З нами з: 03.04.11 Востаннє: 14.12.24 Повідомлень: 4322
|
2019-06-24 13:40 |
У команді заміни на
за умови, що українська доріжка перша. Останній нуль - то індекс доріжки (починається з нуля), якщо треба іншу доріжку - міняй його. |
|
|
|
|
krigg070 Відео Гуртом - фільмокрай
З нами з: 29.10.14 Востаннє: 14.12.24 Повідомлень: 2430
|
2019-06-24 21:36 |
Якщо треба, то ось деякі скрипти для пакетного муксу за допомогою ffmpeg та (вони працюють однаково):
ffmpeg:
Код: | for /l %%c in (1,1,8) do (
ffmpeg -i "The.Son.S02E0%%c.720p.AMZN..DD+5.1.-AJP69." ^ REM input file
-i "The.Son.s02..Ukr.Eng\The.Son.s02e0%%c..Ukr.Eng_UKR." ^ REM input ukainian audio track
-map_metadata -1 -c:v copy -c:a copy -c:s copy -map 0:0 -map 1:0 -map 0:1 -map 0:2 -map 0:3 ^
-disposition:a:0 default -metadata:s:a:0 language=ukr -metadata:s:a:0 title="DD 2.0 @ 192 kbps - AMC" ^
-disposition:a:1 none -metadata:s:a:1 language=eng -metadata:s:a:1 title="DD 5.1 @ 640 kbps - Original" ^
-disposition:s:0 none -metadata:s:s:0 language=eng -metadata:s:s:0 title="Full" ^
-disposition:s:1 none -metadata:s:s:1 language=eng -metadata:s:s:1 title="SDH" ^
"The.Son.2019.S02E0%%c.720p.AMZN..H264-Hurtom." REM output file
) |
:
Код: | for /l %%c in (1,1,8) do (
".exe" ^
--output "The.Son.2019.S02E0%%c.720p.AMZN..H264-Hurtom." ^ REM output file
--language 0:eng --default-track 0:yes --compression 0:none ^
--language 0:ukr --default-track 0:yes --compression 0:none --track-name "0:DD 2.0 @ 192 kbps - AMC" "The.Son.s02e0%%c..Ukr.Eng." ^ REM input ukainian audio track
--language 1:eng --compression 1:none --track-name "1:DD 5.1 @ 640 kbps - Original" ^
--language 2:eng --compression 2:none --track-name "2:Full" ^
--language 3:eng --compression 3:none --track-name "3:SDH" ^
--track-order 0:0,1:0,0:1,0:2,0:3 ^
"The.Son.S02E0%%c.720p.AMZN..DD+5.1.-AJP69." REM input file
) |
Назви файлів мусять бути шаблонними. Можна вибирати діапазони серій for /l %%c in (1,1,8) (початкове значення, крок, кінцеве значення)
Можна спокійно користуватись ffmpeg (він набагато зручніший та юзабельний, має більшу кількість ключів та багатий функціонал), та є один баг з timestamps, який досі не пофіксили. |
|
|
|
|
krigg070 Відео Гуртом - фільмокрай
З нами з: 29.10.14 Востаннє: 14.12.24 Повідомлень: 2430
|
2019-06-25 16:53 |
Ще деякий скрипт на python:
Код: | # Невеликий скрипт для витягнення списку епізодів конкретного сезону серіалу у такому виді: Назва серіалу. Season __ , Episode __. Назва серії
# Отримати API Key можна тут: https://www.themoviedb.org/settings/api
# Зареєструватися, слідуючи за підказками.
# Перед користуванням треба встановити python 3
import urllib.request, json
def getResponse(url):
operUrl = urllib.request.urlopen(url)
if(operUrl.getcode()==200):
data = operUrl.read()
jsonData = json.loads(data)
else:
print("Error receiving data", operUrl.getcode())
return jsonData
def main():
urlData = "https://api.themoviedb.org/3/tv/67232/season/2?api_key=ID_API_KEY" # Як сформувати API-запит дивитись тут: https://developers.themoviedb.org/3/tv-seasons/get-tv-season-details
urlData2 = "https://api.themoviedb.org/3/tv/67232?api_key=ID_API_KEY" # https://developers.themoviedb.org/3/tv/get-tv-details
jsonGetTitle = getResponse(urlData2)
tvSerieTitle = jsonGetTitle["original_name"]
jsonData = getResponse(urlData)
for s in jsonData["episodes"]:
print(f'{tvSerieTitle}. Season {s["season_number"]}, Episode {"{:02d}".format(s["episode_number"])}. {s["name"]}')
if __name__ == '__main__':
main() |
Вивід буде таким:
Код: | The Son. Season 2, Episode 01. Numunuu
The Son. Season 2, Episode 02. Ten Dollars and a Plucked Goose
The Son. Season 2, Episode 03. The Blind Tiger
The Son. Season 2, Episode 04. Scalped a Dog
The Son. Season 2, Episode 05. Hot Oil
The Son. Season 2, Episode 06. The Blue Light
The Son. Season 2, Episode 07. Somebody Get a Shovel
The Son. Season 2, Episode 08. All Their Guilty Stains
The Son. Season 2, Episode 09. The Bear
The Son. Season 2, Episode 10. Legend |
|
|
|
|
|
sergiyko.5 Забанено
З нами з: 25.02.16 Востаннє: 29.10.20 Повідомлень: 3624
|
2019-09-11 08:27 |
Питання до знаючих. Треба автоматизувати процес запису та зупинки запису.
Є бат файл, який запускається за допомогою стороннього планувальника
Код: | ffmpeg -i "http://edge0.live.net.ua/play/f1.m3u8" -c copy "output_14.ts" |
яким чином, командою зупинити запис, щоб файл зберігся коректно? Якщо запускати вручну, зупинка виконується натисканням клавіши "q".
І ще одне, як навчити бат кожного разу змінювати назву вихідного файлу, бо коли файл з таким самим іменем існує, програма питає про перезапис, і при автоматичному запуску бат стопориться до відповіді "y/n"? |
|
|
|
|
Neytreenor Відео Гуртом - запис з ТБ
З нами з: 03.04.11 Востаннє: 14.12.24 Повідомлень: 4322
|
2019-09-11 09:56 |
sergiyko.5 написано: | яким чином, командою зупинити запис, щоб файл зберігся коректно? Якщо запускати вручну, зупинка виконується натисканням клавіши "q". |
Можна просто закрити вікно або вбити процес, TS файлу це не страшно. Максимум пара секунд наприкінці загубиться. Якщо вручну бат запускав, то тією ж командою q.
sergiyko.5 написано: | І ще одне, як навчити бат кожного разу змінювати назву вихідного файлу, бо коли файл з таким самим іменем існує, програма питає про перезапис, і при автоматичному запуску бат стопориться до відповіді "y/n"? |
Генеруй назву файлу з датою та часом. Гугл має знати як. Як не знайдеш, в мене, здається, десь було таке у скриптах.
Плюс у ffmpeg є флаги -y та -n щоб автоматично перезаписувати та не перезаписувати відповідно. |
|
|
|
|
sergiyko.5 Забанено
З нами з: 25.02.16 Востаннє: 29.10.20 Повідомлень: 3624
|
2019-09-11 10:10 |
Neytreenor написано: | Можна просто закрити вікно або вбити процес, TS файлу це не страшно. Максимум пара секунд наприкінці загубиться. Якщо вручну бат запускав, то тією ж командою q. |
без оператора компьютера як це зробити, щоб файл не писався безкінечно, коли я на роботі.
Були випадки некоректного закриття файлу і не одна програма не змогла відкрити файл.
Ви мене зовсім не зрозуміли, процес треба автоматизувати. |
|
|
|
|
Neytreenor Відео Гуртом - запис з ТБ
З нами з: 03.04.11 Востаннє: 14.12.24 Повідомлень: 4322
|
2019-09-11 10:29 |
sergiyko.5 написано: | Були випадки некоректного закриття файлу і не одна програма не змогла відкрити файл. |
Скільки пишу ffmpeg-ом, проблем з тим, що запис закінчився через вбивання процесу не було. Бували кілька разів випадки коли через проблеми в потоці криво записував (починав писати в другу відеодоріжку), але це інше.
sergiyko.5 написано: | Ви мене зовсім не зрозуміли, процес треба автоматизувати. |
Якщо запускаєш планувальником, то тут можуть бути проблеми, бо ти запускаєш не ffmpeg напряму, а бат файл, ffmpeg запускається окремим процесом і його з планувальника не прикінчити . Колись теж намагався прикрутити скрипти запису до наявних планувальників, врешті-решт закінчилося тим, що написав нашвидкоруч собі свій планувальник, з гівна і палок, але працює. |
|
|
|
|
sergiyko.5 Забанено
З нами з: 25.02.16 Востаннє: 29.10.20 Повідомлень: 3624
|
2019-09-11 10:51 |
Neytreenor написано: | ffmpeg запускається окремим процесом і його з планувальника не прикінчити |
Ну це мабуть спірне питання, тому і звертаюсь до спеців, я зовсім не програміст.
Додано через 17 хвилин 58 секунд:
Є команда tasklist яка визначає список та pid процесів
і команда taskkill /pid 5278 яка вбиває визначений процес. Треба це повязати скриптом і все спрацює. |
|
|
|
|
Neytreenor Відео Гуртом - запис з ТБ
З нами з: 03.04.11 Востаннє: 14.12.24 Повідомлень: 4322
|
2019-09-11 10:58 |
sergiyko.5
Ще можна ffmpe-у сказати скільки часу треба писати. Після вказаного часу він закриває файл і виходить.
Це як альтернативна ідея. |
|
|
|
|
sergiyko.5 Забанено
З нами з: 25.02.16 Востаннє: 29.10.20 Повідомлень: 3624
|
2019-09-11 11:14 |
З переіменуванням розібрався:
Код: | @echo off
mkdir "My records"
set outputpath=My records\record_%date:~-2,2%%date:~-7,2%%date:~-10,2%_%time:~-11,2%%time:~-8,2%.ts
ffmpeg -i "http://kiev3-cdn.lanet.tv/live/9032.m3u8?key=xxxxxxxxxxxxxxx" -c:v copy -c:a copy "%outputpath%" |
|
|
|
|
|