我确定了哪些文件是左右声道。
“高”后带有 00 的文件是 LEFT 音频。
“High”后有01的文件为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
ALSO 下划线是否总是存在? PAV 和 PRG 呢?
我怀疑每个文件为每个移动/音频对唯一定义的唯一值是 13683、13683High 或 13683Highc。
IE。我相信每个文件都将以 PAV_PRG_" 为前缀,这使得该值不必匹配,并允许该过程更简单地工作。不清楚 "High" 或 "Highc" 在所有文件上是否也相同,但如果确实不需要前缀,那么无论哪种方式都很容易。
不过,现在我会假设 High 是非唯一的,所以现在所有文件都有“High”
也就是说,我能够确定正确的左右声道。
我注意到High和c之间的空间在音频文件上显然有一个00和01,音频通道通常是通道0 =左通道,通道1 =右通道。 (源是立体声、2.1 还是 5.1。)
在处理音轨时,软件将遵循此引用通道的默认方法,并应输出到文件,其中 00 表示第一个音频通道(左),01 表示第二个音频通道(右),除非采取了一些行动来改变这种行为。
根据上述假设,这将是必要的。
请注意,您需要编辑脚本以在提供的变量中设置正确的路径。