Пакетний ремукс аудіодоріжок, пакетний демукс відео та аудіо

Нові коментарі

Нова тема   Відповісти
Сторінка:  1, 2  наступна
Автор Повідомлення
sergiyko.5 
VIP


З нами з: 25.02.16
Востаннє: 20.09.19
Повідомлень: 2586

2019-06-18 11: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. Скопіювати в цю теку раніше підготовлений батнік video.demux.bat і запустити:

Код:
FOR %%A IN (*.) DO .exe -o "%%~NA".demux. --default-track 0:yes --compression 0:none --language 0:ukr --track-name ^"0:DUB 2ch^" --default-track 0:yes "%%~NA". --compression 1:none --compression 2:none --title ^"rip by sergiyko^" "%%A"
PAUSE
krigg070 
Відео Гуртом - фільмокрай
Відео Гуртом - фільмокрай


З нами з: 29.10.14
Востаннє: 20.09.19
Повідомлень: 1611

2019-06-18 11: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 
VIP


З нами з: 25.02.16
Востаннє: 20.09.19
Повідомлень: 2586

2019-06-18 12:00  
З теками щось не так, вони вже прописані, не працює.
krigg070 
Відео Гуртом - фільмокрай
Відео Гуртом - фільмокрай


З нами з: 29.10.14
Востаннє: 20.09.19
Повідомлень: 1611

2019-06-18 12:07  
Код помилки.

Додано через 1 хвилину 26 секунд:

ffmpeg мусить бути занесений до змінних оточення, інакше замість просто ffmpeg треба прописувати повний шлях до ffmpeg.exe

Додано через 3 хвилини 46 секунд:

Перевір символи. Коротше кажучи розбирайся, зараз немає часу.
sergiyko.5 
VIP


З нами з: 25.02.16
Востаннє: 20.09.19
Повідомлень: 2586

2019-06-18 14: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
Востаннє: 20.09.19
Повідомлень: 2070

2019-06-18 14:41  
sergiyko.5 написано:
ffmpeg прописав

В path треба теку ffmpeg/bin прописати.

Додано через 2 хвилини 5 секунд:

І мабуть краще завантажити собі окремий білд ffmpeg, а не витягати аби звідки.
sergiyko.5 
VIP


З нами з: 25.02.16
Востаннє: 20.09.19
Повідомлень: 2586

2019-06-18 15: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
Востаннє: 20.09.19
Повідомлень: 1611

2019-06-18 15:06  
Не треба створювати нову змінну, а відредагувати системну змінну Path -> C:\ffmpeg\bin
Як запустити скрипт:
1. Відкрити cmd.exe
2. Перетягнути батник script.bat у вікно cmd.exe (скопіюється повний шлях до скрипта)
3. Натиснути Enter, має запуститися.
sergiyko.5 
VIP


З нами з: 25.02.16
Востаннє: 20.09.19
Повідомлень: 2586

2019-06-18 15:11  
krigg070
у вас в коді прописаний шлях до теки, як зробити щоб шлях був у вигляді перемінної

Цитата:
G:\VideoDisk\Mult\2019-01\*.mpg
Neytreenor 
Відео Гуртом - запис з ТБ
Відео Гуртом - запис з ТБ


З нами з: 03.04.11
Востаннє: 20.09.19
Повідомлень: 2070

2019-06-18 15:12  
sergiyko.5 написано:
але як без привязки до прописаних шляхів?

Прибери шляхи та й годі Happy

Код:
for %%C in (*.mpg) do (ffmpeg -i "%%~C" -vn -c:a copy %%~NC.mpa)


Якось так має працювати. *.mpg можна просто * , якщо у теці лише відеофайли.

Потім скрипт треба буде запускати з теки з відео, папку зі скриптом теж треба буде в path прописати.
sergiyko.5 
VIP


З нами з: 25.02.16
Востаннє: 20.09.19
Повідомлень: 2586

2019-06-18 15:21  
krigg070, Neytreenor
Дякую, працює.
krigg070 
Відео Гуртом - фільмокрай
Відео Гуртом - фільмокрай


З нами з: 29.10.14
Востаннє: 20.09.19
Повідомлень: 1611

2019-06-18 15: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
Востаннє: 20.09.19
Повідомлень: 2070

2019-06-18 15:39  
krigg070 написано:
Потім будеш совати батник по різних теках. Ну як хочеш.

?
Кладеш скрипт у окрему теку, називаєш його по-людськи (наприклад, getaudio.bat), прописуєш ту теку у path. Потім заходиш у теку з відео, вбиваєш getaudio у рядок адреси провідника/файлового менеджера/командний рядок - і опа,воно працює Happy.
sergiyko.5 
VIP


З нами з: 25.02.16
Востаннє: 20.09.19
Повідомлень: 2586

2019-06-18 15:44  
krigg070 написано:
Потім будеш совати батник по різних теках. Ну як хочеш.

Так, але він універсальний вийшов, нічого змінювати в ньому не треба.

Додано через 2 хвилини 36 секунд:

Neytreenor
Я кидаю універсальий файл 3.bat в теку з відео, запускаю двійним натисканням кнопки мишки, на виході аудіофайли для архіву.

Додано через 2 хвилини 20 секунд:

Все просто. Раніше кожен файл окремо обробляв, щоб видобути аудіо, морока ще та.

В планах пакетний демукс перекодованого відео avc та аудіо за допомогою MKVToolNix.
Neytreenor 
Відео Гуртом - запис з ТБ
Відео Гуртом - запис з ТБ


З нами з: 03.04.11
Востаннє: 20.09.19
Повідомлень: 2070

2019-06-18 15:58  
sergiyko.5 написано:
Я кидаю універсальий файл 3.bat в теку з відео

Копіювати файл - теж морока Happy.

sergiyko.5 написано:
В планах пакетний демукс перекодованого відео avc та аудіо за допомогою MKVToolNix.

У мене теж була ідея автоматизувати збірку відео/аудіо, але щось постійно у відеофайлах які використовую бардак в середині: то одні субтитри, то по двоє, назви та властивості треків гуляють. Тому поки ручками, так надійніше.
sergiyko.5 
VIP


З нами з: 25.02.16
Востаннє: 20.09.19
Повідомлень: 2586

2019-06-21 12:53  
Оновив шапку, думаю корисний матеріал для зацікавлених.
Electroz 
Відео Гуртом - підтримка та поширення
Відео Гуртом - підтримка та поширення


З нами з: 18.09.14
Востаннє: 20.09.19
Повідомлень: 3583

2019-06-21 19:53  
sergiyko.5
Для файлів у форматі ts також працює?
sergiyko.5 
VIP


З нами з: 25.02.16
Востаннє: 20.09.19
Повідомлень: 2586

2019-06-21 20: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
Востаннє: 20.09.19
Повідомлень: 3583

2019-06-21 22:05  
sergiyko.5
Дякую, працює.
Electroz 
Відео Гуртом - підтримка та поширення
Відео Гуртом - підтримка та поширення


З нами з: 18.09.14
Востаннє: 20.09.19
Повідомлень: 3583

2019-06-24 14:30  
Як прибрати оригінальну доріжку? Потрібно залишити лише українську.
Neytreenor 
Відео Гуртом - запис з ТБ
Відео Гуртом - запис з ТБ


З нами з: 03.04.11
Востаннє: 20.09.19
Повідомлень: 2070

2019-06-24 14:40  
У команді заміни
Код:
-vn
на
Код:
-map 0:a:0

за умови, що українська доріжка перша. Останній нуль - то індекс доріжки (починається з нуля), якщо треба іншу доріжку - міняй його.
krigg070 
Відео Гуртом - фільмокрай
Відео Гуртом - фільмокрай


З нами з: 29.10.14
Востаннє: 20.09.19
Повідомлень: 1611

2019-06-24 22: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
Востаннє: 20.09.19
Повідомлень: 1611

2019-06-25 17: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 
VIP


З нами з: 25.02.16
Востаннє: 20.09.19
Повідомлень: 2586

2019-09-11 09:27  
Питання до знаючих. Треба автоматизувати процес запису та зупинки запису.
Є бат файл, який запускається за допомогою стороннього планувальника

Код:
ffmpeg -i "http://edge0.live.net.ua/play/f1.m3u8" -c copy  "output_14.ts"


яким чином, командою зупинити запис, щоб файл зберігся коректно? Якщо запускати вручну, зупинка виконується натисканням клавіши "q".

І ще одне, як навчити бат кожного разу змінювати назву вихідного файлу, бо коли файл з таким самим іменем існує, програма питає про перезапис, і при автоматичному запуску бат стопориться до відповіді "y/n"?
Neytreenor 
Відео Гуртом - запис з ТБ
Відео Гуртом - запис з ТБ


З нами з: 03.04.11
Востаннє: 20.09.19
Повідомлень: 2070

2019-09-11 10:56  
sergiyko.5 написано:
яким чином, командою зупинити запис, щоб файл зберігся коректно? Якщо запускати вручну, зупинка виконується натисканням клавіши "q".

Можна просто закрити вікно або вбити процес, TS файлу це не страшно. Максимум пара секунд наприкінці загубиться. Якщо вручну бат запускав, то тією ж командою q.

sergiyko.5 написано:
І ще одне, як навчити бат кожного разу змінювати назву вихідного файлу, бо коли файл з таким самим іменем існує, програма питає про перезапис, і при автоматичному запуску бат стопориться до відповіді "y/n"?

Генеруй назву файлу з датою та часом. Гугл має знати як. Як не знайдеш, в мене, здається, десь було таке у скриптах.

Плюс у ffmpeg є флаги -y та -n щоб автоматично перезаписувати та не перезаписувати відповідно.
sergiyko.5 
VIP


З нами з: 25.02.16
Востаннє: 20.09.19
Повідомлень: 2586

2019-09-11 11:10  
Neytreenor написано:
Можна просто закрити вікно або вбити процес, TS файлу це не страшно. Максимум пара секунд наприкінці загубиться. Якщо вручну бат запускав, то тією ж командою q.


без оператора компьютера як це зробити, щоб файл не писався безкінечно, коли я на роботі.

Були випадки некоректного закриття файлу і не одна програма не змогла відкрити файл.

Ви мене зовсім не зрозуміли, процес треба автоматизувати.
Neytreenor 
Відео Гуртом - запис з ТБ
Відео Гуртом - запис з ТБ


З нами з: 03.04.11
Востаннє: 20.09.19
Повідомлень: 2070

2019-09-11 11:29  
sergiyko.5 написано:
Були випадки некоректного закриття файлу і не одна програма не змогла відкрити файл.

Скільки пишу ffmpeg-ом, проблем з тим, що запис закінчився через вбивання процесу не було. Бували кілька разів випадки коли через проблеми в потоці криво записував (починав писати в другу відеодоріжку), але це інше.

sergiyko.5 написано:
Ви мене зовсім не зрозуміли, процес треба автоматизувати.

Якщо запускаєш планувальником, то тут можуть бути проблеми, бо ти запускаєш не ffmpeg напряму, а бат файл, ffmpeg запускається окремим процесом і його з планувальника не прикінчити Sad (1). Колись теж намагався прикрутити скрипти запису до наявних планувальників, врешті-решт закінчилося тим, що написав нашвидкоруч собі свій планувальник, з гівна і палок, але працює.
sergiyko.5 
VIP


З нами з: 25.02.16
Востаннє: 20.09.19
Повідомлень: 2586

2019-09-11 11:51  
Neytreenor написано:
ffmpeg запускається окремим процесом і його з планувальника не прикінчити

Ну це мабуть спірне питання, тому і звертаюсь до спеців, я зовсім не програміст.

Додано через 17 хвилин 58 секунд:

Є команда tasklist яка визначає список та pid процесів

і команда taskkill /pid 5278 яка вбиває визначений процес. Треба це повязати скриптом і все спрацює.
Neytreenor 
Відео Гуртом - запис з ТБ
Відео Гуртом - запис з ТБ


З нами з: 03.04.11
Востаннє: 20.09.19
Повідомлень: 2070

2019-09-11 11:58  
sergiyko.5
Ще можна ffmpe-у сказати скільки часу треба писати. Після вказаного часу він закриває файл і виходить.

Це як альтернативна ідея.
sergiyko.5 
VIP


З нами з: 25.02.16
Востаннє: 20.09.19
Повідомлень: 2586

2019-09-11 12: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%"
Ваш часовий пояс: GMT + 2 Години

Нова тема   Відповісти Сторінка:  1, 2  наступна