Я определил, какие файлы являются левым и правым аудиоканалами.
Файлы с 00 после «High» - это ЛЕВЫЙ аудио. Файлы с «01» после «High» - это RIGHT Audio.
. Пожалуйста, отредактируйте нижеприведенное, чтобы иметь правильные пути, и отредактируйте команду FFMPeg по своему вкусу.
Я не знаком с FFMPeg ипросто потратил несколько часов, пытаясь выяснить, как объединить видео и аудио, чтобы оно могло быть неправильным.
Редактировать:
@(SetLocal EnableDelayedExpansion
ECHO OFF
SET "_Src_Path_M2v=C:\Users\Username\Documents\VideoFiles"
SET "_Src_Path_Wav=C:\Users\Username\Documents\AudioFiles"
SET "_Dst_Path=C:\Users\Username\Documents\MergedFiles"
SET "_Dst_Ext=.Mxf"
SET "_CMD_FFMpeg=C:\Path\to\FFMPEG\ffmpeg.exe"
SET "_CMD_FFMpeg_Options= -map 0:0 -vcodec mpeg2video -s 1920x1080 -b:v 50000k -maxrate 50000k -bufsize 3835k -minrate 50000k -r 25 -flags ilme -top 1 -acodec pcm_s24le -ar 48000 -pix_fmt yuv422p -map 1:0 -c:a pcm_s24le -ar 48000 -map 2:0 -c:a pcm_s24le -ar 48000 "
REM -i video.m2v -i right.wav -i left.wav -map 0:0 -vcodec mpeg2video -s 1920x1080 -b:v 50000k -maxrate 50000k -bufsize 3835k -minrate 50000k -r 25 -flags ilme -top 1 -acodec pcm_s24le -ar 48000 -pix_fmt yuv422p -map 1:0 -c:a pcm_s24le -ar 48000 -map 2:0 -c:a pcm_s24le -ar 48000 !video!.mxf
)
CALL :Main
( ENDLOCAL
EXIT /B
)
:Main
IF NOT EXIST "%_Dst_Path%\" MD "%_Dst_Path%\"
REM Loop the M2v Folder Matching the Number after PAV_PRG_
FOR %%_ IN (
"%_Src_Path_M2v%\*.m2v"
) DO (
ECHO.
ECHO.===================================
FOR /F "Tokens=1 Delims=c" %%A IN (
"%%~n_"
) DO (
SET "_Temp_Output=%%A"
ECHO.Unique Sequence = "%%A", so Audio must start with "%%A"
REM Find Left Audio (File 1)
FOR %%a IN ("%_Src_Path_Wav%\%%A00*.wav"
) DO ( SET "_Temp_Audio_00=%%~fa" )
REM Find Right Audio (File 2)
FOR %%a IN ("%_Src_Path_Wav%\%%A01*.wav"
) DO ( SET "_Temp_Audio_01=%%~fa" )
)
REM We now have all of the values we need.
REM "%%_" holds the path of the M2v file.
REM _Temp_Audio_ "00" and "01" hold the full paths to the audio files.
REM Now we Output what we have found and run FFMPEG
ECHO.
ECHO.* *** M2v File: - %%~f_
ECHO. * Left Audio: - !_Temp_Audio_00!
ECHO. * Right Audio: - !_Temp_Audio_01!
REM Set the command to a temp variable so we can echo it then execute it.
REM -i video.m2v -i right.wav -i left.wav -map 0:0 -vcodec mpeg2video -s 1920x1080 -b:v 50000k -maxrate 50000k -bufsize 3835k -minrate 50000k -r 25 -flags ilme -top 1 -acodec pcm_s24le -ar 48000 -pix_fmt yuv422p -map 1:0 -c:a pcm_s24le -ar 48000 -map 2:0 -c:a pcm_s24le -ar 48000 !video!.mxf
SET "_Temp_Full_Cmd="%_CMD_FFMpeg%" -i "%%~f_" -i "!_Temp_Audio_01!" -i "!_Temp_Audio_00!" %_CMD_FFMpeg_Options% "%_Dst_Path%\!_Temp_Output!_Result%_Dst_Ext%""
ECHO. * Running: !_Temp_Full_Cmd!
!_Temp_Full_Cmd!
)
GOTO :EOF
предыдущий
@(SetLocal EnableDelayedExpansion
ECHO OFF
SET "_Src_Path_M2v=C:\Users\Username\Documents\VideoFiles"
SET "_Src_Path_Wav=C:\Users\Username\Documents\AudioFiles"
SET "_Dst_Path=C:\Users\Username\Documents\MergedFiles"
SET "_Dst_Ext=.Mxf"
SET "_CMD_FFMpeg=C:\Path\to\FFMPEG\ffmpeg.exe"
SET "_CMD_FFMpeg_Options= -map 0:0 -vcodec mpeg2video -s 1920x1080 -b:v 50000k -maxrate 50000k -bufsize 3835k -minrate 50000k -r 25 -flags ilme -top 1 -acodec pcm_s24le -ar 48000 -pix_fmt yuv422p -map 1:0 -c:a pcm_s24le -ar 48000 -map 2:0 -c:a pcm_s24le -ar 48000 "
REM -i video.m2v -i right.wav -i left.wav -map 0:0 -vcodec mpeg2video -s 1920x1080 -b:v 50000k -maxrate 50000k -bufsize 3835k -minrate 50000k -r 25 -flags ilme -top 1 -acodec pcm_s24le -ar 48000 -pix_fmt yuv422p -map 1:0 -c:a pcm_s24le -ar 48000 -map 2:0 -c:a pcm_s24le -ar 48000 !video!.mxf
)
CALL :Main
( ENDLOCAL
EXIT /B
)
:Main
IF NOT EXIST "%_Dst_Path%\" MD "%_Dst_Path%\"
REM Loop the M2v Folder Matching the Number after PAV_PRG_
FOR %%_ IN (
"%_Src_Path_M2v%\*.m2v"
) DO (
ECHO.
ECHO.===================================
FOR /F "Tokens=1-4 Delims=_Hc" %%A IN (
"%%~n_"
) DO (
SET "_Temp_Output=%%A_%%B_%%CH%%D"
ECHO.Unique Sequence = "%%C", so Audio must start with "%%A_%%B_%%CH%%D"
REM Find Left Audio (File 1)
FOR %%a IN ("%_Src_Path_Wav%\%%A_%%B_%%CH%%D00*.wav"
) DO ( SET "_Temp_Audio_00=%%~fa" )
REM Find Right Audio (File 2)
FOR %%a IN ("%_Src_Path_Wav%\%%A_%%B_%%CH%%D01*.wav"
) DO ( SET "_Temp_Audio_01=%%~fa" )
)
REM We now have all of the values we need.
REM "%%_" holds the path of the M2v file.
REM _Temp_Audio_ "00" and "01" hold the full paths to the audio files.
REM Now we Output what we have found and run FFMPEG
ECHO.
ECHO.* *** M2v File: - %%~f_
ECHO. * Left Audio: - !_Temp_Audio_00!
ECHO. * Right Audio: - !_Temp_Audio_01!
REM Set the command to a temp variable so we can echo it then execute it.
REM -i video.m2v -i right.wav -i left.wav -map 0:0 -vcodec mpeg2video -s 1920x1080 -b:v 50000k -maxrate 50000k -bufsize 3835k -minrate 50000k -r 25 -flags ilme -top 1 -acodec pcm_s24le -ar 48000 -pix_fmt yuv422p -map 1:0 -c:a pcm_s24le -ar 48000 -map 2:0 -c:a pcm_s24le -ar 48000 !video!.mxf
SET "_Temp_Full_Cmd="%_CMD_FFMpeg%" -i "%%~f_" -i "!_Temp_Audio_01!" -i "!_Temp_Audio_00!" %_CMD_FFMpeg_Options% "%_Dst_Path%\!_Temp_Output!_Result%_Dst_Ext%""
ECHO. * Running: !_Temp_Full_Cmd!
!_Temp_Full_Cmd!
)
GOTO :EOF
Пример вывода:
C:\Admin>C:\Admin\SO_FFMPEG_v3.1.cmd
===================================
Unique Sequence = "13683", so Audio must start with "PAV_PRG_13683High"
* *** M2v File: - C:\Users\Username\Documents\VideoFiles\PAV_PRG_13683Highc450277201906251802090353.m2v
* Left Audio: - C:\Users\Username\Documents\AudioFiles\PAV_PRG_13683High00c450277201906251802090777.wav
* Right Audio: - C:\Users\Username\Documents\AudioFiles\PAV_PRG_13683High01c450277201906251802090368.wav
* Running: "C:\Path\to\FFMPEG\ffmpeg.exe" -i "C:\Users\Username\Documents\VideoFiles\PAV_PRG_13683Highc450277201906251802090353.m2v" -i "C:\Users\Username\Documents\AudioFiles\PAV_PRG_13683High01c450277201906251802090368.wav" -i "C:\Users\Username\Documents\AudioFiles\PAV_PRG_13683High00c450277201906251802090777.wav" -map 0:0 -vcodec mpeg2video -s 1920x1080 -b:v 50000k -maxrate 50000k -bufsize 3835k -minrate 50000k -r 25 -flags ilme -top 1 -acodec pcm_s24le -ar 48000 -pix_fmt yuv422p -map 1:0 -c:a pcm_s24le -ar 48000 -map 2:0 -c:a pcm_s24le -ar 48000 "C:\Users\Username\Documents\MergedFiles\PAV_PRG_13683High_Result.Mxf"
===================================
Unique Sequence = "13686", so Audio must start with "PAV_PRG_13686High"
* *** M2v File: - C:\Users\Username\Documents\VideoFiles\PAV_PRG_13686Highc450277201906251803430188.m2v
* Left Audio: - C:\Users\Username\Documents\AudioFiles\PAV_PRG_13683High00c450277201906251802090777.wav
* Right Audio: - C:\Users\Username\Documents\AudioFiles\PAV_PRG_13683High01c450277201906251802090368.wav
* Running: "C:\Path\to\FFMPEG\ffmpeg.exe" -i "C:\Users\Username\Documents\VideoFiles\PAV_PRG_13686Highc450277201906251803430188.m2v" -i "C:\Users\Username\Documents\AudioFiles\PAV_PRG_13683High01c450277201906251802090368.wav" -i "C:\Users\Username\Documents\AudioFiles\PAV_PRG_13683High00c450277201906251802090777.wav" -map 0:0 -vcodec mpeg2video -s 1920x1080 -b:v 50000k -maxrate 50000k -bufsize 3835k -minrate 50000k -r 25 -flags ilme -top 1 -acodec pcm_s24le -ar 48000 -pix_fmt yuv422p -map 1:0 -c:a pcm_s24le -ar 48000 -map 2:0 -c:a pcm_s24le -ar 48000 "C:\Users\Username\Documents\MergedFiles\PAV_PRG_13686High_Result.Mxf"
===================================
Unique Sequence = "13717", so Audio must start with "PAV_PRG_13717High"
* *** M2v File: - C:\Users\Username\Documents\VideoFiles\PAV_PRG_13717Highc450277201906251813110160.m2v
* Left Audio: - C:\Users\Username\Documents\AudioFiles\PAV_PRG_13717High00c450277201906251813110333.wav
* Right Audio: - C:\Users\Username\Documents\AudioFiles\PAV_PRG_13717High01c450277201906251813110194.wav
* Running: "C:\Path\to\FFMPEG\ffmpeg.exe" -i "C:\Users\Username\Documents\VideoFiles\PAV_PRG_13717Highc450277201906251813110160.m2v" -i "C:\Users\Username\Documents\AudioFiles\PAV_PRG_13717High01c450277201906251813110194.wav" -i "C:\Users\Username\Documents\AudioFiles\PAV_PRG_13717High00c450277201906251813110333.wav" -map 0:0 -vcodec mpeg2video -s 1920x1080 -b:v 50000k -maxrate 50000k -bufsize 3835k -minrate 50000k -r 25 -flags ilme -top 1 -acodec pcm_s24le -ar 48000 -pix_fmt yuv422p -map 1:0 -c:a pcm_s24le -ar 48000 -map 2:0 -c:a pcm_s24le -ar 48000 "C:\Users\Username\Documents\MergedFiles\PAV_PRG_13717High_Result.Mxf"
C:\Admin>
Я полагаю, что это правильный синтаксис для объединения двух ваших монофонических аудиопотоков и объединения всех трех в один выходной файл.
Я потратил гораздо больше времени, чем ожидал, чтобы понять, какделать это в FFMPeg, и вы вполне можете стремиться сделать что-то гораздо более сложное, поэтому, во что бы то ни стало, смело заменяйте его своим. :)
Примечания, я думаю, уже не так актуальны из первоначальной публикации:
Имя файла совпадает, пока не увидит слово High. Все после High не нужно (это просто случайная строка), поэтому попытка сопоставления является проблемой.
Я нахожу это немного неясным:
ВСЕ ли файлы будут иметь «Highc» или «Highc» будет уникальным для каждого видео?
Или «High» будет уникальным для каждого видео и «c» и всего после негобудет в состоянии быть проигнорированным?
IE: Вам нужно только искать PAV_PRG_13683
или это PAV_PRG_13683High
, или это PAV_PRG_13683Highc
ТАКЖЕПодчеркивание всегда будет присутствовать? Как насчет PAV
и PRG
?
Я подозреваю, что единственным значением, которое каждый файл определяет уникально для каждой пары движение / аудио, является либо уникальное значение, либо 13683
,13683High
или 13683Highc
.
IE. Я полагаю, что каждый файл будет иметь префикс PAV_PRG_
, что делает это значение необязательным для сопоставления и позволяет процессу работать намного проще. Непонятно, одинаковы ли «High
» или «Highc
» во всех файлах,но если префикс действительно не нужен, это будет легко в любом случае.
Тем не менее, сейчас я предположу, что High неуникально, поэтому все файлы имеют "High" на данный момент
Тем не менее, я могу определить правильный левый и правый аудиоканалы.
Я заметил, что пространство между High и c явно имеет 00 и 01 в аудиофайлах, AudioКаналы обычно освещают канал 0 = левый канал, канал 1 = правый канал (независимо от того, был ли источник стереофоническим, 2.1 или 5.1.)
При обработке звуковых дорожек Программное обеспечение будет следовать этому стандартному методу обращения к каналам. и должен выводить в файлы со значением 00, указывающим первый аудиоканал (слева), 01, указывающим второй аудиоканал (справа), если не было предпринято каких-либо действий для изменения этого поведения. r.
В соответствии с вышеприведенным предположением, это может быть необходимо.
Обратите внимание, что вам нужно будет отредактировать скрипт, чтобы в заданных переменных были заданы правильные пути.