Difference between revisions of "VLC HowTo/Transcode multiple videos"

From VideoLAN Wiki
Jump to navigation Jump to search
m (tag with Template:Howto for consistency)
m (syntaxhighlight, whitespace)
Line 1: Line 1:
 
{{Howto|batch transcode or encode}}
 
{{Howto|batch transcode or encode}}
 +
 
== Idea ==
 
== Idea ==
 
The idea is to use VLC to do some batch work to encode or transcode multiple files one after each other, without having to care about it.  
 
The idea is to use VLC to do some batch work to encode or transcode multiple files one after each other, without having to care about it.  
Line 6: Line 7:
  
 
== Codecs / Muxers ==
 
== Codecs / Muxers ==
 
 
You have to choose the correct codecs for the device you want to transcode for.
 
You have to choose the correct codecs for the device you want to transcode for.
  
Line 12: Line 12:
  
 
== GUI ==
 
== GUI ==
 
 
Batch convert is supported via the GUI in VLC 3.0.0
 
Batch convert is supported via the GUI in VLC 3.0.0
  
 
If you cannot wait, download a nightly build.  Otherwise, use command-line batch transcoding below.
 
If you cannot wait, download a nightly build.  Otherwise, use command-line batch transcoding below.
 
  
 
== Command Lines ==
 
== Command Lines ==
 
 
=== Windows ===
 
=== Windows ===
 
+
<big><big><syntaxhighlight lang="dos">
 
  for %%a in (*.VOB) do "C:\Program Files\VideoLAN\VLC\vlc" -I dummy -vvv %%a --sout=#transcode{vcodec=h264,vb=1024,acodec=mp4a,ab=192,channels=2,deinterlace}:standard{access=file,mux=ts,dst=%%a.mpg} vlc://quit
 
  for %%a in (*.VOB) do "C:\Program Files\VideoLAN\VLC\vlc" -I dummy -vvv %%a --sout=#transcode{vcodec=h264,vb=1024,acodec=mp4a,ab=192,channels=2,deinterlace}:standard{access=file,mux=ts,dst=%%a.mpg} vlc://quit
  
Line 75: Line 72:
 
   
 
   
 
  :eof
 
  :eof
 
+
</syntaxhighlight></big></big>
  
 
The same as above, for vlc >= 0.9:
 
The same as above, for vlc >= 0.9:
 +
<big><big><syntaxhighlight lang="dos">
 
  @ECHO OFF
 
  @ECHO OFF
 
  FOR /R %%G IN (*.m4a) DO (CALL :SUB_VLC "%%G")
 
  FOR /R %%G IN (*.m4a) DO (CALL :SUB_VLC "%%G")
Line 102: Line 100:
 
   
 
   
 
  :eof
 
  :eof
+
</syntaxhighlight></big></big>
  
 
=== Windows 7 SendTo ===
 
=== Windows 7 SendTo ===
 +
<big><big><syntaxhighlight lang="dos">
 
This batch file allows to use the Windows SendTo context menue in Exlorer.
 
This batch file allows to use the Windows SendTo context menue in Exlorer.
 
Copy the content in a file named MOV_to_MPG_Converter.bat and copy it to your SendTo directory (CMD SHELL:sendto)
 
Copy the content in a file named MOV_to_MPG_Converter.bat and copy it to your SendTo directory (CMD SHELL:sendto)
Line 167: Line 166:
 
  echo **********************************************************************
 
  echo **********************************************************************
 
  pause
 
  pause
 +
</syntaxhighlight></big></big>
  
 
=== Powershell ===
 
=== Powershell ===
+
<big><big><syntaxhighlight lang="powershell">   
   
 
 
     $outputExtension = ".mp3"
 
     $outputExtension = ".mp3"
 
     $bitrate = 160
 
     $bitrate = 160
Line 188: Line 187:
 
       start-process $processName $processArgs -wait
 
       start-process $processName $processArgs -wait
 
     }
 
     }
 +
</syntaxhighlight></big></big>
 
      
 
      
 
=== Unix / Linux ===
 
=== Unix / Linux ===
 
 
This can take one file (file.flv), or a wildcard (*.flv). Also supports path with spaces.
 
This can take one file (file.flv), or a wildcard (*.flv). Also supports path with spaces.
  
 +
<big><big><syntaxhighlight lang="bash">
 
  #!/bin/sh                                                                                                                                                     
 
  #!/bin/sh                                                                                                                                                     
 
   
 
   
Line 223: Line 223:
 
     echo
 
     echo
 
  done
 
  done
 +
</syntaxhighlight></big></big>

Revision as of 07:54, 29 January 2019

This page describes how to batch transcode or encode. Other "how to" pages

Idea

The idea is to use VLC to do some batch work to encode or transcode multiple files one after each other, without having to care about it.

You may want to transcode all your videotheque to another format to play them on an IPod, a Zune, a PS3 or a Xbox.

Codecs / Muxers

You have to choose the correct codecs for the device you want to transcode for.

We choose here H.264 with AAC in a MPEG-2/TS muxer as an example.

GUI

Batch convert is supported via the GUI in VLC 3.0.0

If you cannot wait, download a nightly build. Otherwise, use command-line batch transcoding below.

Command Lines

Windows

 for %%a in (*.VOB) do "C:\Program Files\VideoLAN\VLC\vlc" -I dummy -vvv %%a --sout=#transcode{vcodec=h264,vb=1024,acodec=mp4a,ab=192,channels=2,deinterlace}:standard{access=file,mux=ts,dst=%%a.mpg} vlc://quit

For example, to transcode a batch of m4a files (potentially in multiple subdirectories of a single common root directory) to mp3 files (512kb/s encoding with 44100 sampling frequency) you could use the following code in a Windows XP command prompt:
 @ECHO OFF
 REM ########################################################################
 REM # A Windows XP cmd.com script to batch convert m4a files to mp3.       #
 REM #                                                                      #
 REM # Copyright (C) 2008 Andrew Boden                                      #
 REM # (boden@graduate.uwa.edu.au)                                          #
 REM #                                                                      #
 REM # This program is free software: you can redistribute it and/or modify #
 REM # it under the terms of the GNU General Public License as published by #
 REM # the Free Software Foundation, either version 3 of the License, or    #
 REM # (at your option) any later version.                                  # 
 REM #                                                                      #
 REM # This program is distributed in the hope that it will be useful,      #
 REM # but WITHOUT ANY WARRANTY; without even the implied warranty of       #
 REM # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        #
 REM # GNU General Public License for more details.                         #
 REM #                                                                      #
 REM # You should have received a copy of the GNU General Public License    #
 REM # along with this program.  If not, see <http://www.gnu.org/licenses/>.#
 REM #                                                                      #
 REM # Version 1.0 (June 27th 2008)                                         #
 REM # Uses VideoLAN VLC 0.8.6h (www.videolan.org)                          #
 REM # Gracefully handles commas and apostrophes in file names.             #
 REM # Not aware of any other characters needing graceful handling.         #
 REM # 512kbps encoding with 44100 sampling.                                #
 REM ########################################################################
 
 FOR /R %%G IN (*.m4a) DO (CALL :SUB_VLC "%%G")
 FOR /R %%G IN (*.m4a.mp*) DO (CALL :SUB_RENAME "%%G")
 GOTO :eof
 
 :SUB_VLC
  SET _firstbit=%1
  SET _qt="
  CALL SET _newnm=%%_firstbit:%_qt%=%%
  SET _commanm=%_newnm:,=_COMMA_%
  REM echo %_commanm%
  CALL "C:\Program Files\VideoLAN\VLC\vlc" -I dummy -vvv %1 --sout=#transcode{acodec="mpga",ab="512","channels=2",samplerate="44100"}:standard{access="file",mux="mpeg1",dst="%_commanm%.mp3"} vlc://quit
 GOTO :eof
 
 :SUB_RENAME
  SET _origfnm=%1
  SET _endbit=%_origfnm:*.m4a=%
  CALL SET _newfilenm=%%_origfnm:.m4a%_endbit%=.mp3%%
  SET _newfilenm=%_newfilenm:_COMMA_=,%
  COPY %1 %_newfilenm%
  DEL %1
 GOTO :eof
 
 :eof

The same as above, for vlc >= 0.9:

 @ECHO OFF
 FOR /R %%G IN (*.m4a) DO (CALL :SUB_VLC "%%G")
 FOR /R %%G IN (*.m4a.mp*) DO (CALL :SUB_RENAME "%%G")
 GOTO :eof
 
 :SUB_VLC
  SET _firstbit=%1
  SET _qt="
  CALL SET _newnm=%%_firstbit:%_qt%=%%
  SET _commanm=%_newnm:,=_COMMA_%
  REM echo %_commanm%
  CALL "C:\Program Files\VideoLAN\VLC\vlc" -I dummy -vvv %1 --sout=#transcode{acodec="mpga",ab="512","channels=2"}:standard{access="file",mux="raw",dst="%_commanm%.mp3"} vlc://quit
 GOTO :eof
 
 :SUB_RENAME
  SET _origfnm=%1
  SET _endbit=%_origfnm:*.m4a=%
  CALL SET _newfilenm=%%_origfnm:.m4a%_endbit%=.mp3%%
  SET _newfilenm=%_newfilenm:_COMMA_=,%
  COPY %1 %_newfilenm%
  DEL %1
 GOTO :eof
 
 :eof

Windows 7 SendTo

This batch file allows to use the Windows SendTo context menue in Exlorer.
Copy the content in a file named MOV_to_MPG_Converter.bat and copy it to your SendTo directory (CMD SHELL:sendto)

 @ECHO OFF
 rem ***********************************************************************
 rem * MOV to MPG batch converter. (2014-09-29 Sinx)                       *
 rem *                                                                     *
 rem * For installation just copy batch file to SendTo directory.          *
 rem * On Win8 execute "SHELL:sendto" to go to Sendto folder.              *
 rem *                                                                     *
 rem * I got quite good compression rations with these parameters:         *
 rem * vcodec=h264      codec used                                         *
 rem * vb=10000         video bandwidth                                    *
 rem * deinterlace=1    rebuild full pictures from keyframes and diffs.    *
 rem * acodec=mp3       audio codec                                        *
 rem * ab=128           128kbps mp3 quality                                *
 rem * channels=2       stereo                                             *
 rem *                                                                     *
 rem * for parameters see                                                  *
 rem * http://www.videolan.org/doc/vlc-user-guide/de/ch04.html             *
 rem ***********************************************************************
 echo **********************************************************************
 echo MOV to MPG VLC batch converter called: %0 %1 %2 %3 %4 %5 %6 %7 %8
 echo **********************************************************************
 echo.
 echo For installation, just copy batch file to SendTo folder..
 echo.
 
 SET _new_extention=mpg
 
 :start
 if "%~1"=="" (call goto :the_end)
 CALL :SUB_CONVERT %1
 SHIFT
 goto :start
 
 
 :SUB_CONVERT
 SET _orig_path=%~1
 rem SET _orig_extention=%_orig_filename:*.=%
 echo %_orig_path%
 SET _orig_extention=%_orig_path:*.=%
 CALL SET _new_path=%%_orig_path%:.%_orig_extention%=.%_new_extention%%%
 set _new_path="%_new_path%"
 echo.
 echo Converting %1 ======TO===== %_new_path% ...
 echo.
 
 if exist "%ProgramFiles%\VideoLAN\VLC\vlc.exe" (
 SET _vlc_path="%ProgramFiles%\VideoLAN\VLC\vlc"
 ) else (
 SET _vlc_path="%ProgramFiles(x86)%\VideoLAN\VLC\vlc"
 )
 
 CALL %_vlc_path% -I dummy -vvv %1 --sout=#transcode{vcodec=h264,vb=10000,deinterlace=1,acodec=mp3,ab=128,channels=2,samplerate=44100}:standard{access=file,mux=ts,dst=%_new_path%} vlc://quit
 GOTO :eof
 
 :the_end
 echo **********************************************************************
 echo * FINISHED                                                           *
 echo **********************************************************************
 pause

Powershell

    
    $outputExtension = ".mp3"
    $bitrate = 160
    $channels = 2
    
    foreach($inputFile in get-childitem -recurse -Filter *.wav)
    { 
      $outputFileName = [System.IO.Path]::GetFileNameWithoutExtension($inputFile.FullName) + $outputExtension;
      $outputFileName = [System.IO.Path]::Combine($inputFile.DirectoryName, $outputFileName);
      
      $programFiles = ${env:ProgramFiles(x86)};
      if($programFiles -eq $null) { $programFiles = $env:ProgramFiles; }
      
      $processName = $programFiles + "\VideoLAN\VLC\vlc.exe"
      $processArgs = "-I dummy -vvv `"$($inputFile.FullName)`" --sout=#transcode{acodec=`"mp3`",ab=`"$bitrate`",`"channels=$channels`"}:standard{access=`"file`",mux=`"wav`",dst=`"$outputFileName`"} vlc://quit"
      
      start-process $processName $processArgs -wait
    }

Unix / Linux

This can take one file (file.flv), or a wildcard (*.flv). Also supports path with spaces.

 #!/bin/sh                                                                                                                                                     
 
 vcodec="mp4v"
 acodec="mp4a"
 bitrate="1024"
 arate="128"
 mux="mp4"
 
 # For Linux                                                                                                                                                   
 vlc="/usr/bin/vlc"                                                                                                                                           
 # For OSX                                                                                                                                                     
 #vlc="/Applications/Utilities/VLC.app/Contents/MacOS/VLC"
 
 if [ ! -e "$vlc" ]; then
     echo "Command '$vlc' does not exist"
     exit 1
 fi
 
 for file in "$@"; do
     echo "=> Transcoding '$file'... "
 
     dst=`dirname "$file"`
     new=`basename "$file" | sed 's@\.[a-z][a-z][a-z]$@@'`.$mux
 
     $vlc -I dummy -q "$file" \
        --sout "#transcode{vcodec=mp4v,vb=1024,acodec=mp4a,ab=128}:standard{mux=mp4,dst=\"$dst/$new\",access=file}" \
        vlc://quit
     ls -lh "$file" "$dst/$new"
     echo
 done