この記事は何
最近DVDに保存していた動画ファイルをmp4ファイルとして書き出す必要があったため、
スクリプトを作成しました。
この記事では記録のためスクリプトの実装を残しておきます。
環境
- Ruby: v3.2.2
- ffmpeg: v7.1
- マシン: MacBook Air M1, 2020
実装したRubyスクリプト
実装したスクリプトは以下の通りです。
require 'fileutils'
# Get the output directory from command-line arguments
if ARGV.length != 1
puts "Usage: ruby export_dvd.rb <file name>"
exit 1
end
# Define the directory containing the VOB files
input_directory = "/path/to/input/directory"
output_directory = "path/to/output/directory"
# Ensure the output directory exists
FileUtils.mkdir_p(output_directory)
# Get all VOB files in the directory, excluding VIDEO_TS.VOB
vob_files = Dir.glob(File.join(input_directory, '*.VOB')).sort
# Create a temporary file list for ffmpeg
file_list = File.join(output_directory, 'file_list.txt')
File.open(file_list, 'w') do |f|
vob_files.each do |vob_file|
f.puts "file '#{vob_file}'"
end
end
# Construct the output MP4 file name
output_file = File.join(output_directory, "#{ARGV[0]}.mp4")
# Call ffmpeg to concatenate the VOB files into a single MP4 file
command = "ffmpeg -f concat -safe 0 -i \"#{file_list}\" -b:v 1500k -r 30 -c:v h264_videotoolbox -pix_fmt yuv420p -strict -2 -acodec aac -ar 44100 \"#{output_file}\""
puts "Executing: #{command}"
system(command)
# Check if the conversion was successful
if $?.exitstatus != 0
puts "Error concatenating VOB files to MP4"
else
puts "Successfully concatenated VOB files to #{output_file}"
end
# Clean up the temporary file list
File.delete(file_list)
利用方法
input_directory
には、VOBファイルが保存されているディレクトリを指定します。
DVDから直接書き出したい場合は/Volumes/DVDボリューム名
のようなパスを指定することになると思います。
output_directory
には指定したい書き出し先のパスを指定します。
input_directory
とoutput_directory
を指定した後、
以下のように実行することで、mp4への変換を行うことが可能です。
ruby export_dvd.rb 書き出したいファイル名
ポイント
今回はffmpegでエンコードをする上でいくつかオプションを指定しています。
その中でも特に認識しておいたほうが良さそうな箇所について紹介します。
-c:v h264_videotoolbox
この指定は、エンコーダーをh264_videotoolbox
にするというオプションです。
h264_videotoolbox
はMacで使えるハードウェアアクセラレーションのオプションです。
ハードウェアアクセラレーションを利用することで変換処理を高速化することが可能ですが、
画質などに影響の出る場合があるようです(細かい検証はしていません)
他の実行環境などを使っている場合は、適宜オプションの変更を行なってください。
他の環境で使えるオプションについてm紹介している記事があったのでよかったら参考にしてください。
-pix_fmt yuv420p
こちらについてはMacのQuick Time Playerで実行可能にするため指定しているオプションです。
必要ない場合は外してください。