1

Тема: OFF: Редактирование аудиодорожки видеофайла

Приветствую. Люблю смотреть фильмы хорошего качества на большом телике. Подключаю флешку к медиаплейеру ICONBit и… частенько случается, что аудиокодек не поддерживается, то есть идет картинка без звука. Можно в принципе идти новый медиаплейер, однако не хочется деньги тратить. Поэтому думаю решить проблему простым конвертирование аудиодорожки в знакомый плейеру формат с использованием скрипта с утилиткой по редактированию аудио, управляемой из командной строки. Что-нибудь можете посоветовать? Встречались с такой проблемой?

2

Re: OFF: Редактирование аудиодорожки видеофайла

У меня была похожая задача- нужно было вырезать семпл, используя определённые кодеки. Мне помог VirtualDubMod.

3

Re: OFF: Редактирование аудиодорожки видеофайла

ffmpeg тебе в помощь.
http://ffmpeg.zeranoe.com/builds/

4

Re: OFF: Редактирование аудиодорожки видеофайла

Можно ещё сюда заглянуть.

5

Re: OFF: Редактирование аудиодорожки видеофайла

Большое спасибо! Сейчас посмотрю:)

UPDATE

var WshShell = new ActiveXObject("WScript.Shell");
WshShell.CurrentDirectory = WScript.ScriptFullName.replace(/[^\\]+$/,"");

var Command = "ffmpeg -i \""+WScript.Arguments(0)+"\" -acodec mp3 -f mp4 \""+WScript.Arguments(0)+".Output.mp4\"";
WshShell.Run(Command);

Проверяю:)

6

Re: OFF: Редактирование аудиодорожки видеофайла

Все получилось!

Вот даже написал вот такой скрипт. Бросаем на него скачанный видео-файл. Далее скрипт информирует, нужно ли его перекодировать. Если формат аудио-контента не устраивает, то скрипт его конвертирует в mp3, а контейнер в mp4.

function GenerateString(L)
{
     return new ActiveXObject('Scriptlet.TypeLib').Guid.replace(/[^\w]+/g,"").slice(0,L);
}

var WshShell = new ActiveXObject("WScript.Shell");
var FSO = fso = new ActiveXObject("Scripting.FileSystemObject");

function isFile(Path)
{
    return fso.FileExists(Path);
}

function DeleteFile(Path)
{
    Path = WshShell.ExpandEnvironmentStrings(Path);
    FSO.DeleteFile(Path, true);
}

function ReadTextFile(Path)
{
    Path = WshShell.ExpandEnvironmentStrings(Path);
    if (!Path) return "";
    if (!isFile(Path)) return "";
    if (FSO.GetFile(Path).Size==0) return "";

    try 
    {
        var Stream = FSO.OpenTextFile(Path, 1, 0),
        Result = Stream.ReadAll();
        Stream.Close();
        return Result;
    }
    catch (e) {};
}

WshShell.CurrentDirectory = WScript.ScriptFullName.replace(/[^\\]+$/,"");

var File = WshShell.CurrentDirectory+"\\"+GenerateString(12);

var Command1 = "cmd /c ffmpeg -i \""+WScript.Arguments(0)+"\" 2> \""+File+"\"";
WshShell.Run(Command1, 0, 1);

var Text = ReadTextFile(File);
DeleteFile(File);

if (/Audio: ac3/i.test(Text)) 
    WScript.Echo("Для указанного файла требуется кодирование.");
else
{
    WScript.Echo("Для указанного файла не требуется кодирование.");
    WScript.Quit();
}

var Command2 = "ffmpeg -i \""+WScript.Arguments(0)+"\" -acodec mp3 -f mp4 \""+WScript.Arguments(0)+".Output.mp4\"";
WshShell.Run(Command2, 1, 1);
WScript.Echo("Процесс окончен.\n\n"+WScript.Arguments(0)+" обработан.");

Всем большое спасибо за советы! Надеюсь, кому-нибудь пригодится.

7

Re: OFF: Редактирование аудиодорожки видеофайла

2JSman, скажите плиз модель вашего плеера.
Дорожка AC3 не слышна не зависимо от контейнера? Или может только в MKV например?
Пробовали обновлять прошивку?

Нас невозможно сбить с пути, нам пофигу куда идти.

8

Re: OFF: Редактирование аудиодорожки видеофайла

DnsIs, Iconbit HDMI33. Понравилось, что цена низкая, а потом догадался почему

Так как качаю контент обычно с торрентов, я немного модифицировал скрипт. Теперь он мониторит создание видео-файла в папке "Загрузки" и автоматически его конвертирует. Как баги исправлю, опубликую.

9

Re: OFF: Редактирование аудиодорожки видеофайла

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

А вот по ссылочке, которую вы дали, в поле "Декодирование аудиокодеков" нацарапано: "...Dolby Digital(R)(AC-3)..." Тогда вопрос wtf?

Почему спросил про матрешку (MKV). У меня не во всех фильмах идет звук и почитав инеты узнал, что при упаковке в контейнер MKV, риперы иногда включают некие флаги, которые не могут переваривать многие хардварные плееры. Поэтому беру прогу MKVToolNix, открываю ей видео. В поле "Дорожки, главы и теги" выбираю дорогу и ниже по вкладке "Дополнительные параметры" -> "Сжатие" выставляю "нет". Аналогично проделываю для всех дорог, по необходимости возле ненужных дорожек вообще галочки убираю. Все. "Начать обработку"
Кстати там и консольная версия в комплекте.

Времени на обработку уходит гораздо меньше чем при вашем способе и не происходит перекодирование видео.
Попробовал обработать вашим скриптом файл, дык он перестал перематываться на "KMPlayer", в VLC нормально. Битрейт стал ниже.


ВЕРОЯТНО у вас аналогичная проблема?
МОЖЕТ БЫТЬ такой финт сработает и на AVI-шках?


Больше ffmpeg мне нравится mencoder.

Нас невозможно сбить с пути, нам пофигу куда идти.

10

Re: OFF: Редактирование аудиодорожки видеофайла

DnsIs, avi также не проигрывается.

Поэкспериментирую с другими утилями. Да еще в скрипт надо добавить поддержку создания нового файла в папке Загрузки, как раз удобно: поставил торренты на ночь, а на утро уже перекодировано.

11 (изменено: DnsIs, 2012-09-05 19:13:28)

Re: OFF: Редактирование аудиодорожки видеофайла

Уважаемые, а давайте может разовьем тему?

Я вот пользую mplayer+mencoder. Мой фотик пишет видео в MJPEG-формат, который не читается на многих хардварных плеерах. Конверт в XviD, делаю так.
Двухпроходное сжатие, качество лучше, файл меньше, кодит долго.

SET AUDIO=-oac mp3lame -lameopts cbr=3:br=320:mode=0 -srate 44100 -af resample=44100:0:0,channels=2,gate
SET VIDEO1=-of avi -ovc xvid -xvidencopts chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:trellis:hq_ac:bitrate=4500:pass=1
SET VIDEO2=-of avi -ovc xvid -xvidencopts chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:trellis:hq_ac:bitrate=4500:pass=2

mencoder %1 -o nul -nosound %VIDEO1%
mencoder %1 -o "%1.avi" %AUDIO% %VIDEO2%

XviD пресет. Размер файла больше чем за 2 прохода, но кодит быстрее.

SET AUDIO=-oac mp3lame -lameopts cbr=3:br=320:mode=0 -srate 44100 -af resample=44100:0:0,channels=2,gate
SET VIDEO=-vf scale=720:576 -ofps 25 -of avi -ovc xvid -xvidencopts profile=dxnhtpal:bitrate=4500
mencoder %1 -o "%1.avi" %AUDIO% %VIDEO%

Очень бы хотелось критики, если кто то тоже увлекается.

Нас невозможно сбить с пути, нам пофигу куда идти.

12

Re: OFF: Редактирование аудиодорожки видеофайла

Для конвертации  аудио/видео  рекомендую Avidemux  (avidemux.org) очень удобная программа.
Имею плейер IconBit 400Le - иногда попадаются фильмы, которые или не воспроизводятся совсем или повисают.
Чаще всего это связано с некорректными заголовками контейнеров. Так вот при помощи это программы зачастую удается быстро "переложить" фильм в другой контейнер - т.е. даже кодировать видео/аудио нет причины.
Кроме того она же позволяет легко вырезать кусок из любого  видеофайла.

13

Re: OFF: Редактирование аудиодорожки видеофайла

Мне тоже очень нравится, но иногда нужна консоль.

Нас невозможно сбить с пути, нам пофигу куда идти.

14

Re: OFF: Редактирование аудиодорожки видеофайла

yuriy2000 пишет:

Чаще всего это связано с некорректными заголовками контейнеров. Так вот при помощи это программы зачастую удается быстро "переложить" фильм в другой контейнер - т.е. даже кодировать видео/аудио нет причины.

Вы абсолютно правы. В ffmpeg есть в том числе возможность копирования текущего кодека, а именно путем использования параметра "-vcodec copy":

var Command2 = "ffmpeg -i \""+WScript.Arguments(0)+"\" -vcodec copy -acodec mp3  \""+WScript.Arguments(0)+".Output.avi\"";

Конвертирование теперь проходит очень быстро, без ухудшения качества.

15 (изменено: Malcev, 2012-11-05 23:57:03)

Re: OFF: Редактирование аудиодорожки видеофайла

А можно просто попробовать избавиться от метаданных.

ffmpeg –i movie.mp4  -c copy –map_metadata:g –1:g  -map_metadata:s:v –1:g –map_metadata:s:a –1:g movie.nometadata.mp4

16

Re: OFF: Редактирование аудиодорожки видеофайла

ffmpeg заинтересовала конечно своими возможностями, но что-то я не могу в ней разобраться... Копался в гугле, в самом файле командами типа -? -h, но нужного мне не разглядел. Мне бы для старта всего лишь 3 примера команды на VBS:
1. Получить от файла (музыки mp3, иногда и wma) его битрейт.
2. Конвертировать музыку в mp3 с нужным мне битрейтом.
3. Конвертировать видео в avi с кодеком xvid пусть будет 1000kbps и mp3 с 96kbps.

Стремление - залог успеха

17

Re: OFF: Редактирование аудиодорожки видеофайла

Со вторым пунктом вроде разобрался, но в результате выходит mp3 не с заданным мной битрейтом (напр.192kbps), а 124kbps в любой попытке. Может быть что-то делаю не так:


Command2 = "ffmpeg -i 1.mp3 -vn -ar 44100 -ac 2 -ab 192 -f mp3 2.mp3"
CreateObject("WScript.Shell").Run Command2, 1, 1
Стремление - залог успеха

18

Re: OFF: Редактирование аудиодорожки видеофайла

1) ffmpeg -i 1.mp3
2) ffmpeg -i 1.mp3 -vn -ar 44100 -ac 2 -ab 192k -f mp3 2.mp3
3) ffmpeg -i 1.avi -vcodec libxvid -vb 1000k -acodec libmp3lame -ab 96k 2.avi

19

Re: OFF: Редактирование аудиодорожки видеофайла

Malcev пишет:
1) ffmpeg -i 1.mp3
2) ffmpeg -i 1.mp3 -vn -ar 44100 -ac 2 -ab 192k -f mp3 2.mp3
3) ffmpeg -i 1.avi -vcodec libxvid -vb 1000k -acodec libmp3lame -ab 96k 2.avi

Спасибо! С конвертацией всё супер, получается, только вот насчёт первого пункта: как получить эту информацию о файле обратно в vbs-скрипт для дальнейшего использования?

Стремление - залог успеха

20

Re: OFF: Редактирование аудиодорожки видеофайла

Если Win версия не отличается от *nix, то при получении информации о файле, ffmpeg еще выдает кучу мусора. Поэтому, перенаправить вывод в текст и потом парсить его.

autoit@conference.jabber.ru - Конференция скриптового языка AutoIt на jabber.ru

21

Re: OFF: Редактирование аудиодорожки видеофайла

Можно с помощью ffprobe

ffprobe -show_entries format=bit_rate 1.mp3

22 (изменено: Lucky, 2013-02-13 20:21:05)

Re: OFF: Редактирование аудиодорожки видеофайла

kaster пишет:

...при получении информации о файле, ffmpeg еще выдает кучу мусора...

Мусор не мусор.. - я его потом как-нибудь отфильтрую, сама задача: как получить эту самую полезную кучу в vbs-переменную? Пробовал так:


Set e = CreateObject("WScript.Shell").Exec("ffmpeg -i 1.mp3")
msgbox e.StdOut.ReadAll

не катит, если всё делаю как надо.

Кстати говоря, может есть какие-нибудь штатные средства vbs получения звуко-инфы, было бы вообще замечательно, в идеале так еще и функции конвертирования... В принципе должны же быть библиотеки и COM объекты работы со звуком и видео.

Стремление - залог успеха

23 (изменено: kaster, 2013-02-13 23:10:30)

Re: OFF: Редактирование аудиодорожки видеофайла

Так говорю же, перенаправить поток в текстовый файл, а потом этот файл считать.

autoit@conference.jabber.ru - Конференция скриптового языка AutoIt на jabber.ru

24

Re: OFF: Редактирование аудиодорожки видеофайла

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

Стремление - залог успеха

25

Re: OFF: Редактирование аудиодорожки видеофайла

Как-то так:

Set e = CreateObject("WScript.Shell").Exec("ffmpeg -i 1.mp3")
msgbox e.StdErr.ReadAll

26

Re: OFF: Редактирование аудиодорожки видеофайла

Так работает. Только там битрейта среди инфы нет у меня.

Стремление - залог успеха

27

Re: OFF: Редактирование аудиодорожки видеофайла

ffmpeg вообще-то не предназначен для вывода инфы. Почему не хотите воспользоваться ffprobe?

28

Re: OFF: Редактирование аудиодорожки видеофайла

Битрейт там должен быть, имхо, просто msgbox выводимую информацию обрезает.
Вот пример вывода с обрезанием инфы:

Set e = CreateObject("WScript.Shell").Exec("""c:\Program Files (x86)\FFMpeg\bin\ffmpeg.exe"" -i 1.mp3")

Do While e.Status = 0
     WScript.Sleep 100
Loop

dim s 
s = e.StdErr.ReadAll

msgbox MId( s, Instr( 1, s , "Duration:", 1 ))

В файл перенаправление из ffmpeg.exe можно так сделать:

ffmpeg -i 1.mp3 2>1.txt

Пример вывода у меня, там в конце битрейт:

+ открыть спойлер

ffmpeg version N-31548-g78accb8, Copyright (c) 2000-2011 the FFmpeg developers
  built on Jul 17 2011 22:41:27 with gcc 4.6.1
  configuration: --enable-gpl --enable-version3 --enable-memalign-hack --enable-runtime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil    51. 11. 0 / 51. 11. 0
  libavcodec   53.  8. 0 / 53.  8. 0
  libavformat  53.  6. 0 / 53.  6. 0
  libavdevice  53.  2. 0 / 53.  2. 0
  libavfilter   2. 27. 0 /  2. 27. 0
  libswscale    2.  0. 0 /  2.  0. 0
  libpostproc  51.  2. 0 / 51.  2. 0
[mp3 @ 0000000001A4EB80] max_analyze_duration 5000000 reached at 5015510
Input #0, mp3, from '1.mp3':
  Metadata:
    album           : In Rock
    artist          : Deep Purple
    genre           : Hard Rock
    title           : Child In Time
    track           : 03/07
    DISCID          : п»ї4309E907
    Accuraterip     : п»їDeep Purple\Deep Purple - 1970 - In Rock (Japan 20P2-2603)\Deep Purple - In Rock.wav

Checking AccurateRip database

Track ->> Ripping Status ->>  ->> [Disc ID: 000b773b-4309e907]

1 ->> Track not present in database.    [a1459cd9]
2 ->> Track
    Album artist    : п»їDeep Purple
    cuesheet        : п»їREM GENRE Classic Rock
REM DATE 1970
REM DISCID 4309E907
REM COMMENT ExactAudioCopy v0.95b3
PERFORMER "Deep Purple"
TITLE "In Rock"
FILE "Deep Purple - In Rock.wv" WAVE
  TRACK 01 AUDIO
    TITLE "Speed King"
    PERFORMER "Deep Purple"
    I
    Log             : п»їEAC extraction logfile from 5. August 2008, 16:59 for CD
Deep Purple / In Rock

Used drive  : SlimtypeDVDRW SOSW-833S   Adapter: 1  ID: 0
Read mode   : Secure with NO C2, accurate stream, disable cache
Read offset correction : 6
Overread into Lea
    date            : 1970
  Duration: 00:10:20.38, start: 0.000000, bitrate: 320 kb/s
    Stream #0.0: Audio: mp3, 44100 Hz, stereo, s16, 320 kb/s
At least one output file must be specified

29 (изменено: Lucky, 2013-02-14 23:15:12)

Re: OFF: Редактирование аудиодорожки видеофайла

Malcev пишет:

ffmpeg вообще-то не предназначен для вывода инфы. Почему не хотите воспользоваться ffprobe?

Не хотел просто оперировать аж 2мя приложениями, оставлял на запасной вариант так сказать. Поэтому даж упомянул о возможности существования и вовсе штатных средст vbs и библиотек...

to Spy00000
Точно выходит.

Спасибо, коллеги!

Стремление - залог успеха